diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index 349367081..7d821dcdf 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -37,6 +37,18 @@ updates: directory: "animations/" schedule: interval: "daily" + - package-ecosystem: "pub" + directory: "code_sharing/client/" + schedule: + interval: "daily" + - package-ecosystem: "pub" + directory: "code_sharing/server/" + schedule: + interval: "daily" + - package-ecosystem: "pub" + directory: "code_sharing/shared/" + schedule: + interval: "daily" - package-ecosystem: "pub" directory: "desktop_photo_search/fluent_ui/" schedule: @@ -45,6 +57,10 @@ updates: directory: "desktop_photo_search/material/" schedule: interval: "daily" + - package-ecosystem: "pub" + directory: "experimental/context_menus/" + schedule: + interval: "daily" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin/" schedule: @@ -73,6 +89,14 @@ updates: directory: "experimental/linting_tool/" schedule: interval: "daily" + - package-ecosystem: "pub" + directory: "experimental/material_3_demo/" + schedule: + interval: "daily" + - package-ecosystem: "pub" + directory: "experimental/varfont_shader_puzzle/" + schedule: + interval: "daily" - package-ecosystem: "pub" directory: "experimental/web_dashboard/" schedule: @@ -85,6 +109,10 @@ updates: directory: "form_app/" schedule: interval: "daily" + - package-ecosystem: "pub" + directory: "game_template/" + schedule: + interval: "daily" - package-ecosystem: "pub" directory: "infinite_list/" schedule: @@ -109,14 +137,6 @@ updates: directory: "navigation_and_routing/" schedule: interval: "daily" - - package-ecosystem: "pub" - directory: "null_safety/null_safe_app/" - schedule: - interval: "daily" - - package-ecosystem: "pub" - directory: "null_safety/null_unsafe_app/" - schedule: - interval: "daily" - package-ecosystem: "pub" directory: "place_tracker/" schedule: @@ -158,22 +178,10 @@ updates: schedule: interval: "daily" - package-ecosystem: "pub" - directory: "web/charts/" - schedule: - interval: "daily" - - package-ecosystem: "pub" - directory: "web/github_dataviz/" - schedule: - interval: "daily" - - package-ecosystem: "pub" - directory: "web/particle_background/" + directory: "web/_tool/" schedule: interval: "daily" - package-ecosystem: "pub" directory: "web/samples_index/" schedule: interval: "daily" - - package-ecosystem: "pub" - directory: "web/_tool/" - schedule: - interval: "daily" diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index c74db0ea2..88a5854e4 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -26,12 +26,12 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: actions/setup-java@d854b6da19cdadd9a010605529e522c2393ebd38 + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b with: distribution: 'zulu' java-version: '12.x' - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: beta - run: ./tool/flutter_ci_script_stable.sh @@ -41,12 +41,12 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: actions/setup-java@d854b6da19cdadd9a010605529e522c2393ebd38 + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b with: distribution: 'zulu' java-version: '12.x' - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: beta - run: ./tool/android_ci_script.sh @@ -56,12 +56,12 @@ jobs: runs-on: macos-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: actions/setup-java@d854b6da19cdadd9a010605529e522c2393ebd38 + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b with: distribution: 'zulu' java-version: '12.x' - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: beta - run: ./tool/ios_ci_script.sh diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 3393c14d1..e508191af 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -16,23 +16,23 @@ jobs: steps: - name: Checkout - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c with: submodules: true fetch-depth: 0 - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d - name: Init scripts run: dart pub get working-directory: web/_tool - name: Build - run: dart _tool/build_ci.dart + run: dart run _tool/build_ci.dart working-directory: web - name: Deploy - uses: peaceiris/actions-gh-pages@068dc23d9710f1ba62e86896f84735d869951305 + uses: peaceiris/actions-gh-pages@bd8c6b06eba6b3d25d72b7a1767993c0aeee42e7 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: web/samples_index/public diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 49083bd2c..3a74475ff 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,12 +27,12 @@ jobs: flutter_version: [stable, beta, master] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: actions/setup-java@d854b6da19cdadd9a010605529e522c2393ebd38 + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b with: distribution: 'zulu' java-version: '12.x' - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: ${{ matrix.flutter_version }} - run: ./tool/flutter_ci_script_${{ matrix.flutter_version }}.sh @@ -40,12 +40,12 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: actions/setup-java@d854b6da19cdadd9a010605529e522c2393ebd38 + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b with: distribution: 'zulu' java-version: '12.x' - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: stable - run: ./tool/android_ci_script.sh @@ -53,12 +53,12 @@ jobs: runs-on: macos-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: actions/setup-java@d854b6da19cdadd9a010605529e522c2393ebd38 + - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b with: distribution: 'zulu' java-version: '12.x' - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: stable - run: ./tool/ios_ci_script.sh diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 9a3909bc7..abdd7129c 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -22,12 +22,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@865b4092859256271290c77adbd10a43f4779972 + uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 with: results_file: results.sarif results_format: sarif @@ -42,7 +42,7 @@ jobs: # Upload the results as artifacts (optional). - name: "Upload artifact" - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce with: name: SARIF file path: results.sarif @@ -50,6 +50,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@904260d7d935dff982205cbdb42025ce30b7a34f + uses: github/codeql-action/upload-sarif@3ebbd71c74ef574dbc558c82f70e52732c8b44fe with: sarif_file: results.sarif diff --git a/.github/workflows/verify-web-demos.yml b/.github/workflows/verify-web-demos.yml index 22fb49cbf..ff503242b 100644 --- a/.github/workflows/verify-web-demos.yml +++ b/.github/workflows/verify-web-demos.yml @@ -17,19 +17,20 @@ jobs: matrix: flutter_version: - stable - - beta + # TODO(johnpryan): https://github.com/flutter/samples/issues/1469 + # - beta steps: - name: Checkout - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c with: submodules: true fetch-depth: 0 - - uses: subosito/flutter-action@1e6ee87cb840500837bcd50a667fb28815d8e310 + - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d with: channel: ${{ matrix.flutter_version }} - name: Init scripts run: dart pub get working-directory: web/_tool - name: Verify packages - run: dart _tool/verify_packages.dart + run: dart run _tool/verify_packages.dart working-directory: web diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c8905496f..ccd8aaf9e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,15 +66,18 @@ Each app should: * Be designed to build against the current [stable](https://github.com/flutter/flutter/wiki/Flutter-build-release-channels) release of the Flutter SDK. -* Include the same - [`analysis_options.yaml`](https://github.com/flutter/samples/blob/main/animations/analysis_options.yaml) - file used throughout the repo. These files include a base set of analyzer +* Include the top level + [`analysis_options.yaml`](analysis_options.yaml) + file used throughout the repo. This file include a base set of analyzer conventions and lints. * Have no analyzer errors or warnings. * Be formatted with `flutter format`. * Include at least one working test in its `test` folder. -* Be wired into the list of projects in [the CI script](tool/travis_flutter_script.sh), which - runs the analyzer, the formatter, and `flutter test`. +* Be wired into the list of projects in the CI scripts for [stable](tool/flutter_ci_script_stable.sh), + [beta](tool/flutter_ci_script_beta.sh), and [master](tool/flutter_ci_script_master.sh), + which runs the analyzer, the formatter, and `flutter test`. +* Add the new project directory to the [dependabot](.github/dependabot.yaml) configuration + to keep dependencies updated in an on-going basis. * Avoid adding an onerous amount of blobs (typically images or other assets) to the repo. @@ -102,7 +105,7 @@ primary maintainers, though, are: * [@RedBrogdon](https://github.com/RedBrogdon) * [@johnpryan](https://github.com/johnpryan) * [@domesticmouse](https://github.com/domesticmouse) -* [@theacodes](https://github.com/theacodes) +* [@ericwindmill](https://github.com/ericwindmill) You are free to add one of these folks (particularly @RedBrogdon) as a reviewer to any PR sent to this repo. We're happy to comment, answer (or ask) questions, @@ -123,7 +126,7 @@ reviewer. All files in the project must start with the following header. ``` -// Copyright 2021 The Flutter team. All rights reserved. +// Copyright 2023 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. ``` diff --git a/README.md b/README.md index f4d349869..b60ec96c0 100644 --- a/README.md +++ b/README.md @@ -43,3 +43,4 @@ techniques for one of your own apps, try one of these resources: If you run into a bug in one of the samples, please file an issue in the [`flutter/samples` issue tracker](https://github.com/flutter/samples/issues). + diff --git a/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt b/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt index afc0db2d5..e0c96a1b2 100644 --- a/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt +++ b/add_to_app/android_view/android_view/app/src/main/java/dev/flutter/example/androidView/FlutterViewEngine.kt @@ -4,11 +4,13 @@ package dev.flutter.example.androidView +import android.app.Activity import android.content.Intent import androidx.activity.ComponentActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.OnLifecycleEvent +import io.flutter.embedding.android.ExclusiveAppComponent import io.flutter.embedding.android.FlutterView import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.platform.PlatformPlugin @@ -40,7 +42,7 @@ import io.flutter.plugin.platform.PlatformPlugin * what the appropriate intersection between the [FlutterView], the [FlutterEngine] and your * `Activity` should be for your own application. */ -class FlutterViewEngine(val engine: FlutterEngine) : LifecycleObserver{ +class FlutterViewEngine(val engine: FlutterEngine) : LifecycleObserver, ExclusiveAppComponent{ private var flutterView: FlutterView? = null private var activity: ComponentActivity? = null private var platformPlugin: PlatformPlugin? = null @@ -55,7 +57,7 @@ class FlutterViewEngine(val engine: FlutterEngine) : LifecycleObserver{ flutterView!!.let { flutterView -> platformPlugin = PlatformPlugin(activity, engine.platformChannel) - engine.activityControlSurface.attachToActivity(activity, activity.lifecycle) + engine.activityControlSurface.attachToActivity(this, activity.lifecycle) flutterView.attachToFlutterEngine(engine) activity.lifecycle.addObserver(this) } @@ -217,4 +219,25 @@ class FlutterViewEngine(val engine: FlutterEngine) : LifecycleObserver{ engine.activityControlSurface.onUserLeaveHint(); } } + + /** + * Called when another App Component is about to become attached to the [ ] this App Component + * is currently attached to. + * + * + * This App Component's connections to the [io.flutter.embedding.engine.FlutterEngine] + * are still valid at the moment of this call. + */ + override fun detachFromFlutterEngine() { + // Do nothing here + } + + /** + * Retrieve the App Component behind this exclusive App Component. + * + * @return The app component. + */ + override fun getAppComponent(): Activity { + return activity!!; + } } diff --git a/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart b/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart index e3480ba62..c76f830c5 100644 --- a/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart +++ b/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart @@ -76,6 +76,10 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Module Title', + theme: ThemeData( + colorSchemeSeed: Colors.blue, + useMaterial3: true, + ), routes: { '/': (context) => const FullScreenView(), '/mini': (context) => const Contents(), @@ -155,13 +159,13 @@ class Contents extends StatelessWidget { const SizedBox(height: 16), Consumer( builder: (context, model, child) { - return ElevatedButton( + return FilledButton( onPressed: () => model.increment(), child: const Text('Tap me!'), ); }, ), - ElevatedButton( + FilledButton( onPressed: () async { // Use the url_launcher plugin to open the Flutter docs in // a browser. @@ -174,7 +178,7 @@ class Contents extends StatelessWidget { ), if (showExit) ...[ const SizedBox(height: 16), - ElevatedButton( + FilledButton( onPressed: () => SystemNavigator.pop(), child: const Text('Exit this screen'), ), diff --git a/add_to_app/books/flutter_module_books/pubspec.yaml b/add_to_app/books/flutter_module_books/pubspec.yaml index c3636ec22..fca9a5868 100644 --- a/add_to_app/books/flutter_module_books/pubspec.yaml +++ b/add_to_app/books/flutter_module_books/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: sdk: flutter dev_dependencies: - pigeon: ">=2.0.2 <5.0.0" + pigeon: ">=2.0.2 <8.0.0" flutter_test: sdk: flutter flutter_lints: ^2.0.1 diff --git a/analysis_options.yaml b/analysis_options.yaml index 455dedfa4..847745812 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1,9 +1,9 @@ include: package:flutter_lints/flutter.yaml analyzer: - strong-mode: - implicit-casts: false - implicit-dynamic: false + language: + strict-casts: true + strict-inference: true linter: rules: diff --git a/android_splash_screen/lib/main.dart b/android_splash_screen/lib/main.dart index 08057a129..77bc060c4 100644 --- a/android_splash_screen/lib/main.dart +++ b/android_splash_screen/lib/main.dart @@ -30,6 +30,7 @@ class MyApp extends StatelessWidget { title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, + useMaterial3: true, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); diff --git a/animations/.metadata b/animations/.metadata index 31b763f97..d680382e1 100644 --- a/animations/.metadata +++ b/animations/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/animations/android/app/build.gradle b/animations/android/app/build.gradle index e0360df2d..6e18b3074 100644 --- a/animations/android/app/build.gradle +++ b/animations/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.animations" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/animations/android/build.gradle b/animations/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/animations/android/build.gradle +++ b/animations/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/animations/android/gradle/wrapper/gradle-wrapper.properties b/animations/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/animations/android/gradle/wrapper/gradle-wrapper.properties +++ b/animations/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/animations/codelab_rebuild.yaml b/animations/codelab_rebuild.yaml index 8a843bab3..dc45ce802 100644 --- a/animations/codelab_rebuild.yaml +++ b/animations/codelab_rebuild.yaml @@ -11,3 +11,6 @@ steps: - windows - name: Flutter recreate flutter: create --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj diff --git a/animations/ios/Runner.xcodeproj/project.pbxproj b/animations/ios/Runner.xcodeproj/project.pbxproj index 00729aa71..ff7d25268 100644 --- a/animations/ios/Runner.xcodeproj/project.pbxproj +++ b/animations/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -171,6 +171,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +186,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -478,4 +480,4 @@ /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; -} +} \ No newline at end of file diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/animations/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/animations/lib/main.dart b/animations/lib/main.dart index 31d4afea6..1bcbff2ea 100644 --- a/animations/lib/main.dart +++ b/animations/lib/main.dart @@ -6,6 +6,8 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + // ignore: depend_on_referenced_packages import 'package:window_size/window_size.dart'; @@ -147,29 +149,39 @@ final miscDemos = [ builder: (context) => const CurvedAnimationDemo()), ]; -final basicDemoRoutes = - Map.fromEntries(basicDemos.map((d) => MapEntry(d.route, d.builder))); - -final miscDemoRoutes = - Map.fromEntries(miscDemos.map((d) => MapEntry(d.route, d.builder))); - -final allRoutes = { - ...basicDemoRoutes, - ...miscDemoRoutes, -}; +final router = GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (context, state) => const HomePage(), + routes: [ + for (final demo in basicDemos) + GoRoute( + path: demo.route, + builder: (context, state) => demo.builder(context), + ), + for (final demo in miscDemos) + GoRoute( + path: demo.route, + builder: (context, state) => demo.builder(context), + ), + ], + ), + ], +); class AnimationSamples extends StatelessWidget { const AnimationSamples({super.key}); @override Widget build(BuildContext context) { - return MaterialApp( + return MaterialApp.router( title: 'Animation Samples', theme: ThemeData( - primarySwatch: Colors.deepPurple, + colorSchemeSeed: Colors.deepPurple, + useMaterial3: true, ), - routes: allRoutes, - home: const HomePage(), + routerConfig: router, ); } } @@ -206,7 +218,7 @@ class DemoTile extends StatelessWidget { return ListTile( title: Text(demo.name), onTap: () { - Navigator.pushNamed(context, demo.route); + context.go('/${demo.route}'); }, ); } diff --git a/animations/lib/src/basics/01_animated_container.dart b/animations/lib/src/basics/01_animated_container.dart index f521de7c6..ff226f2de 100644 --- a/animations/lib/src/basics/01_animated_container.dart +++ b/animations/lib/src/basics/01_animated_container.dart @@ -12,7 +12,7 @@ Color generateColor() => Color(0xFFFFFFFF & Random().nextInt(0xFFFFFFFF)); class AnimatedContainerDemo extends StatefulWidget { const AnimatedContainerDemo({super.key}); - static String routeName = '/basics/01_animated_container'; + static String routeName = 'basics/01_animated_container'; @override State createState() => _AnimatedContainerDemoState(); diff --git a/animations/lib/src/basics/02_page_route_builder.dart b/animations/lib/src/basics/02_page_route_builder.dart index f37f665d3..8033bc751 100644 --- a/animations/lib/src/basics/02_page_route_builder.dart +++ b/animations/lib/src/basics/02_page_route_builder.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class PageRouteBuilderDemo extends StatelessWidget { const PageRouteBuilderDemo({super.key}); - static const String routeName = '/basics/page_route_builder'; + static const String routeName = 'basics/page_route_builder'; @override Widget build(BuildContext context) { diff --git a/animations/lib/src/basics/03_animation_controller.dart b/animations/lib/src/basics/03_animation_controller.dart index 186fa5c8f..465bb0634 100644 --- a/animations/lib/src/basics/03_animation_controller.dart +++ b/animations/lib/src/basics/03_animation_controller.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class AnimationControllerDemo extends StatefulWidget { const AnimationControllerDemo({super.key}); - static const String routeName = '/basics/animation_controller'; + static const String routeName = 'basics/animation_controller'; @override State createState() => diff --git a/animations/lib/src/basics/04_tweens.dart b/animations/lib/src/basics/04_tweens.dart index 455fcb517..a9648bc12 100644 --- a/animations/lib/src/basics/04_tweens.dart +++ b/animations/lib/src/basics/04_tweens.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class TweenDemo extends StatefulWidget { const TweenDemo({super.key}); - static const String routeName = '/basics/tweens'; + static const String routeName = 'basics/tweens'; @override State createState() => _TweenDemoState(); diff --git a/animations/lib/src/basics/05_animated_builder.dart b/animations/lib/src/basics/05_animated_builder.dart index 9164098b0..494c6470e 100644 --- a/animations/lib/src/basics/05_animated_builder.dart +++ b/animations/lib/src/basics/05_animated_builder.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class AnimatedBuilderDemo extends StatefulWidget { const AnimatedBuilderDemo({super.key}); - static const String routeName = '/basics/animated_builder'; + static const String routeName = 'basics/animated_builder'; @override State createState() => _AnimatedBuilderDemoState(); diff --git a/animations/lib/src/basics/06_custom_tween.dart b/animations/lib/src/basics/06_custom_tween.dart index 406a670e2..36a4bbb4f 100644 --- a/animations/lib/src/basics/06_custom_tween.dart +++ b/animations/lib/src/basics/06_custom_tween.dart @@ -17,7 +17,7 @@ class TypewriterTween extends Tween { class CustomTweenDemo extends StatefulWidget { const CustomTweenDemo({super.key}); - static const String routeName = '/basics/custom_tweens'; + static const String routeName = 'basics/custom_tweens'; @override State createState() => _CustomTweenDemoState(); @@ -50,8 +50,7 @@ class _CustomTweenDemoState extends State appBar: AppBar( title: const Text('Custom Tween'), actions: [ - MaterialButton( - textColor: Colors.white, + TextButton( onPressed: () { if (controller.status == AnimationStatus.completed) { controller.reverse().whenComplete(() { diff --git a/animations/lib/src/basics/07_tween_sequence.dart b/animations/lib/src/basics/07_tween_sequence.dart index de50fd3f8..a494fb3dc 100644 --- a/animations/lib/src/basics/07_tween_sequence.dart +++ b/animations/lib/src/basics/07_tween_sequence.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class TweenSequenceDemo extends StatefulWidget { const TweenSequenceDemo({super.key}); - static const String routeName = '/basics/chaining_tweens'; + static const String routeName = 'basics/chaining_tweens'; @override State createState() => _TweenSequenceDemoState(); diff --git a/animations/lib/src/basics/08_fade_transition.dart b/animations/lib/src/basics/08_fade_transition.dart index d95dfad3e..a10f70a78 100644 --- a/animations/lib/src/basics/08_fade_transition.dart +++ b/animations/lib/src/basics/08_fade_transition.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; // for examples of other common animated widgets. class FadeTransitionDemo extends StatefulWidget { const FadeTransitionDemo({super.key}); - static const String routeName = '/basics/fade_transition'; + static const String routeName = 'basics/fade_transition'; @override State createState() => _FadeTransitionDemoState(); diff --git a/animations/lib/src/misc/animated_list.dart b/animations/lib/src/misc/animated_list.dart index 4a233ca91..9e9167dd8 100644 --- a/animations/lib/src/misc/animated_list.dart +++ b/animations/lib/src/misc/animated_list.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class AnimatedListDemo extends StatefulWidget { const AnimatedListDemo({super.key}); - static String routeName = '/misc/animated_list'; + static String routeName = 'misc/animated_list'; @override State createState() => _AnimatedListDemoState(); diff --git a/animations/lib/src/misc/animated_positioned.dart b/animations/lib/src/misc/animated_positioned.dart index 4f307c579..a948b460d 100644 --- a/animations/lib/src/misc/animated_positioned.dart +++ b/animations/lib/src/misc/animated_positioned.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; class AnimatedPositionedDemo extends StatefulWidget { const AnimatedPositionedDemo({super.key}); - static String routeName = '/basics/09_animated_positioned'; + static String routeName = 'misc/animated_positioned'; @override State createState() => _AnimatedPositionedDemoState(); diff --git a/animations/lib/src/misc/animated_switcher.dart b/animations/lib/src/misc/animated_switcher.dart index 5dc1cafb2..ee048f4a7 100644 --- a/animations/lib/src/misc/animated_switcher.dart +++ b/animations/lib/src/misc/animated_switcher.dart @@ -24,7 +24,7 @@ Widget generateContainer(int keyCount) => Container( class AnimatedSwitcherDemo extends StatefulWidget { const AnimatedSwitcherDemo({super.key}); - static String routeName = '/basics/10_animated_switcher'; + static String routeName = 'misc/animated_switcher'; @override State createState() => _AnimatedSwitcherDemoState(); @@ -47,15 +47,11 @@ class _AnimatedSwitcherDemoState extends State { appBar: AppBar( title: const Text('AnimatedSwitcher'), actions: [ - MaterialButton( + TextButton( onPressed: () => setState( () => container = generateContainer(++keyCount), ), - child: Text( - 'Change Widget', - style: TextStyle( - color: Theme.of(context).buttonTheme.colorScheme!.onPrimary), - ), + child: const Text('Change Widget'), ), ], ), diff --git a/animations/lib/src/misc/card_swipe.dart b/animations/lib/src/misc/card_swipe.dart index 2bd38d433..3fc74ec45 100644 --- a/animations/lib/src/misc/card_swipe.dart +++ b/animations/lib/src/misc/card_swipe.dart @@ -7,7 +7,7 @@ import 'package:flutter/physics.dart'; class CardSwipeDemo extends StatefulWidget { const CardSwipeDemo({super.key}); - static String routeName = '/misc/card_swipe'; + static String routeName = 'misc/card_swipe'; @override State createState() => _CardSwipeDemoState(); diff --git a/animations/lib/src/misc/carousel.dart b/animations/lib/src/misc/carousel.dart index 6817d21b1..37c0bc865 100644 --- a/animations/lib/src/misc/carousel.dart +++ b/animations/lib/src/misc/carousel.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; class CarouselDemo extends StatelessWidget { CarouselDemo({super.key}); - static String routeName = '/misc/carousel'; + static String routeName = 'misc/carousel'; static const List fileNames = [ 'assets/eat_cape_town_sm.jpg', diff --git a/animations/lib/src/misc/curved_animation.dart b/animations/lib/src/misc/curved_animation.dart index 67ed01318..a3debe90c 100644 --- a/animations/lib/src/misc/curved_animation.dart +++ b/animations/lib/src/misc/curved_animation.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; class CurvedAnimationDemo extends StatefulWidget { const CurvedAnimationDemo({super.key}); - static const String routeName = '/misc/curved_animation'; + static const String routeName = 'misc/curved_animation'; @override State createState() => _CurvedAnimationDemoState(); diff --git a/animations/lib/src/misc/expand_card.dart b/animations/lib/src/misc/expand_card.dart index 5e6ca099b..0029ee597 100644 --- a/animations/lib/src/misc/expand_card.dart +++ b/animations/lib/src/misc/expand_card.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class ExpandCardDemo extends StatelessWidget { const ExpandCardDemo({super.key}); - static const String routeName = '/misc/expand_card'; + static const String routeName = 'misc/expand_card'; @override Widget build(BuildContext context) { diff --git a/animations/lib/src/misc/focus_image.dart b/animations/lib/src/misc/focus_image.dart index 01e12fc10..665713a82 100644 --- a/animations/lib/src/misc/focus_image.dart +++ b/animations/lib/src/misc/focus_image.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class FocusImageDemo extends StatelessWidget { const FocusImageDemo({super.key}); - static String routeName = '/misc/focus_image'; + static String routeName = 'misc/focus_image'; @override Widget build(BuildContext context) { diff --git a/animations/lib/src/misc/hero_animation.dart b/animations/lib/src/misc/hero_animation.dart index 965f7cd31..dbceeed2f 100644 --- a/animations/lib/src/misc/hero_animation.dart +++ b/animations/lib/src/misc/hero_animation.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class HeroAnimationDemo extends StatelessWidget { const HeroAnimationDemo({super.key}); - static const String routeName = '/misc/hero_animation'; + static const String routeName = 'misc/hero_animation'; @override Widget build(BuildContext context) { diff --git a/animations/lib/src/misc/physics_card_drag.dart b/animations/lib/src/misc/physics_card_drag.dart index 538376ac3..5fe3a09cc 100644 --- a/animations/lib/src/misc/physics_card_drag.dart +++ b/animations/lib/src/misc/physics_card_drag.dart @@ -7,7 +7,7 @@ import 'package:flutter/physics.dart'; class PhysicsCardDragDemo extends StatelessWidget { const PhysicsCardDragDemo({super.key}); - static const String routeName = '/misc/physics_card'; + static const String routeName = 'misc/physics_card'; @override Widget build(BuildContext context) { diff --git a/animations/lib/src/misc/repeating_animation.dart b/animations/lib/src/misc/repeating_animation.dart index a9abcb2a9..404317a9a 100644 --- a/animations/lib/src/misc/repeating_animation.dart +++ b/animations/lib/src/misc/repeating_animation.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; class RepeatingAnimationDemo extends StatefulWidget { const RepeatingAnimationDemo({super.key}); - static String routeName = '/misc/repeating_animation'; + static String routeName = 'misc/repeating_animation'; @override State createState() => _RepeatingAnimationDemoState(); diff --git a/animations/macos/Podfile b/animations/macos/Podfile index dade8dfad..049abe295 100644 --- a/animations/macos/Podfile +++ b/animations/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/animations/macos/Runner.xcodeproj/project.pbxproj b/animations/macos/Runner.xcodeproj/project.pbxproj index f21bfdb8e..5b2ad2ae6 100644 --- a/animations/macos/Runner.xcodeproj/project.pbxproj +++ b/animations/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -235,6 +235,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -344,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -423,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -470,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/animations/macos/Runner/Configs/AppInfo.xcconfig b/animations/macos/Runner/Configs/AppInfo.xcconfig index 930001074..20d004f2b 100644 --- a/animations/macos/Runner/Configs/AppInfo.xcconfig +++ b/animations/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = animations PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.animations // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/animations/pubspec.yaml b/animations/pubspec.yaml index 4f1330bd0..8b50593c9 100644 --- a/animations/pubspec.yaml +++ b/animations/pubspec.yaml @@ -10,6 +10,7 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 + go_router: ^6.0.0 dev_dependencies: flutter_test: diff --git a/animations/web/index.html b/animations/web/index.html index 86c3c60b5..c9c4c3c76 100644 --- a/animations/web/index.html +++ b/animations/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/animations/windows/runner/CMakeLists.txt b/animations/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/animations/windows/runner/CMakeLists.txt +++ b/animations/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/animations/windows/runner/Runner.rc b/animations/windows/runner/Runner.rc index 8bd0309cc..31697adb0 100644 --- a/animations/windows/runner/Runner.rc +++ b/animations/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "animations" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "animations" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "animations.exe" "\0" VALUE "ProductName", "animations" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/animations/windows/runner/flutter_window.cpp b/animations/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/animations/windows/runner/flutter_window.cpp +++ b/animations/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/animations/windows/runner/main.cpp b/animations/windows/runner/main.cpp index 0fb9660d6..ea6c4c248 100644 --- a/animations/windows/runner/main.cpp +++ b/animations/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"animations", origin, size)) { + if (!window.Create(L"animations", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/animations/windows/runner/win32_window.cpp b/animations/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/animations/windows/runner/win32_window.cpp +++ b/animations/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/animations/windows/runner/win32_window.h b/animations/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/animations/windows/runner/win32_window.h +++ b/animations/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/background_isolate_channels/analysis_options.yaml b/background_isolate_channels/analysis_options.yaml new file mode 100644 index 000000000..5e2133eb6 --- /dev/null +++ b/background_isolate_channels/analysis_options.yaml @@ -0,0 +1 @@ +include: ../analysis_options.yaml diff --git a/background_isolate_channels/lib/main.dart b/background_isolate_channels/lib/main.dart new file mode 100644 index 000000000..49f9c19e1 --- /dev/null +++ b/background_isolate_channels/lib/main.dart @@ -0,0 +1,155 @@ +// Copyright 2022 The Flutter team. 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' show Directory; + +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:path/path.dart' as path; +import 'package:path_provider/path_provider.dart' as path_provider; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:uuid/uuid.dart' as uuid; + +import 'simple_database.dart'; + +/////////////////////////////////////////////////////////////////////////////// +// This is the UI which will present the contents of the [SimpleDatabase]. To +// see where Background Isolate Channels are used see simple_database.dart. +/////////////////////////////////////////////////////////////////////////////// + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Background Isolate Channels', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const MyHomePage(title: 'Background Isolate Channels'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({super.key, required this.title}); + + final String title; + + @override + State createState() { + return _MyHomePageState(); + } +} + +class _MyHomePageState extends State { + /// The database that is running on a background [Isolate]. This is nullable + /// because acquiring a [SimpleDatabase] is an asynchronous operation. This + /// value is `null` until the database is initialized. + SimpleDatabase? _database; + + /// Local cache of the query results returned by the [SimpleDatabase] for the + /// UI to render from. It is nullable since querying the results is + /// asynchronous. The value is `null` before any result has been received. + List? _entries; + + /// What is searched for in the [SimpleDatabase]. + String _query = ''; + + @override + void initState() { + // Write the value to [SharedPreferences] which will get read on the + // [SimpleDatabase]'s isolate. For this example the value is always true + // just for demonstration purposes. + final Future sharedPreferencesSet = SharedPreferences.getInstance() + .then( + (sharedPreferences) => sharedPreferences.setBool('isDebug', true)); + final Future tempDirFuture = + path_provider.getTemporaryDirectory(); + + // Wait until the [SharedPreferences] value is set and the temporary + // directory is received before opening the database. If + // [sharedPreferencesSet] does not happen before opening the + // [SimpleDatabase] there has to be a way to refresh + // [_SimpleDatabaseServer]'s [SharedPreferences] cached values. + Future.wait([sharedPreferencesSet, tempDirFuture]).then((values) { + final Directory? tempDir = values[1] as Directory?; + final String dbPath = path.join(tempDir!.path, 'database.db'); + SimpleDatabase.open(dbPath).then((database) { + setState(() { + _database = database; + }); + _refresh(); + }); + }); + super.initState(); + } + + @override + void dispose() { + _database?.stop(); + super.dispose(); + } + + /// Performs a find on [SimpleDatabase] with [query] and updates the listed + /// contents. + void _refresh({String? query}) { + if (query != null) { + _query = query; + } + _database!.find(_query).toList().then((entries) { + setState(() { + _entries = entries; + }); + }); + } + + /// Adds a UUID and a timestamp to the [SimpleDatabase]. + void _addDate() { + final DateTime now = DateTime.now(); + final DateFormat formatter = + DateFormat('EEEE MMMM d, HH:mm:ss\n${const uuid.Uuid().v4()}'); + final String formatted = formatter.format(now); + _database!.addEntry(formatted).then((_) => _refresh()); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: Column( + children: [ + TextField( + onChanged: + _database == null ? null : (query) => _refresh(query: query), + decoration: const InputDecoration( + labelText: 'Search', + suffixIcon: Icon(Icons.search), + ), + ), + Expanded( + child: ListView.builder( + itemBuilder: (context, index) { + return ListTile(title: Text(_entries![index])); + }, + itemCount: _entries?.length ?? 0, + ), + ), + ], + ), + floatingActionButton: FloatingActionButton( + onPressed: _database == null ? null : _addDate, + tooltip: 'Add', + child: const Icon(Icons.add), + ), + ); + } +} diff --git a/background_isolate_channels/lib/simple_database.dart b/background_isolate_channels/lib/simple_database.dart new file mode 100644 index 000000000..baac65a13 --- /dev/null +++ b/background_isolate_channels/lib/simple_database.dart @@ -0,0 +1,255 @@ +// Copyright 2022 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; +import 'dart:collection'; +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; + +/////////////////////////////////////////////////////////////////////////////// +// **WARNING:** This is not production code and is only intended to be used for +// demonstration purposes. +// +// The following database works by spawning a background isolate and +// communicating with it over Dart's SendPort API. It is presented below as a +// demonstration of the feature "Background Isolate Channels" and shows using +// plugins from a background isolate. The [SimpleDatabase] operates on the root +// isolate and the [_SimpleDatabaseServer] operates on a background isolate. +// +// Here is an example of the protocol they use to communicate: +// +// _________________ ________________________ +// [:SimpleDatabase] [:_SimpleDatabaseServer] +// ----------------- ------------------------ +// | | +// |<---------------(init)------------------------| +// |----------------(init)----------------------->| +// |<---------------(ack)------------------------>| +// | | +// |----------------(add)------------------------>| +// |<---------------(ack)-------------------------| +// | | +// |----------------(query)---------------------->| +// |<---------------(result)----------------------| +// |<---------------(result)----------------------| +// |<---------------(done)------------------------| +// +/////////////////////////////////////////////////////////////////////////////// + +/// The size of the database entries in bytes. +const int _entrySize = 256; + +/// All the command codes that can be sent and received between [SimpleDatabase] and +/// [_SimpleDatabaseServer]. +enum _Codes { + init, + add, + query, + ack, + result, + done, +} + +/// A command sent between [SimpleDatabase] and [_SimpleDatabaseServer]. +class _Command { + const _Command(this.code, {this.arg0, this.arg1}); + + final _Codes code; + final Object? arg0; + final Object? arg1; +} + +/// A SimpleDatabase that stores entries of strings to disk where they can be +/// queried. +/// +/// All the disk operations and queries are executed in a background isolate +/// operating. This class just sends and receives messages to the isolate. +class SimpleDatabase { + SimpleDatabase._(this._isolate, this._path); + + final Isolate _isolate; + final String _path; + late final SendPort _sendPort; + // Completers are stored in a queue so multiple commands can be queued up and + // handled serially. + final Queue> _completers = Queue>(); + // Similarly, StreamControllers are stored in a queue so they can be handled + // asynchronously and serially. + final Queue> _resultsStream = + Queue>(); + + /// Open the database at [path] and launch the server on a background isolate.. + static Future open(String path) async { + final ReceivePort receivePort = ReceivePort(); + final Isolate isolate = + await Isolate.spawn(_SimpleDatabaseServer._run, receivePort.sendPort); + final SimpleDatabase result = SimpleDatabase._(isolate, path); + Completer completer = Completer(); + result._completers.addFirst(completer); + receivePort.listen((message) { + result._handleCommand(message as _Command); + }); + await completer.future; + return result; + } + + /// Writes [value] to the database. + Future addEntry(String value) { + // No processing happens on the calling isolate, it gets delegated to the + // background isolate, see [__SimpleDatabaseServer._doAddEntry]. + Completer completer = Completer(); + _completers.addFirst(completer); + _sendPort.send(_Command(_Codes.add, arg0: value)); + return completer.future; + } + + /// Returns all the strings in the database that contain [query]. + Stream find(String query) { + // No processing happens on the calling isolate, it gets delegated to the + // background isolate, see [__SimpleDatabaseServer._doFind]. + StreamController resultsStream = StreamController(); + _resultsStream.addFirst(resultsStream); + _sendPort.send(_Command(_Codes.query, arg0: query)); + return resultsStream.stream; + } + + /// Handler invoked when a message is received from the port communicating + /// with the database server. + void _handleCommand(_Command command) { + switch (command.code) { + case _Codes.init: + _sendPort = command.arg0 as SendPort; + // ---------------------------------------------------------------------- + // Before using platform channels and plugins from background isolates we + // need to register it with its root isolate. This is achieved by + // acquiring a [RootIsolateToken] which the background isolate uses to + // invoke [BackgroundIsolateBinaryMessenger.ensureInitialized]. + // ---------------------------------------------------------------------- + RootIsolateToken rootIsolateToken = RootIsolateToken.instance!; + _sendPort + .send(_Command(_Codes.init, arg0: _path, arg1: rootIsolateToken)); + break; + case _Codes.ack: + _completers.removeLast().complete(); + break; + case _Codes.result: + _resultsStream.last.add(command.arg0 as String); + break; + case _Codes.done: + _resultsStream.removeLast().close(); + break; + default: + debugPrint('SimpleDatabase unrecognized command: ${command.code}'); + } + } + + /// Kills the background isolate and its database server. + void stop() { + _isolate.kill(); + } +} + +/// The portion of the [SimpleDatabase] that runs on the background isolate. +/// +/// This is where we use the new feature Background Isolate Channels, which +/// allows us to use plugins from background isolates. +class _SimpleDatabaseServer { + _SimpleDatabaseServer(this._sendPort); + + final SendPort _sendPort; + late final String _path; + + // ---------------------------------------------------------------------- + // Here the plugin is used from the background isolate. + // ---------------------------------------------------------------------- + + /// The main entrypoint for the background isolate sent to [Isolate.spawn]. + static void _run(SendPort sendPort) { + ReceivePort receivePort = ReceivePort(); + sendPort.send(_Command(_Codes.init, arg0: receivePort.sendPort)); + final _SimpleDatabaseServer server = _SimpleDatabaseServer(sendPort); + receivePort.listen((message) async { + final _Command command = message as _Command; + await server._handleCommand(command); + }); + } + + /// Handle the [command] received from the [ReceivePort]. + Future _handleCommand(_Command command) async { + switch (command.code) { + case _Codes.init: + _path = command.arg0 as String; + // ---------------------------------------------------------------------- + // The [RootIsolateToken] is required for + // [BackgroundIsolateBinaryMessenger.ensureInitialized] and must be + // obtained on the root isolate and passed into the background isolate via + // a [SendPort]. + // ---------------------------------------------------------------------- + RootIsolateToken rootIsolateToken = command.arg1 as RootIsolateToken; + // ---------------------------------------------------------------------- + // [BackgroundIsolateBinaryMessenger.ensureInitialized] for each + // background isolate that will use plugins. This sets up the + // [BinaryMessenger] that the Platform Channels will communicate with on + // the background isolate. + // ---------------------------------------------------------------------- + BackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken); + _sendPort.send(const _Command(_Codes.ack, arg0: null)); + break; + case _Codes.add: + _doAddEntry(command.arg0 as String); + break; + case _Codes.query: + _doFind(command.arg0 as String); + break; + default: + debugPrint( + '_SimpleDatabaseServer unrecognized command ${command.code}'); + } + } + + /// Perform the add entry operation. + void _doAddEntry(String value) { + debugPrint('Performing add: $value'); + File file = File(_path); + if (!file.existsSync()) { + file.createSync(); + } + RandomAccessFile writer = file.openSync(mode: FileMode.append); + List bytes = utf8.encode(value); + if (bytes.length > _entrySize) { + bytes = bytes.sublist(0, _entrySize); + } else if (bytes.length < _entrySize) { + List newBytes = List.filled(_entrySize, 0); + for (int i = 0; i < bytes.length; ++i) { + newBytes[i] = bytes[i]; + } + bytes = newBytes; + } + writer.writeFromSync(bytes); + writer.closeSync(); + _sendPort.send(const _Command(_Codes.ack, arg0: null)); + } + + /// Perform the find entry operation. + void _doFind(String query) { + debugPrint('Performing find: $query'); + File file = File(_path); + if (file.existsSync()) { + RandomAccessFile reader = file.openSync(); + List buffer = List.filled(_entrySize, 0); + while (reader.readIntoSync(buffer) == _entrySize) { + List foo = buffer.takeWhile((value) => value != 0).toList(); + String string = utf8.decode(foo); + if (string.contains(query)) { + _sendPort.send(_Command(_Codes.result, arg0: string)); + } + } + reader.closeSync(); + } + _sendPort.send(const _Command(_Codes.done, arg0: null)); + } +} diff --git a/background_isolate_channels/pubspec.yaml b/background_isolate_channels/pubspec.yaml new file mode 100644 index 000000000..9c301f542 --- /dev/null +++ b/background_isolate_channels/pubspec.yaml @@ -0,0 +1,27 @@ +name: background_isolate_channels +description: A new Flutter project. + +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +version: 1.0.0+1 + +environment: + sdk: '>=2.19.0-224.0.dev <3.0.0' + +dependencies: + cupertino_icons: ^1.0.2 + flutter: + sdk: flutter + intl: ^0.18.0 + path: ^1.8.2 + path_provider: ^2.0.11 + shared_preferences: ^2.0.15 + uuid: ^3.0.6 + +dev_dependencies: + flutter_lints: ^2.0.1 + flutter_test: + sdk: flutter + +flutter: + uses-material-design: true diff --git a/code_sharing/Dockerfile b/code_sharing/Dockerfile new file mode 100644 index 000000000..f41dc30c6 --- /dev/null +++ b/code_sharing/Dockerfile @@ -0,0 +1,26 @@ +# Use latest stable channel SDK. +FROM dart:stable AS build + +# Copy shared code. +WORKDIR /shared +COPY /shared/. . + +# Copy server code. +WORKDIR /server +COPY /server/. . + +# Resolve app dependencies. +RUN dart pub get + +# AOT compile app. +RUN dart compile exe bin/server.dart -o bin/server + +# Build minimal serving image from AOT-compiled `/server` +# and the pre-built AOT-runtime in the `/runtime/` directory of the base image. +FROM scratch +COPY --from=build /runtime/ / +COPY --from=build /server/bin/server /app/bin/ + +# Start server. +EXPOSE 8080 +CMD ["/app/bin/server"] diff --git a/code_sharing/Makefile b/code_sharing/Makefile new file mode 100644 index 000000000..22aecc54d --- /dev/null +++ b/code_sharing/Makefile @@ -0,0 +1,24 @@ +# MacOS/Linux-only. Sadly, this is only helpful as documentation for Windows. + +# LOCAL / DOCKER +run-server: + # Depends on `make build` + docker-compose up -d + +stop-server: + docker-compose stop + +# Flutter +flutter-local: + cd client && flutter run -d macos + +test: + (cd shared && dart test) + (cd server && dart test) + (cd client && flutter test) + +# Docker +build: + (cd server && dart pub get) + docker build . -t codesharingserver + diff --git a/code_sharing/README.md b/code_sharing/README.md new file mode 100644 index 000000000..f11edba49 --- /dev/null +++ b/code_sharing/README.md @@ -0,0 +1,191 @@ + +# Code Sharing + + + +A full-stack Dart application using Flutter on the client and +[`shelf`](https://pub.dev/packages/shelf) on the server. The Flutter app +itself is still the counter app, but the actual number is stored on the server +and incremented over HTTP using transport data classes understood by both the +Flutter client and shelf server. + +## Goals + +The goal of this sample is to demonstrate the mechanics of sharing business +logic between a Flutter client and a Dart server. The sample also includes a +slightly modified Dockerfile which is required to build a Docker image from +a Dart app containing nested packages. + +## Project Structure + +The sample's project structure is as follows: + +``` +code_sharing/ + # Flutter app + client/ + lib/ + ... + pubspec.yaml + ... + # Shelf + server/ + bin/ + server.dart + pubspec.yaml + Dockerfile + # Common business logic + shared/ + pubspec.yaml + lib/ + ... +``` + +## Recreating this on your own + +Recreating this introductory project for yourself can be done in several steps. + +1. Create a parent directory, likely sharing a name with your project or +product, which will contain everything. +2. Within that directory, run `flutter create client`. You may also name this +Flutter project `app`, `mobile`, `-app` or anything else that +seems appropriate. At this point, your folder structure should look like this: + ``` + my_project/ + client/ + lib/ + main.dart + pubspec.yaml + ... + ``` +3. From the same location where you ran `flutter create`, run +`dart create -t server-shelf server`. You may also name this Shelf project, +`backend`, `api`, `-server`, or anything else that seems +appropriate. At this point, your folder structure should look like this: + ``` + my_project/ + client/ + lib/ + main.dart + pubspec.yaml + ... + server/ + bin/ + server.dart + Dockerfile + pubspec.yaml + ... + ``` +4. Enter your server directory (`cd server`), and run `dart create -t package shared`. +You may also name this package `common`, `domain`, `-shared`, or +anything else that seems appropriate. At this point, your folder structure should +resemble the sample: + ``` + my_project/ + client/ + lib/ + main.dart + pubspec.yaml + ... + server/ + bin/ + server.dart + shared/ + lib/ + src/ + ... + shared.dart + pubspec.yaml + ... + Dockerfile + pubspec.yaml + ... + ``` +5. Next, begin granting access to your shared code by making the following +edits to your Flutter app's `pubspec.yaml` file. Open that file +(`client/pubspec.yaml`) and add the following dependency under the +`dependencies` block: + + ``` + dependencies: + # Add these two lines: + shared: + path: ../server/shared + ``` +6. Next, finish granting access to your shared code by making the following +edits to your server's `pubspec.yaml` file. Open that file +(`server/pubspec.yaml`) and add the following dependency under the +`dependencies` block: + + ``` + dependencies: + # Add these two lines: + shared: + path: ./shared + ``` +7. The final step is to adjust your `Dockerfile`, as it can no longer +successfully run `dart pub get` after only copying over the `pubspec.yaml` +file (that command now requires the entirety of your `shared` directory to be +present. + +- Find the line that says `COPY pubspec.* ./`, and change it to `COPY . .`. + +With that, you're ready to build and run the app. + +## Running the sample + +To run the sample, or an equivalent you've reconstructed yourself, choose a +runtime method below based on your needs. + +### From the CLI + +In one terminal window, run the following commands: + +```sh +cd my_project/server +dart run bin/server.dart +``` + +In a separate terminal window, run the following commands: + +```sh +cd my_project/client +flutter run +``` + +> Note: If you named your mobile client and backend servers something other +than `client` and `server`, you will need to substitute in those values above. + +### Build and run with Docker + +To build your server's Docker image, run the following commands in a terminal +window: + +```sh +cd my_project/server +docker build . -t my_project_server +``` + +To run that image as a Docker container, run the following commands in a +terminal window: + +```sh +docker run -it my_project_server +``` + +### Build and run with `docker-compose` + +If you have [`docker-compose`](https://docs.docker.com/compose/install/) +installed on your machine, you can run the following command to build and +launch your server: + +```sh +cd my_project +docker-compose up -d +``` + +And then later stop the server with: + +```sh +docker-compose stop +``` \ No newline at end of file diff --git a/null_safety/null_unsafe_app/.gitignore b/code_sharing/client/.gitignore similarity index 92% rename from null_safety/null_unsafe_app/.gitignore rename to code_sharing/client/.gitignore index 0fa6b675c..24476c5d1 100644 --- a/null_safety/null_unsafe_app/.gitignore +++ b/code_sharing/client/.gitignore @@ -8,6 +8,7 @@ .buildlog/ .history .svn/ +migrate_working_dir/ # IntelliJ related *.iml @@ -31,9 +32,6 @@ .pub/ /build/ -# Web related -lib/generated_plugin_registrant.dart - # Symbolication related app.*.symbols diff --git a/code_sharing/client/.metadata b/code_sharing/client/.metadata new file mode 100644 index 000000000..bf169f91c --- /dev/null +++ b/code_sharing/client/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + channel: main + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + - platform: android + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + - platform: ios + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + - platform: linux + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + - platform: macos + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + - platform: web + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + - platform: windows + create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/code_sharing/client/README.md b/code_sharing/client/README.md new file mode 100644 index 000000000..2a43b574c --- /dev/null +++ b/code_sharing/client/README.md @@ -0,0 +1,16 @@ +# client + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/web/charts/analysis_options.yaml b/code_sharing/client/analysis_options.yaml similarity index 85% rename from web/charts/analysis_options.yaml rename to code_sharing/client/analysis_options.yaml index 184fcbdd6..61b6c4de1 100644 --- a/web/charts/analysis_options.yaml +++ b/code_sharing/client/analysis_options.yaml @@ -22,8 +22,8 @@ linter: # `// ignore_for_file: name_of_lint` syntax on the line or in the file # producing the lint. rules: - avoid_print: false - prefer_single_quotes: true + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule # Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options \ No newline at end of file +# https://dart.dev/guides/language/analysis-options diff --git a/null_safety/null_safe_app/android/.gitignore b/code_sharing/client/android/.gitignore similarity index 100% rename from null_safety/null_safe_app/android/.gitignore rename to code_sharing/client/android/.gitignore diff --git a/null_safety/null_safe_app/android/app/build.gradle b/code_sharing/client/android/app/build.gradle similarity index 97% rename from null_safety/null_safe_app/android/app/build.gradle rename to code_sharing/client/android/app/build.gradle index 678816c83..9f91be9f6 100644 --- a/null_safety/null_safe_app/android/app/build.gradle +++ b/code_sharing/client/android/app/build.gradle @@ -44,7 +44,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.null_safe_app" + applicationId "com.example.client" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion flutter.minSdkVersion diff --git a/null_safety/null_safe_app/android/app/src/debug/AndroidManifest.xml b/code_sharing/client/android/app/src/debug/AndroidManifest.xml similarity index 90% rename from null_safety/null_safe_app/android/app/src/debug/AndroidManifest.xml rename to code_sharing/client/android/app/src/debug/AndroidManifest.xml index edb2c336f..3ddafc529 100644 --- a/null_safety/null_safe_app/android/app/src/debug/AndroidManifest.xml +++ b/code_sharing/client/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.example.client"> - + - null_safe_app + client diff --git a/null_safety/null_safe_app/web/manifest.json b/code_sharing/client/web/manifest.json similarity index 93% rename from null_safety/null_safe_app/web/manifest.json rename to code_sharing/client/web/manifest.json index 4d9c52aba..554b75eec 100644 --- a/null_safety/null_safe_app/web/manifest.json +++ b/code_sharing/client/web/manifest.json @@ -1,6 +1,6 @@ { - "name": "null_safe_app", - "short_name": "null_safe_app", + "name": "client", + "short_name": "client", "start_url": ".", "display": "standalone", "background_color": "#0175C2", diff --git a/null_safety/null_safe_app/windows/.gitignore b/code_sharing/client/windows/.gitignore similarity index 100% rename from null_safety/null_safe_app/windows/.gitignore rename to code_sharing/client/windows/.gitignore diff --git a/null_safety/null_safe_app/windows/CMakeLists.txt b/code_sharing/client/windows/CMakeLists.txt similarity index 98% rename from null_safety/null_safe_app/windows/CMakeLists.txt rename to code_sharing/client/windows/CMakeLists.txt index b605a2c66..e6f6ba69d 100644 --- a/null_safety/null_safe_app/windows/CMakeLists.txt +++ b/code_sharing/client/windows/CMakeLists.txt @@ -1,10 +1,10 @@ # Project-level configuration. cmake_minimum_required(VERSION 3.14) -project(null_safe_app LANGUAGES CXX) +project(client LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "null_safe_app") +set(BINARY_NAME "client") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/null_safety/null_safe_app/windows/flutter/CMakeLists.txt b/code_sharing/client/windows/flutter/CMakeLists.txt similarity index 100% rename from null_safety/null_safe_app/windows/flutter/CMakeLists.txt rename to code_sharing/client/windows/flutter/CMakeLists.txt diff --git a/null_safety/null_unsafe_app/windows/flutter/generated_plugin_registrant.cc b/code_sharing/client/windows/flutter/generated_plugin_registrant.cc similarity index 53% rename from null_safety/null_unsafe_app/windows/flutter/generated_plugin_registrant.cc rename to code_sharing/client/windows/flutter/generated_plugin_registrant.cc index 9372fc507..8b6d4680a 100644 --- a/null_safety/null_unsafe_app/windows/flutter/generated_plugin_registrant.cc +++ b/code_sharing/client/windows/flutter/generated_plugin_registrant.cc @@ -6,9 +6,6 @@ #include "generated_plugin_registrant.h" -#include void RegisterPlugins(flutter::PluginRegistry* registry) { - WindowSizePluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("WindowSizePlugin")); } diff --git a/null_safety/null_safe_app/windows/flutter/generated_plugin_registrant.h b/code_sharing/client/windows/flutter/generated_plugin_registrant.h similarity index 100% rename from null_safety/null_safe_app/windows/flutter/generated_plugin_registrant.h rename to code_sharing/client/windows/flutter/generated_plugin_registrant.h diff --git a/null_safety/null_safe_app/windows/flutter/generated_plugins.cmake b/code_sharing/client/windows/flutter/generated_plugins.cmake similarity index 98% rename from null_safety/null_safe_app/windows/flutter/generated_plugins.cmake rename to code_sharing/client/windows/flutter/generated_plugins.cmake index ff2147b2c..b93c4c30c 100644 --- a/null_safety/null_safe_app/windows/flutter/generated_plugins.cmake +++ b/code_sharing/client/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - window_size ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/null_safety/null_unsafe_app/windows/runner/CMakeLists.txt b/code_sharing/client/windows/runner/CMakeLists.txt similarity index 96% rename from null_safety/null_unsafe_app/windows/runner/CMakeLists.txt rename to code_sharing/client/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/null_safety/null_unsafe_app/windows/runner/CMakeLists.txt +++ b/code_sharing/client/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/null_safety/null_safe_app/windows/runner/Runner.rc b/code_sharing/client/windows/runner/Runner.rc similarity index 92% rename from null_safety/null_safe_app/windows/runner/Runner.rc rename to code_sharing/client/windows/runner/Runner.rc index 19015b18c..88f5545b8 100644 --- a/null_safety/null_safe_app/windows/runner/Runner.rc +++ b/code_sharing/client/windows/runner/Runner.rc @@ -90,12 +90,12 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "null_safe_app" "\0" + VALUE "FileDescription", "client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "null_safe_app" "\0" + VALUE "InternalName", "client" "\0" VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "null_safe_app.exe" "\0" - VALUE "ProductName", "null_safe_app" "\0" + VALUE "OriginalFilename", "client.exe" "\0" + VALUE "ProductName", "client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" END END diff --git a/null_safety/null_unsafe_app/windows/runner/flutter_window.cpp b/code_sharing/client/windows/runner/flutter_window.cpp similarity index 95% rename from null_safety/null_unsafe_app/windows/runner/flutter_window.cpp rename to code_sharing/client/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/null_safety/null_unsafe_app/windows/runner/flutter_window.cpp +++ b/code_sharing/client/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/null_safety/null_safe_app/windows/runner/flutter_window.h b/code_sharing/client/windows/runner/flutter_window.h similarity index 100% rename from null_safety/null_safe_app/windows/runner/flutter_window.h rename to code_sharing/client/windows/runner/flutter_window.h diff --git a/null_safety/null_safe_app/windows/runner/main.cpp b/code_sharing/client/windows/runner/main.cpp similarity index 95% rename from null_safety/null_safe_app/windows/runner/main.cpp rename to code_sharing/client/windows/runner/main.cpp index 9f77eb72a..01431ddd3 100644 --- a/null_safety/null_safe_app/windows/runner/main.cpp +++ b/code_sharing/client/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"null_safe_app", origin, size)) { + if (!window.Create(L"client", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/null_safety/null_safe_app/windows/runner/resource.h b/code_sharing/client/windows/runner/resource.h similarity index 100% rename from null_safety/null_safe_app/windows/runner/resource.h rename to code_sharing/client/windows/runner/resource.h diff --git a/null_safety/null_safe_app/windows/runner/resources/app_icon.ico b/code_sharing/client/windows/runner/resources/app_icon.ico similarity index 100% rename from null_safety/null_safe_app/windows/runner/resources/app_icon.ico rename to code_sharing/client/windows/runner/resources/app_icon.ico diff --git a/null_safety/null_safe_app/windows/runner/runner.exe.manifest b/code_sharing/client/windows/runner/runner.exe.manifest similarity index 100% rename from null_safety/null_safe_app/windows/runner/runner.exe.manifest rename to code_sharing/client/windows/runner/runner.exe.manifest diff --git a/null_safety/null_safe_app/windows/runner/utils.cpp b/code_sharing/client/windows/runner/utils.cpp similarity index 100% rename from null_safety/null_safe_app/windows/runner/utils.cpp rename to code_sharing/client/windows/runner/utils.cpp diff --git a/null_safety/null_safe_app/windows/runner/utils.h b/code_sharing/client/windows/runner/utils.h similarity index 100% rename from null_safety/null_safe_app/windows/runner/utils.h rename to code_sharing/client/windows/runner/utils.h diff --git a/null_safety/null_unsafe_app/windows/runner/win32_window.cpp b/code_sharing/client/windows/runner/win32_window.cpp similarity index 79% rename from null_safety/null_unsafe_app/windows/runner/win32_window.cpp rename to code_sharing/client/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/null_safety/null_unsafe_app/windows/runner/win32_window.cpp +++ b/code_sharing/client/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/null_safety/null_safe_app/windows/runner/win32_window.h b/code_sharing/client/windows/runner/win32_window.h similarity index 83% rename from null_safety/null_safe_app/windows/runner/win32_window.h rename to code_sharing/client/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/null_safety/null_safe_app/windows/runner/win32_window.h +++ b/code_sharing/client/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/code_sharing/docker-compose.yml b/code_sharing/docker-compose.yml new file mode 100644 index 000000000..e38c622b2 --- /dev/null +++ b/code_sharing/docker-compose.yml @@ -0,0 +1,11 @@ +version: "3.7" +services: + server: + build: + context: . + ports: + - 8080:8080 + environment: + SERVER_PORT: "8080" + SERVER_URL: "localhost" + SERVER_SCHEME: "http" diff --git a/code_sharing/server/.dockerignore b/code_sharing/server/.dockerignore new file mode 100644 index 000000000..7d51f93ae --- /dev/null +++ b/code_sharing/server/.dockerignore @@ -0,0 +1,12 @@ +.dockerignore +Dockerfile +docker-compose.yml +Makefile +README.md +*/build/ +*/.dart_tool/ +.git/ +.github/ +.gitignore +*/.idea/ +*/.packages diff --git a/code_sharing/server/.gitignore b/code_sharing/server/.gitignore new file mode 100644 index 000000000..3c8a15727 --- /dev/null +++ b/code_sharing/server/.gitignore @@ -0,0 +1,6 @@ +# Files and directories created by pub. +.dart_tool/ +.packages + +# Conventional directory for build output. +build/ diff --git a/code_sharing/server/CHANGELOG.md b/code_sharing/server/CHANGELOG.md new file mode 100644 index 000000000..effe43c82 --- /dev/null +++ b/code_sharing/server/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/code_sharing/server/README.md b/code_sharing/server/README.md new file mode 100644 index 000000000..e695d9de5 --- /dev/null +++ b/code_sharing/server/README.md @@ -0,0 +1,49 @@ +A server app built using [Shelf](https://pub.dev/packages/shelf), +configured to enable running with [Docker](https://www.docker.com/). + +This sample code handles HTTP GET requests to `/` and `/echo/` + +# Running the sample + +## Running with the Dart SDK + +You can run the example with the [Dart SDK](https://dart.dev/get-dart) +like this: + +``` +$ dart run bin/server.dart +Server listening on port 8080 +``` + +And then from a second terminal: +``` +$ curl http://0.0.0.0:8080 +Hello, World! +$ curl http://0.0.0.0:8080/echo/I_love_Dart +I_love_Dart +``` + +## Running with Docker + +If you have [Docker Desktop](https://www.docker.com/get-started) installed, you +can build and run with the `docker` command: + +``` +$ docker build . -t myserver +$ docker run -it -p 8080:8080 myserver +Server listening on port 8080 +``` + +And then from a second terminal: +``` +$ curl http://0.0.0.0:8080 +Hello, World! +$ curl http://0.0.0.0:8080/echo/I_love_Dart +I_love_Dart +``` + +You should see the logging printed in the first terminal: +``` +2021-05-06T15:47:04.620417 0:00:00.000158 GET [200] / +2021-05-06T15:47:08.392928 0:00:00.001216 GET [200] /echo/I_love_Dart +``` diff --git a/code_sharing/server/analysis_options.yaml b/code_sharing/server/analysis_options.yaml new file mode 100644 index 000000000..dee8927aa --- /dev/null +++ b/code_sharing/server/analysis_options.yaml @@ -0,0 +1,30 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + +# linter: +# rules: +# - camel_case_types + +# analyzer: +# exclude: +# - path/to/excluded/files/** + +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/code_sharing/server/bin/server.dart b/code_sharing/server/bin/server.dart new file mode 100644 index 000000000..f27ec5f23 --- /dev/null +++ b/code_sharing/server/bin/server.dart @@ -0,0 +1,36 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:shared/shared.dart'; +import 'package:shelf/shelf.dart'; +import 'package:shelf/shelf_io.dart'; +import 'package:shelf_router/shelf_router.dart'; + +int count = 0; + +// Configure routes. +final _router = Router() + ..post('/', _incrementHandler) + ..get('/', _getValueHandler); + +Future _incrementHandler(Request request) async { + final incr = Increment.fromJson(json.decode(await request.readAsString())); + count += incr.by; + return Response.ok(json.encode(Count(count).toJson())); +} + +Response _getValueHandler(Request request) => + Response.ok(json.encode(Count(count).toJson())); + +void main(List args) async { + // Use any available host or container IP (usually `0.0.0.0`). + final ip = InternetAddress.anyIPv4; + + // Configure a pipeline that logs requests. + final handler = Pipeline().addMiddleware(logRequests()).addHandler(_router); + + // For running in containers, we respect the PORT environment variable. + final port = int.parse(Platform.environment['PORT'] ?? '8080'); + final server = await serve(handler, ip, port); + print('Server listening on port ${server.port}'); +} diff --git a/code_sharing/server/pubspec.yaml b/code_sharing/server/pubspec.yaml new file mode 100644 index 000000000..0641e64f9 --- /dev/null +++ b/code_sharing/server/pubspec.yaml @@ -0,0 +1,19 @@ +name: server +description: A server app using the shelf package and Docker. +version: 1.0.0 +publish_to: "none" + +environment: + sdk: ">=2.18.1 <3.0.0" + +dependencies: + args: ^2.0.0 + shelf: ^1.1.0 + shelf_router: ^1.0.0 + shared: + path: ../shared + +dev_dependencies: + http: ^0.13.0 + lints: ^2.0.0 + test: ^1.15.0 diff --git a/code_sharing/server/test/server_test.dart b/code_sharing/server/test/server_test.dart new file mode 100644 index 000000000..31f3d95ca --- /dev/null +++ b/code_sharing/server/test/server_test.dart @@ -0,0 +1,50 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:http/http.dart'; +import 'package:test/test.dart'; + +// Manual test: +// $ dart bin/server.dart +// $ curl -X POST -d '{"by": 1}' -H "Content-Type: application/json" localhost:8080/ + +void main() { + final port = '8080'; + final host = 'http://0.0.0.0:$port'; + late Process p; + + group( + 'Integration test should', + () { + setUp(() async { + p = await Process.start( + 'dart', + ['run', 'bin/server.dart'], + environment: {'PORT': port}, + ); + // Wait for server to start and print to stdout. + await p.stdout.first; + }); + + tearDown(() => p.kill()); + + test('Increment', () async { + final response = await post(Uri.parse('$host/'), body: '{"by": 1}'); + expect(response.statusCode, 200); + expect(response.body, '{"value":1}'); + }); + + test('Get', () async { + final response = await get(Uri.parse('$host/')); + expect(response.statusCode, 200); + final resp = json.decode(response.body) as Map; + expect(resp.containsKey('value'), true); + }); + }, + onPlatform: { + 'windows': [ + Skip('Failing on Windows CI'), + ] + }, + ); +} diff --git a/code_sharing/shared/.gitignore b/code_sharing/shared/.gitignore new file mode 100644 index 000000000..65c34dc86 --- /dev/null +++ b/code_sharing/shared/.gitignore @@ -0,0 +1,10 @@ +# Files and directories created by pub. +.dart_tool/ +.packages + +# Conventional directory for build outputs. +build/ + +# Omit committing pubspec.lock for library packages; see +# https://dart.dev/guides/libraries/private-files#pubspeclock. +pubspec.lock diff --git a/code_sharing/shared/CHANGELOG.md b/code_sharing/shared/CHANGELOG.md new file mode 100644 index 000000000..effe43c82 --- /dev/null +++ b/code_sharing/shared/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +- Initial version. diff --git a/code_sharing/shared/README.md b/code_sharing/shared/README.md new file mode 100644 index 000000000..8b55e735b --- /dev/null +++ b/code_sharing/shared/README.md @@ -0,0 +1,39 @@ + + +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/code_sharing/shared/analysis_options.yaml b/code_sharing/shared/analysis_options.yaml new file mode 100644 index 000000000..bab7a0c0c --- /dev/null +++ b/code_sharing/shared/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the static analysis results for your project (errors, +# warnings, and lints). +# +# This enables the 'recommended' set of lints from `package:lints`. +# This set helps identify many issues that may lead to problems when running +# or consuming Dart code, and enforces writing Dart using a single, idiomatic +# style and format. +# +# If you want a smaller set of lints you can change this to specify +# 'package:lints/core.yaml'. These are just the most critical lints +# (the recommended set includes the core lints). +# The core lints are also what is used by pub.dev for scoring packages. + +include: package:lints/recommended.yaml + +# Uncomment the following section to specify additional rules. + +# linter: +# rules: +# - camel_case_types + +analyzer: + exclude: + - "**/*.g.dart" +# For more information about the core and recommended set of lints, see +# https://dart.dev/go/core-lints + +# For additional information about configuring this file, see +# https://dart.dev/guides/language/analysis-options diff --git a/code_sharing/shared/lib/shared.dart b/code_sharing/shared/lib/shared.dart new file mode 100644 index 000000000..f8d3c81d0 --- /dev/null +++ b/code_sharing/shared/lib/shared.dart @@ -0,0 +1,4 @@ +/// Common data models required by our client and server. +library shared; + +export 'src/models.dart'; diff --git a/code_sharing/shared/lib/src/models.dart b/code_sharing/shared/lib/src/models.dart new file mode 100644 index 000000000..12f4a6617 --- /dev/null +++ b/code_sharing/shared/lib/src/models.dart @@ -0,0 +1,19 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'models.freezed.dart'; +part 'models.g.dart'; + +@Freezed() +class Increment with _$Increment { + const factory Increment({required int by}) = _Increment; + + factory Increment.fromJson(Map json) => + _$IncrementFromJson(json); +} + +@Freezed() +class Count with _$Count { + const factory Count(int value) = _Count; + + factory Count.fromJson(Map json) => _$CountFromJson(json); +} diff --git a/code_sharing/shared/lib/src/models.freezed.dart b/code_sharing/shared/lib/src/models.freezed.dart new file mode 100644 index 000000000..fe2a2e8e3 --- /dev/null +++ b/code_sharing/shared/lib/src/models.freezed.dart @@ -0,0 +1,271 @@ +// 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 + +part of 'models.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(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'); + +Increment _$IncrementFromJson(Map json) { + return _Increment.fromJson(json); +} + +/// @nodoc +mixin _$Increment { + int get by => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $IncrementCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $IncrementCopyWith<$Res> { + factory $IncrementCopyWith(Increment value, $Res Function(Increment) then) = + _$IncrementCopyWithImpl<$Res>; + $Res call({int by}); +} + +/// @nodoc +class _$IncrementCopyWithImpl<$Res> implements $IncrementCopyWith<$Res> { + _$IncrementCopyWithImpl(this._value, this._then); + + final Increment _value; + // ignore: unused_field + final $Res Function(Increment) _then; + + @override + $Res call({ + Object? by = freezed, + }) { + return _then(_value.copyWith( + by: by == freezed + ? _value.by + : by // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc +abstract class _$$_IncrementCopyWith<$Res> implements $IncrementCopyWith<$Res> { + factory _$$_IncrementCopyWith( + _$_Increment value, $Res Function(_$_Increment) then) = + __$$_IncrementCopyWithImpl<$Res>; + @override + $Res call({int by}); +} + +/// @nodoc +class __$$_IncrementCopyWithImpl<$Res> extends _$IncrementCopyWithImpl<$Res> + implements _$$_IncrementCopyWith<$Res> { + __$$_IncrementCopyWithImpl( + _$_Increment _value, $Res Function(_$_Increment) _then) + : super(_value, (v) => _then(v as _$_Increment)); + + @override + _$_Increment get _value => super._value as _$_Increment; + + @override + $Res call({ + Object? by = freezed, + }) { + return _then(_$_Increment( + by: by == freezed + ? _value.by + : by // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$_Increment implements _Increment { + const _$_Increment({required this.by}); + + factory _$_Increment.fromJson(Map json) => + _$$_IncrementFromJson(json); + + @override + final int by; + + @override + String toString() { + return 'Increment(by: $by)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_Increment && + const DeepCollectionEquality().equals(other.by, by)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => + Object.hash(runtimeType, const DeepCollectionEquality().hash(by)); + + @JsonKey(ignore: true) + @override + _$$_IncrementCopyWith<_$_Increment> get copyWith => + __$$_IncrementCopyWithImpl<_$_Increment>(this, _$identity); + + @override + Map toJson() { + return _$$_IncrementToJson( + this, + ); + } +} + +abstract class _Increment implements Increment { + const factory _Increment({required final int by}) = _$_Increment; + + factory _Increment.fromJson(Map json) = + _$_Increment.fromJson; + + @override + int get by; + @override + @JsonKey(ignore: true) + _$$_IncrementCopyWith<_$_Increment> get copyWith => + throw _privateConstructorUsedError; +} + +Count _$CountFromJson(Map json) { + return _Count.fromJson(json); +} + +/// @nodoc +mixin _$Count { + int get value => throw _privateConstructorUsedError; + + Map toJson() => throw _privateConstructorUsedError; + @JsonKey(ignore: true) + $CountCopyWith get copyWith => throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $CountCopyWith<$Res> { + factory $CountCopyWith(Count value, $Res Function(Count) then) = + _$CountCopyWithImpl<$Res>; + $Res call({int value}); +} + +/// @nodoc +class _$CountCopyWithImpl<$Res> implements $CountCopyWith<$Res> { + _$CountCopyWithImpl(this._value, this._then); + + final Count _value; + // ignore: unused_field + final $Res Function(Count) _then; + + @override + $Res call({ + Object? value = freezed, + }) { + return _then(_value.copyWith( + value: value == freezed + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc +abstract class _$$_CountCopyWith<$Res> implements $CountCopyWith<$Res> { + factory _$$_CountCopyWith(_$_Count value, $Res Function(_$_Count) then) = + __$$_CountCopyWithImpl<$Res>; + @override + $Res call({int value}); +} + +/// @nodoc +class __$$_CountCopyWithImpl<$Res> extends _$CountCopyWithImpl<$Res> + implements _$$_CountCopyWith<$Res> { + __$$_CountCopyWithImpl(_$_Count _value, $Res Function(_$_Count) _then) + : super(_value, (v) => _then(v as _$_Count)); + + @override + _$_Count get _value => super._value as _$_Count; + + @override + $Res call({ + Object? value = freezed, + }) { + return _then(_$_Count( + value == freezed + ? _value.value + : value // ignore: cast_nullable_to_non_nullable + as int, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$_Count implements _Count { + const _$_Count(this.value); + + factory _$_Count.fromJson(Map json) => + _$$_CountFromJson(json); + + @override + final int value; + + @override + String toString() { + return 'Count(value: $value)'; + } + + @override + bool operator ==(dynamic other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$_Count && + const DeepCollectionEquality().equals(other.value, value)); + } + + @JsonKey(ignore: true) + @override + int get hashCode => + Object.hash(runtimeType, const DeepCollectionEquality().hash(value)); + + @JsonKey(ignore: true) + @override + _$$_CountCopyWith<_$_Count> get copyWith => + __$$_CountCopyWithImpl<_$_Count>(this, _$identity); + + @override + Map toJson() { + return _$$_CountToJson( + this, + ); + } +} + +abstract class _Count implements Count { + const factory _Count(final int value) = _$_Count; + + factory _Count.fromJson(Map json) = _$_Count.fromJson; + + @override + int get value; + @override + @JsonKey(ignore: true) + _$$_CountCopyWith<_$_Count> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/code_sharing/shared/lib/src/models.g.dart b/code_sharing/shared/lib/src/models.g.dart new file mode 100644 index 000000000..ad3ee04e4 --- /dev/null +++ b/code_sharing/shared/lib/src/models.g.dart @@ -0,0 +1,24 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'models.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$_Increment _$$_IncrementFromJson(Map json) => _$_Increment( + by: json['by'] as int, + ); + +Map _$$_IncrementToJson(_$_Increment instance) => + { + 'by': instance.by, + }; + +_$_Count _$$_CountFromJson(Map json) => _$_Count( + json['value'] as int, + ); + +Map _$$_CountToJson(_$_Count instance) => { + 'value': instance.value, + }; diff --git a/code_sharing/shared/pubspec.yaml b/code_sharing/shared/pubspec.yaml new file mode 100644 index 000000000..49a76916c --- /dev/null +++ b/code_sharing/shared/pubspec.yaml @@ -0,0 +1,17 @@ +name: shared +description: Common data models required by our client and server +version: 1.0.0 + +environment: + sdk: ">=2.18.1 <3.0.0" + +dependencies: + freezed_annotation: ^2.1.0 + json_annotation: ^4.7.0 + +dev_dependencies: + build_runner: ^2.2.1 + freezed: ^2.1.1 + json_serializable: ^6.4.0 + lints: ^2.0.0 + test: ^1.16.0 diff --git a/code_sharing/shared/test/shared_test.dart b/code_sharing/shared/test/shared_test.dart new file mode 100644 index 000000000..990cbc667 --- /dev/null +++ b/code_sharing/shared/test/shared_test.dart @@ -0,0 +1,17 @@ +import 'package:shared/shared.dart'; +import 'package:test/test.dart'; + +void main() { + test('Increment serialization', () { + expect(Increment(by: 3).toJson(), {'by': 3}); + }); + test('Increment derialization', () { + expect(Increment.fromJson({'by': 5}), Increment(by: 5)); + }); + test('Count serialization', () { + expect(Count(3).toJson(), {'value': 3}); + }); + test('Count derialization', () { + expect(Count.fromJson({'value': 5}), Count(5)); + }); +} diff --git a/desktop_photo_search/README.md b/desktop_photo_search/README.md index 772c0dda2..9825d37ee 100644 --- a/desktop_photo_search/README.md +++ b/desktop_photo_search/README.md @@ -1,8 +1,15 @@ # Photo Search app +This desktop application enables you to search +[Unsplash](https://unsplash.com/) for photographs that interest you. +To use it, you need to add an **Access Key** from +[Unsplash API](https://unsplash.com/developers) to +`lib/unsplash_access_key.dart`. + This is the Photo Search app, built out with two different widget sets: - - [Material](material) shows the Photo Search app built with Material widgets + - [Material](material) shows the Photo Search app built with [Material widgets][] - [Fluent UI](fluent_ui) shows the Photo Search app built with [Fluent UI][] widgets -[Fluent UI]: https://pub.dev/packages/fluent_ui \ No newline at end of file +[Fluent UI]: https://pub.dev/packages/fluent_ui +[Material widgets]: https://docs.flutter.dev/development/ui/widgets/material diff --git a/desktop_photo_search/fluent_ui/.metadata b/desktop_photo_search/fluent_ui/.metadata index 21064dafa..a92759766 100644 --- a/desktop_photo_search/fluent_ui/.metadata +++ b/desktop_photo_search/fluent_ui/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart b/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart index e5ddb7386..8461f97f0 100644 --- a/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart +++ b/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart @@ -51,7 +51,7 @@ class _UnsplashSearchContentState extends State { final path = await getSavePath( suggestedName: '${photo.id}.jpg', acceptedTypeGroups: [ - XTypeGroup( + const XTypeGroup( label: 'JPG', extensions: ['jpg'], mimeTypes: ['image/jpeg'], diff --git a/desktop_photo_search/fluent_ui/macos/Podfile b/desktop_photo_search/fluent_ui/macos/Podfile index dade8dfad..049abe295 100644 --- a/desktop_photo_search/fluent_ui/macos/Podfile +++ b/desktop_photo_search/fluent_ui/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj b/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj index baa045c4c..ef34e95e7 100644 --- a/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj +++ b/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -26,7 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7673FDB661ADFD2C35306121 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6833E8937A37A1F115F743FE /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -53,10 +52,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 32C17CF456FA01211B439433 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop_photo_search.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "desktop_photo_search.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -68,11 +66,8 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 599D52A0E16EABE549161D49 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 6833E8937A37A1F115F743FE /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BEB9965F4AE1BA304D5D3C01 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -80,7 +75,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7673FDB661ADFD2C35306121 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -105,7 +99,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - BAF2CB65062ACABE2C155E8A /* Pods */, ); sourceTree = ""; }; @@ -152,21 +145,9 @@ path = Runner; sourceTree = ""; }; - BAF2CB65062ACABE2C155E8A /* Pods */ = { - isa = PBXGroup; - children = ( - 599D52A0E16EABE549161D49 /* Pods-Runner.debug.xcconfig */, - BEB9965F4AE1BA304D5D3C01 /* Pods-Runner.release.xcconfig */, - 32C17CF456FA01211B439433 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 6833E8937A37A1F115F743FE /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -178,13 +159,11 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E652BF6B00D81FB654A74210 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 8F5FF20051C1504DAEBF14FC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -256,6 +235,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -291,45 +271,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 8F5FF20051C1504DAEBF14FC /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - E652BF6B00D81FB654A74210 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -404,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/desktop_photo_search/fluent_ui/macos/Runner/Configs/AppInfo.xcconfig b/desktop_photo_search/fluent_ui/macos/Runner/Configs/AppInfo.xcconfig index da89cc702..59146e6eb 100644 --- a/desktop_photo_search/fluent_ui/macos/Runner/Configs/AppInfo.xcconfig +++ b/desktop_photo_search/fluent_ui/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = desktop_photo_search PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/desktop_photo_search/fluent_ui/pubspec.yaml b/desktop_photo_search/fluent_ui/pubspec.yaml index 38a3669dc..31935b5b1 100644 --- a/desktop_photo_search/fluent_ui/pubspec.yaml +++ b/desktop_photo_search/fluent_ui/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: built_value: ^8.3.0 cupertino_icons: ^1.0.2 file_selector: ^0.9.1 - fluent_ui: ^3.11.1 + fluent_ui: ^4.0.0 fluentui_system_icons: ^1.1.168 flutter: sdk: flutter diff --git a/desktop_photo_search/fluent_ui/windows/runner/CMakeLists.txt b/desktop_photo_search/fluent_ui/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/CMakeLists.txt +++ b/desktop_photo_search/fluent_ui/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/desktop_photo_search/fluent_ui/windows/runner/Runner.rc b/desktop_photo_search/fluent_ui/windows/runner/Runner.rc index b719e46f4..fc7468479 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/Runner.rc +++ b/desktop_photo_search/fluent_ui/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "desktop_photo_search" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "desktop_photo_search" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "desktop_photo_search.exe" "\0" VALUE "ProductName", "desktop_photo_search" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp b/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp +++ b/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/desktop_photo_search/fluent_ui/windows/runner/main.cpp b/desktop_photo_search/fluent_ui/windows/runner/main.cpp index f25ead05b..23aadea21 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/main.cpp +++ b/desktop_photo_search/fluent_ui/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"desktop_photo_search", origin, size)) { + if (!window.Create(L"desktop_photo_search", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp b/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp +++ b/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/desktop_photo_search/fluent_ui/windows/runner/win32_window.h b/desktop_photo_search/fluent_ui/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/win32_window.h +++ b/desktop_photo_search/fluent_ui/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/desktop_photo_search/material/.metadata b/desktop_photo_search/material/.metadata index 21064dafa..a92759766 100644 --- a/desktop_photo_search/material/.metadata +++ b/desktop_photo_search/material/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/desktop_photo_search/material/lib/main.dart b/desktop_photo_search/material/lib/main.dart index 0b4c3c009..ba0932be5 100644 --- a/desktop_photo_search/material/lib/main.dart +++ b/desktop_photo_search/material/lib/main.dart @@ -63,7 +63,8 @@ class UnsplashSearchApp extends StatelessWidget { return MaterialApp( title: 'Photo Search', theme: ThemeData( - primarySwatch: Colors.orange, + colorSchemeSeed: Colors.orange, + useMaterial3: true, ), home: const UnsplashHomePage(title: 'Photo Search'), ); diff --git a/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart b/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart index 7d244b876..aab3deaef 100644 --- a/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart +++ b/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart @@ -53,7 +53,7 @@ class _UnsplashSearchContentState extends State { final path = await getSavePath( suggestedName: '${photo.id}.jpg', acceptedTypeGroups: [ - XTypeGroup( + const XTypeGroup( label: 'JPG', extensions: ['jpg'], mimeTypes: ['image/jpeg'], diff --git a/desktop_photo_search/material/macos/Podfile b/desktop_photo_search/material/macos/Podfile index dade8dfad..049abe295 100644 --- a/desktop_photo_search/material/macos/Podfile +++ b/desktop_photo_search/material/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj b/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj index ba5de86cc..ef34e95e7 100644 --- a/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj +++ b/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -26,7 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 528B573A6E81026EA11AEB8D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5782356BA8E4B0057FE9A963 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -55,7 +54,7 @@ /* Begin PBXFileReference section */ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop_photo_search.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "desktop_photo_search.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -67,11 +66,7 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3AD026BABE349D185A4D93B7 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5782356BA8E4B0057FE9A963 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 64501C6F5F2839B91ADA3180 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 8529115BD75AB77C82E4867B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ @@ -80,7 +75,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 528B573A6E81026EA11AEB8D /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -105,7 +99,6 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - A91AE06AFDB4D62F44D069E0 /* Pods */, ); sourceTree = ""; }; @@ -152,21 +145,9 @@ path = Runner; sourceTree = ""; }; - A91AE06AFDB4D62F44D069E0 /* Pods */ = { - isa = PBXGroup; - children = ( - 8529115BD75AB77C82E4867B /* Pods-Runner.debug.xcconfig */, - 3AD026BABE349D185A4D93B7 /* Pods-Runner.release.xcconfig */, - 64501C6F5F2839B91ADA3180 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 5782356BA8E4B0057FE9A963 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -178,13 +159,11 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 44FB96AE2ECE225B570F214F /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 0836B9381C5D9C235B9BEB93 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -254,25 +233,9 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0836B9381C5D9C235B9BEB93 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -308,28 +271,6 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 44FB96AE2ECE225B570F214F /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -404,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/desktop_photo_search/material/macos/Runner/Configs/AppInfo.xcconfig b/desktop_photo_search/material/macos/Runner/Configs/AppInfo.xcconfig index da89cc702..59146e6eb 100644 --- a/desktop_photo_search/material/macos/Runner/Configs/AppInfo.xcconfig +++ b/desktop_photo_search/material/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = desktop_photo_search PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/desktop_photo_search/material/windows/runner/CMakeLists.txt b/desktop_photo_search/material/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/desktop_photo_search/material/windows/runner/CMakeLists.txt +++ b/desktop_photo_search/material/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/desktop_photo_search/material/windows/runner/Runner.rc b/desktop_photo_search/material/windows/runner/Runner.rc index b719e46f4..fc7468479 100644 --- a/desktop_photo_search/material/windows/runner/Runner.rc +++ b/desktop_photo_search/material/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "desktop_photo_search" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "desktop_photo_search" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "desktop_photo_search.exe" "\0" VALUE "ProductName", "desktop_photo_search" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/desktop_photo_search/material/windows/runner/flutter_window.cpp b/desktop_photo_search/material/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/desktop_photo_search/material/windows/runner/flutter_window.cpp +++ b/desktop_photo_search/material/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/desktop_photo_search/material/windows/runner/main.cpp b/desktop_photo_search/material/windows/runner/main.cpp index f25ead05b..23aadea21 100644 --- a/desktop_photo_search/material/windows/runner/main.cpp +++ b/desktop_photo_search/material/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"desktop_photo_search", origin, size)) { + if (!window.Create(L"desktop_photo_search", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/desktop_photo_search/material/windows/runner/win32_window.cpp b/desktop_photo_search/material/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/desktop_photo_search/material/windows/runner/win32_window.cpp +++ b/desktop_photo_search/material/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/desktop_photo_search/material/windows/runner/win32_window.h b/desktop_photo_search/material/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/desktop_photo_search/material/windows/runner/win32_window.h +++ b/desktop_photo_search/material/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/null_safety/null_safe_app/.gitignore b/experimental/context_menus/.gitignore similarity index 92% rename from null_safety/null_safe_app/.gitignore rename to experimental/context_menus/.gitignore index 0fa6b675c..24476c5d1 100644 --- a/null_safety/null_safe_app/.gitignore +++ b/experimental/context_menus/.gitignore @@ -8,6 +8,7 @@ .buildlog/ .history .svn/ +migrate_working_dir/ # IntelliJ related *.iml @@ -31,9 +32,6 @@ .pub/ /build/ -# Web related -lib/generated_plugin_registrant.dart - # Symbolication related app.*.symbols diff --git a/experimental/context_menus/.metadata b/experimental/context_menus/.metadata new file mode 100644 index 000000000..4f8a2af1f --- /dev/null +++ b/experimental/context_menus/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: d2434a2b6008698a6d805fce87b310098465bf4c + channel: unknown + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + - platform: android + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + - platform: ios + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + - platform: linux + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + - platform: macos + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + - platform: web + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + - platform: windows + create_revision: d2434a2b6008698a6d805fce87b310098465bf4c + base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/experimental/context_menus/README.md b/experimental/context_menus/README.md new file mode 100644 index 000000000..89ec986c5 --- /dev/null +++ b/experimental/context_menus/README.md @@ -0,0 +1,60 @@ +# Custom Context Menus + +This sample shows how to create and customize cross-platform context menus, +such as the text selection toolbar on mobile or the right click menu on desktop. + +| ![Cascading example screenshot](https://raw.githubusercontent.com/flutter/samples/main/experimental/context_menus/screenshots/cascading.png) | ![Custom button example screenshot](https://raw.githubusercontent.com/flutter/samples/main/experimental/context_menus/screenshots/custom.png) | ![Email example screenshot](https://raw.githubusercontent.com/flutter/samples/main/experimental/context_menus/screenshots/email.png) | ![Widget example screenshot](https://raw.githubusercontent.com/flutter/samples/main/experimental/context_menus/screenshots/image.png) | +| --- | --- | --- | --- | + +## Running the sample + +Just run `flutter run` in the same directory as this README file. + +Currently, most of the examples in this demo do not support web, because Flutter +uses the browser's built-in context menu instead. + +## The examples + +### [Anywhere](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/anywhere_page.dart) +Shows how to create a context menu in the parts of an app that don't related to +text selection. For example, a menu in a desktop app that shows when the +background of the app is right clicked. + +### [Cascading menus](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/cascading_menu_page.dart) +Shows how to create a context menu with cascading submenus using +[SubmenuButton](https://master-api.flutter.dev/flutter/material/SubmenuButton-class.html). + +### [Custom buttons](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/custom_buttons_page.dart) +Shows how to customize the default buttons in the existing context menus. + +### [Custom menu](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/custom_menu_page.dart) +Shows how to use any custom widgets as the menu itself, including the option to +keep the default buttons. + +### [Default values](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/default_values_page.dart) +Demonstrates how the +[contextMenuBuilder](https://master-api.flutter.dev/flutter/material/TextField/contextMenuBuilder.html) +property works with various possible values. + +### [Email button](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/email_button_page.dart) +Shows how to create an "email" button in the default context menu that shows +only when an email address is selected. + +### [Field types](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/field_types_page.dart) +Shows how context menus work in the various different field widgets: +EditableText, TextField, and CupertinoTextField. + +### [Global selection](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/global_selection_page.dart) +Shows how to create a custom context menu in non-editable selection with +[SelectionArea](https://master-api.flutter.dev/flutter/material/SelectionArea-class.html). + +### [On a widget](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/image_page.dart) +Shows how to make a widget show a context menu on right click or long press, in +this case an Image widget. + +### [Modified action](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/modified_action_page.dart) +Shows how to modify an existing button so that a custom action is performed when +it is tapped. + +### [Reordered buttons](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/reordered_buttons_page.dart) +Shows how to change the order of the default buttons. diff --git a/null_safety/null_safe_app/analysis_options.yaml b/experimental/context_menus/analysis_options.yaml similarity index 100% rename from null_safety/null_safe_app/analysis_options.yaml rename to experimental/context_menus/analysis_options.yaml diff --git a/null_safety/null_unsafe_app/android/.gitignore b/experimental/context_menus/android/.gitignore similarity index 100% rename from null_safety/null_unsafe_app/android/.gitignore rename to experimental/context_menus/android/.gitignore diff --git a/null_safety/null_unsafe_app/android/app/build.gradle b/experimental/context_menus/android/app/build.gradle similarity index 97% rename from null_safety/null_unsafe_app/android/app/build.gradle rename to experimental/context_menus/android/app/build.gradle index 31f017e83..fc319d015 100644 --- a/null_safety/null_unsafe_app/android/app/build.gradle +++ b/experimental/context_menus/android/app/build.gradle @@ -44,7 +44,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.null_unsafe_app" + applicationId "com.example.context_menus" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion flutter.minSdkVersion diff --git a/null_safety/null_unsafe_app/android/app/src/profile/AndroidManifest.xml b/experimental/context_menus/android/app/src/debug/AndroidManifest.xml similarity index 89% rename from null_safety/null_unsafe_app/android/app/src/profile/AndroidManifest.xml rename to experimental/context_menus/android/app/src/debug/AndroidManifest.xml index fbb68b7c5..4c8d7f592 100644 --- a/null_safety/null_unsafe_app/android/app/src/profile/AndroidManifest.xml +++ b/experimental/context_menus/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.example.context_menus"> - + - null_unsafe_app + context_menus diff --git a/null_safety/null_unsafe_app/web/manifest.json b/experimental/context_menus/web/manifest.json similarity index 92% rename from null_safety/null_unsafe_app/web/manifest.json rename to experimental/context_menus/web/manifest.json index 4f08c73b3..62bf22a4d 100644 --- a/null_safety/null_unsafe_app/web/manifest.json +++ b/experimental/context_menus/web/manifest.json @@ -1,6 +1,6 @@ { - "name": "null_unsafe_app", - "short_name": "null_unsafe_app", + "name": "context_menus", + "short_name": "context_menus", "start_url": ".", "display": "standalone", "background_color": "#0175C2", diff --git a/null_safety/null_unsafe_app/windows/.gitignore b/experimental/context_menus/windows/.gitignore similarity index 100% rename from null_safety/null_unsafe_app/windows/.gitignore rename to experimental/context_menus/windows/.gitignore diff --git a/null_safety/null_unsafe_app/windows/CMakeLists.txt b/experimental/context_menus/windows/CMakeLists.txt similarity index 98% rename from null_safety/null_unsafe_app/windows/CMakeLists.txt rename to experimental/context_menus/windows/CMakeLists.txt index 7d3684157..521f3efec 100644 --- a/null_safety/null_unsafe_app/windows/CMakeLists.txt +++ b/experimental/context_menus/windows/CMakeLists.txt @@ -1,10 +1,10 @@ # Project-level configuration. cmake_minimum_required(VERSION 3.14) -project(null_unsafe_app LANGUAGES CXX) +project(context_menus LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "null_unsafe_app") +set(BINARY_NAME "context_menus") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/null_safety/null_unsafe_app/windows/flutter/CMakeLists.txt b/experimental/context_menus/windows/flutter/CMakeLists.txt similarity index 100% rename from null_safety/null_unsafe_app/windows/flutter/CMakeLists.txt rename to experimental/context_menus/windows/flutter/CMakeLists.txt diff --git a/experimental/context_menus/windows/flutter/generated_plugin_registrant.cc b/experimental/context_menus/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..4f7884874 --- /dev/null +++ b/experimental/context_menus/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); +} diff --git a/null_safety/null_unsafe_app/windows/flutter/generated_plugin_registrant.h b/experimental/context_menus/windows/flutter/generated_plugin_registrant.h similarity index 100% rename from null_safety/null_unsafe_app/windows/flutter/generated_plugin_registrant.h rename to experimental/context_menus/windows/flutter/generated_plugin_registrant.h diff --git a/experimental/context_menus/windows/flutter/generated_plugins.cmake b/experimental/context_menus/windows/flutter/generated_plugins.cmake new file mode 100644 index 000000000..88b22e5c7 --- /dev/null +++ b/experimental/context_menus/windows/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/null_safety/null_safe_app/windows/runner/CMakeLists.txt b/experimental/context_menus/windows/runner/CMakeLists.txt similarity index 100% rename from null_safety/null_safe_app/windows/runner/CMakeLists.txt rename to experimental/context_menus/windows/runner/CMakeLists.txt diff --git a/null_safety/null_unsafe_app/windows/runner/Runner.rc b/experimental/context_menus/windows/runner/Runner.rc similarity index 92% rename from null_safety/null_unsafe_app/windows/runner/Runner.rc rename to experimental/context_menus/windows/runner/Runner.rc index 38eaaed1f..aaf379dea 100644 --- a/null_safety/null_unsafe_app/windows/runner/Runner.rc +++ b/experimental/context_menus/windows/runner/Runner.rc @@ -90,12 +90,12 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "null_unsafe_app" "\0" + VALUE "FileDescription", "context_menus" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "null_unsafe_app" "\0" + VALUE "InternalName", "context_menus" "\0" VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "null_unsafe_app.exe" "\0" - VALUE "ProductName", "null_unsafe_app" "\0" + VALUE "OriginalFilename", "context_menus.exe" "\0" + VALUE "ProductName", "context_menus" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" END END diff --git a/null_safety/null_safe_app/windows/runner/flutter_window.cpp b/experimental/context_menus/windows/runner/flutter_window.cpp similarity index 95% rename from null_safety/null_safe_app/windows/runner/flutter_window.cpp rename to experimental/context_menus/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/null_safety/null_safe_app/windows/runner/flutter_window.cpp +++ b/experimental/context_menus/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/null_safety/null_unsafe_app/windows/runner/flutter_window.h b/experimental/context_menus/windows/runner/flutter_window.h similarity index 100% rename from null_safety/null_unsafe_app/windows/runner/flutter_window.h rename to experimental/context_menus/windows/runner/flutter_window.h diff --git a/null_safety/null_unsafe_app/windows/runner/main.cpp b/experimental/context_menus/windows/runner/main.cpp similarity index 94% rename from null_safety/null_unsafe_app/windows/runner/main.cpp rename to experimental/context_menus/windows/runner/main.cpp index d4aaea468..c1f3fa011 100644 --- a/null_safety/null_unsafe_app/windows/runner/main.cpp +++ b/experimental/context_menus/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"null_unsafe_app", origin, size)) { + if (!window.Create(L"context_menus", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/null_safety/null_unsafe_app/windows/runner/resource.h b/experimental/context_menus/windows/runner/resource.h similarity index 100% rename from null_safety/null_unsafe_app/windows/runner/resource.h rename to experimental/context_menus/windows/runner/resource.h diff --git a/null_safety/null_unsafe_app/windows/runner/resources/app_icon.ico b/experimental/context_menus/windows/runner/resources/app_icon.ico similarity index 100% rename from null_safety/null_unsafe_app/windows/runner/resources/app_icon.ico rename to experimental/context_menus/windows/runner/resources/app_icon.ico diff --git a/null_safety/null_unsafe_app/windows/runner/runner.exe.manifest b/experimental/context_menus/windows/runner/runner.exe.manifest similarity index 100% rename from null_safety/null_unsafe_app/windows/runner/runner.exe.manifest rename to experimental/context_menus/windows/runner/runner.exe.manifest diff --git a/null_safety/null_unsafe_app/windows/runner/utils.cpp b/experimental/context_menus/windows/runner/utils.cpp similarity index 100% rename from null_safety/null_unsafe_app/windows/runner/utils.cpp rename to experimental/context_menus/windows/runner/utils.cpp diff --git a/null_safety/null_unsafe_app/windows/runner/utils.h b/experimental/context_menus/windows/runner/utils.h similarity index 100% rename from null_safety/null_unsafe_app/windows/runner/utils.h rename to experimental/context_menus/windows/runner/utils.h diff --git a/null_safety/null_safe_app/windows/runner/win32_window.cpp b/experimental/context_menus/windows/runner/win32_window.cpp similarity index 95% rename from null_safety/null_safe_app/windows/runner/win32_window.cpp rename to experimental/context_menus/windows/runner/win32_window.cpp index c10f08dc7..c7bcb4df4 100644 --- a/null_safety/null_safe_app/windows/runner/win32_window.cpp +++ b/experimental/context_menus/windows/runner/win32_window.cpp @@ -31,8 +31,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +102,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +117,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -129,6 +129,10 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, diff --git a/null_safety/null_unsafe_app/windows/runner/win32_window.h b/experimental/context_menus/windows/runner/win32_window.h similarity index 85% rename from null_safety/null_unsafe_app/windows/runner/win32_window.h rename to experimental/context_menus/windows/runner/win32_window.h index 17ba43112..a4b8f1f0e 100644 --- a/null_safety/null_unsafe_app/windows/runner/win32_window.h +++ b/experimental/context_menus/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); diff --git a/experimental/element_embedding_demo/.gitignore b/experimental/element_embedding_demo/.gitignore new file mode 100644 index 000000000..734c8638a --- /dev/null +++ b/experimental/element_embedding_demo/.gitignore @@ -0,0 +1,48 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# Keeping the repo +.metadata +pubspec.lock + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/experimental/element_embedding_demo/README.md b/experimental/element_embedding_demo/README.md new file mode 100644 index 000000000..4e0fcbd2e --- /dev/null +++ b/experimental/element_embedding_demo/README.md @@ -0,0 +1,25 @@ +# element_embedding_demo + +This package contains the application used to demonstrate the +upcoming Flutter web feature: "Element Embedding". + +This was first shown on the Flutter Forward event in Nairobi (Kenya), by Tim +Sneath. [See the replay here](https://www.youtube.com/watch?v=zKQYGKAe5W8&t=5799s). + +## Running the demo + +The demo is a Flutter web app, so it can be run as: + +```terminal +$ flutter run -d chrome +``` + +## Points of Interest + +* Check the new JS Interop: + * Look at `lib/main.dart`, find the `@js.JSExport()` annotation. + * Find the JS code that interacts with Dart in `web/js/demo-js-interop.js`. +* See how the Flutter web application is embedded into the page now: + * Find `hostElement` in `web/index.html`. + +_(Built by @ditman, @kevmoo and @malloc-error)_ diff --git a/experimental/element_embedding_demo/assets/dash.png b/experimental/element_embedding_demo/assets/dash.png new file mode 100644 index 000000000..b0710449e Binary files /dev/null and b/experimental/element_embedding_demo/assets/dash.png differ diff --git a/experimental/element_embedding_demo/lib/main.dart b/experimental/element_embedding_demo/lib/main.dart new file mode 100644 index 000000000..159af27ed --- /dev/null +++ b/experimental/element_embedding_demo/lib/main.dart @@ -0,0 +1,335 @@ +// ignore_for_file: avoid_web_libraries_in_flutter + +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:js/js.dart' as js; +import 'package:js/js_util.dart' as js_util; + +void main() { + runApp(const MyApp()); +} + +enum DemoScreen { counter, textField, custom } + +class MyApp extends StatefulWidget { + const MyApp({super.key}); + + @override + State createState() => _MyAppState(); +} + +@js.JSExport() +class _MyAppState extends State { + final _streamController = StreamController.broadcast(); + DemoScreen _currentDemoScreen = DemoScreen.counter; + int _counterScreenCount = 0; + + @override + void initState() { + super.initState(); + final export = js_util.createDartExport(this); + js_util.setProperty(js_util.globalThis, '_appState', export); + js_util.callMethod(js_util.globalThis, '_stateSet', []); + } + + @override + void dispose() { + _streamController.close(); + super.dispose(); + } + + @js.JSExport() + void increment() { + if (_currentDemoScreen == DemoScreen.counter) { + setState(() { + _counterScreenCount++; + _streamController.add(null); + }); + } + } + + @js.JSExport() + void addHandler(void Function() handler) { + _streamController.stream.listen((event) { + handler(); + }); + } + + @js.JSExport() + int get count => _counterScreenCount; + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Element embedding', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + debugShowCheckedModeBanner: false, + home: demoScreenRouter(_currentDemoScreen), + ); + } + + Widget demoScreenRouter(DemoScreen which) { + switch (which) { + case DemoScreen.counter: + return CounterDemo( + title: 'Counter', + numToDisplay: _counterScreenCount, + incrementHandler: increment, + ); + case DemoScreen.textField: + return const TextFieldDemo(title: 'Note to Self'); + case DemoScreen.custom: + return const CustomDemo(title: 'Character Counter'); + } + } + + @js.JSExport() + void changeDemoScreenTo(String screenString) { + setState(() { + switch (screenString) { + case 'counter': + _currentDemoScreen = DemoScreen.counter; + break; + case 'textField': + _currentDemoScreen = DemoScreen.textField; + break; + case 'custom': + _currentDemoScreen = DemoScreen.custom; + break; + default: + _currentDemoScreen = DemoScreen.counter; + break; + } + }); + } +} + +class CounterDemo extends StatefulWidget { + final String title; + final int numToDisplay; + final VoidCallback incrementHandler; + + const CounterDemo({ + super.key, + required this.title, + required this.numToDisplay, + required this.incrementHandler, + }); + + @override + State createState() => _CounterDemoState(); +} + +class _CounterDemoState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'You have pushed the button this many times:', + ), + Text( + '${widget.numToDisplay}', + style: Theme.of(context).textTheme.headlineMedium, + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: widget.incrementHandler, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), + ); + } +} + +class TextFieldDemo extends StatelessWidget { + const TextFieldDemo({super.key, required this.title}); + final String title; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(title), + ), + body: const Center( + child: Padding( + padding: EdgeInsets.all(14.0), + child: TextField( + maxLines: null, + decoration: InputDecoration( + border: OutlineInputBorder(), + // hintText: 'Text goes here!', + ), + ), + ), + ), + ); + } +} + +class CustomDemo extends StatefulWidget { + final String title; + + const CustomDemo({super.key, required this.title}); + + @override + State createState() => _CustomDemoState(); +} + +class _CustomDemoState extends State { + final double textFieldHeight = 80; + final Color colorPrimary = const Color(0xff027dfd); + // const Color(0xffd43324); + // const Color(0xff6200ee); + // const Color.fromARGB(255, 255, 82, 44); + final TextEditingController _textController = TextEditingController(); + late FocusNode textFocusNode; + + int totalCharCount = 0; + + @override + void initState() { + super.initState(); + textFocusNode = FocusNode(); + textFocusNode.requestFocus(); + } + + @override + void dispose() { + _textController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + toolbarHeight: MediaQuery.of(context).size.height - textFieldHeight, + flexibleSpace: Container( + color: colorPrimary, + height: MediaQuery.of(context).size.height - textFieldHeight, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'COUNT WITH DASH!', + style: TextStyle(color: Colors.white, fontSize: 18), + ), + const SizedBox( + height: 26, + ), + Container( + width: 98, + height: 98, + decoration: BoxDecoration( + border: Border.all(width: 2, color: Colors.white), + shape: BoxShape.circle, + ), + child: Center( + child: Container( + width: 90, + height: 90, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('assets/dash.png'), + fit: BoxFit.cover, + ), + color: Colors.white, + shape: BoxShape.circle, + ), + ), + ), + ), + const SizedBox(height: 20), + Text( + totalCharCount.toString(), + style: const TextStyle(color: Colors.white, fontSize: 52), + ), + // const Text( + // 'characters typed', + // style: TextStyle(color: Colors.white, fontSize: 14), + // ), + ], + ), + ), + ), + body: Column( + children: [ + SizedBox( + height: textFieldHeight, + child: Center( + child: Padding( + padding: const EdgeInsets.only(left: 18, right: 18), + child: Row( + children: [ + Expanded( + child: TextField( + controller: _textController, + focusNode: textFocusNode, + onSubmitted: (value) { + textFocusNode.requestFocus(); + }, + onChanged: (value) { + handleChange(); + }, + maxLines: 1, + decoration: const InputDecoration( + border: OutlineInputBorder(), + ), + ), + ), + const SizedBox( + width: 12, + ), + Center( + child: Container( + width: 42, + height: 42, + decoration: BoxDecoration( + color: colorPrimary, + shape: BoxShape.circle, + ), + child: IconButton( + icon: const Icon(Icons.refresh), + color: Colors.white, + onPressed: () { + handleClear(); + }, + ), + ), + ), + ], + ), + ), + ), + ), + ], + ), + ); + } + + void handleChange() { + setState(() { + totalCharCount = _textController.value.text.toString().length; + }); + } + + void handleClear() { + setState(() { + _textController.clear(); + totalCharCount = 0; + }); + textFocusNode.requestFocus(); + } +} diff --git a/experimental/element_embedding_demo/pubspec.yaml b/experimental/element_embedding_demo/pubspec.yaml new file mode 100644 index 000000000..659daedba --- /dev/null +++ b/experimental/element_embedding_demo/pubspec.yaml @@ -0,0 +1,23 @@ +name: element_embedding_demo +description: A small app to be embedded into a HTML element (see web/index.html) +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: '>=3.0.0-0 <4.0.0' + +dependencies: + cupertino_icons: ^1.0.2 + flutter: + sdk: flutter + js: ^0.6.6 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + uses-material-design: true + assets: + - assets/dash.png diff --git a/experimental/element_embedding_demo/web/css/style.css b/experimental/element_embedding_demo/web/css/style.css new file mode 100644 index 000000000..7c654bc7f --- /dev/null +++ b/experimental/element_embedding_demo/web/css/style.css @@ -0,0 +1,260 @@ +@font-face { + font-family: "DM Sans"; + src: url(../fonts/DMSans-Regular.ttf); + font-weight: normal; +} + +@font-face { + font-family: "DM Sans"; + src: url(../fonts/DMSans-Bold.ttf); + font-weight: 700; +} + +/** Reset */ +* { + box-sizing: border-box; + font-family: "DM Sans", sans-serif; +} +html, body { + margin: 0; + padding: 0; + min-height: 100vh; +} + +body { + background-color: #fff; + background-image: radial-gradient( + ellipse at bottom, + #fafafa 5%, + transparent 60% + ), + linear-gradient(136deg, transparent, #eee 290%), + linear-gradient(115deg, #fafafa, transparent 40%), + linear-gradient(180deg, transparent 0, #ddd 70%), + radial-gradient(ellipse at -70% -180%, transparent 80%, #eee 0), + radial-gradient(ellipse at bottom, #71c7ee 40%, transparent 80%), + radial-gradient(ellipse at 5% 340%, transparent 80%, #ddd 0); + background-repeat: no-repeat; + color: #555; +} + +/** Layout **/ +body { display: flex; flex-direction: column; } +section.contents { + flex: 1 1 auto; + flex-direction: row; + display: flex; +} +section.contents aside { + flex: 0; + display: flex; + flex-direction: column; + order: -1; +} +section.contents aside fieldset { + display: flex; + flex-flow: wrap; + justify-content: space-between; + align-items: flex-end; +} +section.contents aside .align-top { + align-self: flex-start; +} +section.contents article { + flex: 1; + margin-top: 50px; + display: flex; + justify-content: center; +} + +/** Title */ +h1 { + font-weight: 700; + font-size: 48px; + padding: 0; + line-height: .9em; + letter-spacing: -2px; + margin: 0 0 30px 0; +} + +/** Controls for the demo (left column) */ +#demo_controls { + background: linear-gradient(90deg, rgba(255,255,255,1) 10%, rgba(255,255,255,0) 100%); + padding: 40px 20px 0px 20px; + z-index: 10; +} +#demo_controls fieldset { + padding: 0; + border: none; + width: 210px; +} +#demo_controls legend { + text-align: center; + font-size: 20px; + line-height: 40px; + margin-bottom: 3px; +} +#demo_controls select.screen { + display: block; + width: 120px; + padding: 4px; + text-align: center; + margin-bottom: 10px; +} +#demo_controls input { + display: block; + width: 100px; + margin: 0 0 10px 0; + text-align: center; +} +/** Keep controls that */ +#demo_controls .tight input { + margin: 0px; +} +#demo_controls input[type="button"] { + line-height: 10px; + font-size: 14px; + border-radius: 15px; + border: 1px solid #aaa; + border-style: outset; + background-color: #fff; + height: 30px; + color: #555; + transition: all 100ms ease-in-out; + cursor: pointer; +} +#demo_controls input[type="button"]:hover { + /* .active:hover background-color: #96B6E3;*/ + border-color: #1c68d4; + background-color: #1c68d4; + color: white; +} +#demo_controls input[type="button"].active { + border-color: #1c68d4; + background-color: #1c68d4; + color: white; +} +#demo_controls input#value { + font-size: 32px; + line-height: 1em; + min-height: 30px; + color: #888; +} +#demo_controls input#increment { + /* Center vertically next to taller input#value */ + position: relative; + top: -6px; +} +#demo_controls .disabled { + pointer-events: none; + opacity: .5; +} + +/** The style for the DIV where flutter will be rendered, and the CSS fx */ +#flutter_target { + border: 1px solid #aaa; + width: 320px; + height: 480px; + border-radius: 0px; + transition: all 150ms ease-in; +} +#flutter_target.resize { + width: 480px; + height: 320px; +} +#flutter_target.spin { animation: spin 6400ms ease-in-out infinite; } +#flutter_target.shadow { position: relative; } +#flutter_target.shadow::before { + content: ""; + position: absolute; + display: block; + width: 100%; + top: calc(100% - 1px); + left: 0; + height: 1px; + background-color: black; + border-radius: 50%; + z-index: -1; + transform: rotateX(80deg); + box-shadow: 0px 0px 60px 38px rgb(0 0 0 / 25%); +} +#flutter_target.mirror { + -webkit-box-reflect: below 0px linear-gradient(to bottom, rgba(0,0,0,0.0), rgba(0,0,0,0.4)); +} + +@keyframes spin { + 0% { + transform: perspective(1000px) rotateY(0deg); + animation-timing-function: ease-in; + } + 15% { + transform: perspective(1000px) rotateY(165deg); + animation-timing-function: linear; + } + 75% { + transform: perspective(1000px) rotateY(195deg); + animation-timing-function: linear; + } + 90% { + transform: perspective(1000px) rotateY(359deg); + animation-timing-function: ease-out; + } + 100% { + transform: perspective(1000px) rotateY(359deg); + animation-timing-function: linear; + } +} + +/** "Handheld"/Device mode container */ +#handheld::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: url(../icons/unsplash-x9WGMWwp1NM.png) no-repeat; + background-size: 1000px; + background-position: top right; + opacity: 1; + transition: opacity 200ms ease-out; +} + +#handheld::after { + content: ""; + position: absolute; + display: block; + width: 77px; + height: 67px; + top: 534px; + right: 573px; + background: url(../icons/nail.png) no-repeat; + background-size: 77px; + opacity: 1; + transition: opacity 200ms ease-out; +} + +#handheld.hidden::before, +#handheld.hidden::after { + opacity: 0; +} + +#flutter_target.handheld { + position: absolute; + right: 0px; + transform-origin: 0px 0px 0px; + transform: rotate(-14.1deg) scale(0.80) translate(-539px, -45px); + width: 316px; + height: 678px; + border-radius: 34px; + border: 1px solid #000; + overflow: hidden; +} + +.imageAttribution { + position: absolute; + bottom: 6px; + right: 6px; + font-size: 10px; +} +.imageAttribution, .imageAttribution a { color: #fff; } \ No newline at end of file diff --git a/experimental/element_embedding_demo/web/favicon.ico b/experimental/element_embedding_demo/web/favicon.ico new file mode 100644 index 000000000..f8a147bf2 Binary files /dev/null and b/experimental/element_embedding_demo/web/favicon.ico differ diff --git a/experimental/element_embedding_demo/web/fonts/DMSans-Bold.ttf b/experimental/element_embedding_demo/web/fonts/DMSans-Bold.ttf new file mode 100644 index 000000000..e70172a06 Binary files /dev/null and b/experimental/element_embedding_demo/web/fonts/DMSans-Bold.ttf differ diff --git a/experimental/element_embedding_demo/web/fonts/DMSans-Regular.ttf b/experimental/element_embedding_demo/web/fonts/DMSans-Regular.ttf new file mode 100644 index 000000000..cad73f073 Binary files /dev/null and b/experimental/element_embedding_demo/web/fonts/DMSans-Regular.ttf differ diff --git a/experimental/element_embedding_demo/web/fonts/OFL.txt b/experimental/element_embedding_demo/web/fonts/OFL.txt new file mode 100644 index 000000000..9de490697 --- /dev/null +++ b/experimental/element_embedding_demo/web/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2014-2017 Indian Type Foundry (info@indiantypefoundry.com). Copyright 2019 Google LLC. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/experimental/element_embedding_demo/web/icons/Icon-192.png b/experimental/element_embedding_demo/web/icons/Icon-192.png new file mode 100644 index 000000000..210951d01 Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/Icon-192.png differ diff --git a/experimental/element_embedding_demo/web/icons/Icon-512.png b/experimental/element_embedding_demo/web/icons/Icon-512.png new file mode 100644 index 000000000..25618cb57 Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/Icon-512.png differ diff --git a/experimental/element_embedding_demo/web/icons/Icon-maskable-192.png b/experimental/element_embedding_demo/web/icons/Icon-maskable-192.png new file mode 100644 index 000000000..210951d01 Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/Icon-maskable-192.png differ diff --git a/experimental/element_embedding_demo/web/icons/Icon-maskable-512.png b/experimental/element_embedding_demo/web/icons/Icon-maskable-512.png new file mode 100644 index 000000000..25618cb57 Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/Icon-maskable-512.png differ diff --git a/experimental/element_embedding_demo/web/icons/favicon.png b/experimental/element_embedding_demo/web/icons/favicon.png new file mode 100644 index 000000000..289117d66 Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/favicon.png differ diff --git a/experimental/element_embedding_demo/web/icons/nail.png b/experimental/element_embedding_demo/web/icons/nail.png new file mode 100644 index 000000000..0a4450eeb Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/nail.png differ diff --git a/experimental/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png b/experimental/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png new file mode 100644 index 000000000..46f973e2f Binary files /dev/null and b/experimental/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png differ diff --git a/experimental/element_embedding_demo/web/index.html b/experimental/element_embedding_demo/web/index.html new file mode 100644 index 000000000..32f4f86ba --- /dev/null +++ b/experimental/element_embedding_demo/web/index.html @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + Element embedding + + + + + + + + +
+
+
+
+ + +
+ + + + + + diff --git a/experimental/element_embedding_demo/web/js/demo-css-fx.js b/experimental/element_embedding_demo/web/js/demo-css-fx.js new file mode 100644 index 000000000..b857cecf1 --- /dev/null +++ b/experimental/element_embedding_demo/web/js/demo-css-fx.js @@ -0,0 +1,82 @@ +// Manages toggling the VFX of the buttons +(function () { + "use strict"; + + let handheld; + + let fxButtons = document.querySelector("#fx"); + let flutterTarget = document.querySelector("#flutter_target"); + + let attribution = document.createElement("span"); + attribution.className = "imageAttribution"; + attribution.innerHTML = "Photo by Nathana Rebouças on Unsplash"; + + // (Re)moves the flutterTarget inside a div#handheld. + function handleHandHeld(fx) { + resetRotation(); + if (!handheld) { + handheld = document.createElement("div"); + handheld.id = "handheld"; + handheld.classList.add("hidden"); + // Inject before the flutterTarget + flutterTarget.parentNode.insertBefore(handheld, flutterTarget); + handheld.append(flutterTarget); + handheld.append(attribution); + window.setTimeout(function () { + handheld.classList.remove("hidden"); + }, 100); + // Disable all effects on the flutter container + flutterTarget.className = ""; + setOtherFxEnabled(false); + } else { + handheld.classList.add("hidden"); + window.setTimeout(function () { + handheld.parentNode.insertBefore(flutterTarget, handheld); + handheld.remove(); + handheld = null; + }, 210); + setOtherFxEnabled(true); + } + window.requestAnimationFrame(function () { + // Let the browser flush the DOM... + flutterTarget.classList.toggle(fx); + }); + } + + // Sets a rotation style on the flutterTarget (in degrees). + function handleRotation(degrees) { + flutterTarget.style.transform = `perspective(1000px) rotateY(${degrees}deg)`; + } + + // Removes the inline style from the flutterTarget. + function resetRotation() { + flutterTarget.style = null; + } + + // Enables/disables the buttons that are not compatible with the "handheld" mode. + function setOtherFxEnabled(enabled) { + fxButtons.querySelectorAll('input').forEach((btn) => { + if (btn.dataset.fx != 'handheld') { + btn.classList.toggle('disabled', !enabled); + } + }); + } + + // Handles clicks on the buttons inside #fx. + fxButtons.addEventListener("click", (event) => { + let fx = event.target.dataset.fx; + if (fx === "handheld") { + handleHandHeld(fx); + return; + } + flutterTarget.classList.toggle(fx); + }); + + fxButtons.addEventListener("input", (event) => { + if (event.target.id === "rotation") { + flutterTarget.classList.toggle("spin", false); + handleRotation(event.target.value); + } + }) + +})(); diff --git a/experimental/element_embedding_demo/web/js/demo-js-interop.js b/experimental/element_embedding_demo/web/js/demo-js-interop.js new file mode 100644 index 000000000..e35164e68 --- /dev/null +++ b/experimental/element_embedding_demo/web/js/demo-js-interop.js @@ -0,0 +1,43 @@ +// Sets up a channel to JS-interop with Flutter +(function() { + "use strict"; + // This function will be called from Flutter when it prepares the JS-interop. + window._stateSet = function () { + window._stateSet = function () { + console.log("Call _stateSet only once!"); + }; + + // The state of the flutter app, see `class _MyAppState` in lib/main.dart. + let appState = window._appState; + + let valueField = document.querySelector("#value"); + let updateState = function () { + valueField.value = appState.count; + }; + + // Register a callback to update the HTML field from Flutter. + appState.addHandler(updateState); + + // Render the first value (0). + updateState(); + + let incrementButton = document.querySelector("#increment"); + incrementButton.addEventListener("click", (event) => { + appState.increment(); + }); + + let screenSelector = document.querySelector("#screen-selector"); + screenSelector.addEventListener("change", (event) => { + appState.changeDemoScreenTo(event.target.value); + setJsInteropControlsEnabled(event.target.value === 'counter'); + }); + + // Enables/disables the Value/Increment controls. + function setJsInteropControlsEnabled(enabled) { + let elements = document.querySelectorAll("#increment, label[for='value']"); + elements.forEach((el) => { + el.classList.toggle('disabled', !enabled); + }) + } + }; +}()); diff --git a/experimental/element_embedding_demo/web/manifest.json b/experimental/element_embedding_demo/web/manifest.json new file mode 100644 index 000000000..c2e2f0891 --- /dev/null +++ b/experimental/element_embedding_demo/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "element_embedding_demo", + "short_name": "element_embedding", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "An example of how to embed a Flutter Web app into any HTML Element of a page.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/experimental/linting_tool/lib/theme/app_theme.dart b/experimental/linting_tool/lib/theme/app_theme.dart index 30ecb77b1..8fd8e704d 100644 --- a/experimental/linting_tool/lib/theme/app_theme.dart +++ b/experimental/linting_tool/lib/theme/app_theme.dart @@ -11,7 +11,6 @@ abstract class AppTheme { static ThemeData buildReplyLightTheme(BuildContext context) { final base = ThemeData.light(); return base.copyWith( - bottomAppBarColor: AppColors.blue700, bottomSheetTheme: BottomSheetThemeData( backgroundColor: AppColors.blue700, modalBackgroundColor: Colors.white.withOpacity(0.7), @@ -45,13 +44,13 @@ abstract class AppTheme { ), textTheme: _buildReplyLightTextTheme(base.textTheme), scaffoldBackgroundColor: AppColors.blue50, + bottomAppBarTheme: const BottomAppBarTheme(color: AppColors.blue700), ); } static ThemeData buildReplyDarkTheme(BuildContext context) { final base = ThemeData.dark(); return base.copyWith( - bottomAppBarColor: AppColors.darkBottomAppBarBackground, bottomSheetTheme: BottomSheetThemeData( backgroundColor: AppColors.darkDrawerBackground, modalBackgroundColor: Colors.black.withOpacity(0.7), @@ -94,6 +93,8 @@ abstract class AppTheme { ), textTheme: _buildReplyDarkTextTheme(base.textTheme), scaffoldBackgroundColor: AppColors.black900, + bottomAppBarTheme: + const BottomAppBarTheme(color: AppColors.darkBottomAppBarBackground), ); } diff --git a/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart b/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart index 94836f3fb..001156d56 100644 --- a/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart +++ b/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart @@ -140,6 +140,7 @@ class _LintExpansionTileState extends State { return const _ProfileTypeDialog(); }, ); + if (!mounted) return; if (destinationProfileType == ProfileType.newProfile) { await showDialog( context: context, diff --git a/experimental/linting_tool/macos/Flutter/GeneratedPluginRegistrant.swift b/experimental/linting_tool/macos/Flutter/GeneratedPluginRegistrant.swift index d2deae347..87d00ec02 100644 --- a/experimental/linting_tool/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/experimental/linting_tool/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,7 @@ import FlutterMacOS import Foundation import file_selector_macos -import path_provider_macos +import path_provider_foundation import url_launcher_macos import window_size diff --git a/experimental/linting_tool/pubspec.yaml b/experimental/linting_tool/pubspec.yaml index a73b84fda..4cb3c1163 100644 --- a/experimental/linting_tool/pubspec.yaml +++ b/experimental/linting_tool/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: equatable: ^2.0.3 file_selector: ^0.9.1 flutter_markdown: ^0.6.2 - google_fonts: ^3.0.0 + google_fonts: ^4.0.0 hive: ^2.0.4 hive_flutter: ^1.1.0 http: ^0.13.3 @@ -36,7 +36,7 @@ dev_dependencies: sdk: flutter build_runner: ^2.0.6 flutter_lints: ^2.0.1 - hive_generator: ^1.1.0 + hive_generator: ^2.0.0 json_serializable: ^6.2.0 flutter: diff --git a/experimental/linting_tool/test/widget_test.mocks.dart b/experimental/linting_tool/test/widget_test.mocks.dart index 5f976d678..4e4b435c9 100644 --- a/experimental/linting_tool/test/widget_test.mocks.dart +++ b/experimental/linting_tool/test/widget_test.mocks.dart @@ -24,8 +24,8 @@ import 'package:mockito/mockito.dart' as _i1; class _FakeResponse_0 extends _i1.Fake implements _i2.Response {} -class _FakeStreamedResponse_1 extends _i1.Fake implements _i3.StreamedResponse { -} +class _FakeStreamedResponse_1 extends _i1.Fake + implements _i3.StreamedResponse {} /// A class which mocks [Client]. /// diff --git a/experimental/material_3_demo/README.md b/experimental/material_3_demo/README.md index 61a028c9c..5004795c7 100644 --- a/experimental/material_3_demo/README.md +++ b/experimental/material_3_demo/README.md @@ -2,7 +2,7 @@ This sample Flutter app showcases Material 3 features in the Flutter Material library. These features include updated components, typography, color system and elevation support. The app supports light and dark themes, different color palettes, as well as the ability to switch between Material 2 and Material 3. For more information about Material 3, the guidance is now live at https://m3.material.io/. -This app also includes new M3 components that haven't landed in the Flutter stable channel, such as IconButtons, Chips, TextFields, Switches and Checkboxes. The app will be migrated to the non-experimental directory in the samples repo once all the components land in the stable branch. For more information about the components in the stable channel, please check the "material_3_demo" in the non-experimental directory. +This app also includes new M3 components that haven't landed in the Flutter stable channel, such as IconButtons, Chips, TextFields, Switches, Checkboxes, Radio buttons and ProgressIndicators. The app will be migrated to the non-experimental directory in the samples repo once all the components land in the stable branch. For more information about the components in the stable channel, please check the "material_3_demo" in the non-experimental directory. # Preview @@ -18,7 +18,7 @@ This app also includes new M3 components that haven't landed in the Flutter stab This button will bring up a pop-up menu that allows the user to change the base color used for the light and dark themes. This uses a new color seed feature to generate entire color schemes from a single color. ## Component Screen -The default screen displays all the updated components in Material 3: AppBar, common Buttons, Floating Action Button(FAB), Chips, Card, Checkbox, Dialog, NavigationBar, NavigationRail, TextFields and Switch. +The default screen displays all the updated components in Material 3: AppBar, common Buttons, Floating Action Button(FAB), Chips, Card, Checkbox, Dialog, NavigationBar, NavigationRail, ProgressIndicators, Radio buttons, TextFields and Switch. ### Adaptive Layout Based on the fact that NavigationRail is not recommended on a small screen, the app changes its layout based on the screen width. If it's played on iOS or Android devices which have a narrow screen, a Navigation Bar will show at the bottom and will be used to navigate. But if it's played as a desktop or a web app, a Navigation Rail will show on the left side and at the same time, a Navigation Bar will show as an example but will not have any functionality. diff --git a/experimental/material_3_demo/ios/Flutter/Debug.xcconfig b/experimental/material_3_demo/ios/Flutter/Debug.xcconfig index 592ceee85..ec97fc6f3 100644 --- a/experimental/material_3_demo/ios/Flutter/Debug.xcconfig +++ b/experimental/material_3_demo/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/experimental/material_3_demo/ios/Flutter/Release.xcconfig b/experimental/material_3_demo/ios/Flutter/Release.xcconfig index 592ceee85..c4855bfe2 100644 --- a/experimental/material_3_demo/ios/Flutter/Release.xcconfig +++ b/experimental/material_3_demo/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/null_safety/null_unsafe_app/ios/Podfile b/experimental/material_3_demo/ios/Podfile similarity index 100% rename from null_safety/null_unsafe_app/ios/Podfile rename to experimental/material_3_demo/ios/Podfile diff --git a/experimental/material_3_demo/lib/color_palettes_screen.dart b/experimental/material_3_demo/lib/color_palettes_screen.dart index db1ace646..db399f817 100644 --- a/experimental/material_3_demo/lib/color_palettes_screen.dart +++ b/experimental/material_3_demo/lib/color_palettes_screen.dart @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; const Widget divider = SizedBox(height: 10); @@ -45,18 +47,46 @@ class ColorPalettesScreen extends StatelessWidget { ); } + Widget dynamicColorNotice() => RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: Theme.of(context).textTheme.bodySmall, + children: [ + const TextSpan( + text: 'To create color schemes based on a ' + 'platform\'s implementation of dynamic color, ' + 'use the '), + TextSpan( + text: 'dynamic_color', + style: const TextStyle(decoration: TextDecoration.underline), + recognizer: TapGestureRecognizer() + ..onTap = () async { + final url = Uri.parse( + 'https://pub.dev/packages/dynamic_color', + ); + if (!await launchUrl(url)) { + throw Exception('Could not launch $url'); + } + }, + ), + const TextSpan(text: ' package.'), + ], + ), + ); + return Expanded( child: LayoutBuilder(builder: (context, constraints) { if (constraints.maxWidth < narrowScreenWidthThreshold) { return SingleChildScrollView( child: Column( children: [ + dynamicColorNotice(), divider, - schemeLabel('Light Theme'), + schemeLabel('Light ColorScheme'), schemeView(lightTheme), divider, divider, - schemeLabel('Dark Theme'), + schemeLabel('Dark ColorScheme'), schemeView(darkTheme), ], ), @@ -65,23 +95,28 @@ class ColorPalettesScreen extends StatelessWidget { return SingleChildScrollView( child: Padding( padding: const EdgeInsets.only(top: 5), - child: Row( + child: Column( children: [ - Expanded( - child: Column( - children: [ - schemeLabel('Light Theme'), - schemeView(lightTheme), - ], - ), - ), - Expanded( - child: Column( - children: [ - schemeLabel('Dark Theme'), - schemeView(darkTheme), - ], - ), + dynamicColorNotice(), + Row( + children: [ + Expanded( + child: Column( + children: [ + schemeLabel('Light ColorScheme'), + schemeView(lightTheme), + ], + ), + ), + Expanded( + child: Column( + children: [ + schemeLabel('Dark ColorScheme'), + schemeView(darkTheme), + ], + ), + ), + ], ), ], ), @@ -252,10 +287,12 @@ class ColorGroup extends StatelessWidget { @override Widget build(BuildContext context) { - return Card( - clipBehavior: Clip.antiAlias, - child: Column( - children: children, + return RepaintBoundary( + child: Card( + clipBehavior: Clip.antiAlias, + child: Column( + children: children, + ), ), ); } diff --git a/experimental/material_3_demo/lib/component_screen.dart b/experimental/material_3_demo/lib/component_screen.dart index c82735d1e..ff3c8bd01 100644 --- a/experimental/material_3_demo/lib/component_screen.dart +++ b/experimental/material_3_demo/lib/component_screen.dart @@ -3,84 +3,172 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; -class ComponentScreen extends StatelessWidget { - const ComponentScreen({super.key, required this.showNavBottomBar}); +const rowDivider = SizedBox(width: 20); +const colDivider = SizedBox(height: 10); +const tinySpacing = 3.0; +const smallSpacing = 10.0; +const double cardWidth = 115; +const double widthConstraint = 450; + +class FirstComponentList extends StatelessWidget { + const FirstComponentList({ + super.key, + required this.showNavBottomBar, + required this.scaffoldKey, + required this.showSecondList, + }); final bool showNavBottomBar; + final GlobalKey scaffoldKey; + final bool showSecondList; @override Widget build(BuildContext context) { - return Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Align( - alignment: Alignment.topCenter, - child: SizedBox( - width: maxWidthConstraint, - child: ListView( - shrinkWrap: true, - children: [ - colDivider, - colDivider, - const Buttons(), - colDivider, - colDivider, - const IconToggleButtons(), - colDivider, - const FloatingActionButtons(), - colDivider, - const Chips(), - colDivider, - const Cards(), - colDivider, - const TextFields(), - colDivider, - const Dialogs(), - colDivider, - const Switches(), - colDivider, - const Checkboxes(), - colDivider, - showNavBottomBar - ? const NavigationBars( - selectedIndex: 0, - isExampleBar: true, - ) - : Container(), - ], - ), - ), - ), - ), + return ListView( + padding: showSecondList + ? const EdgeInsetsDirectional.only(end: smallSpacing) + : EdgeInsets.zero, + children: [ + const Actions(), + colDivider, + const Communication(), + colDivider, + const Containment(), + if (!showSecondList) ...[ + colDivider, + Navigation(scaffoldKey: scaffoldKey), + colDivider, + const Selection(), + colDivider, + const TextInputs() + ], + ], ); } } -const rowDivider = SizedBox(width: 10); -const colDivider = SizedBox(height: 10); -const double cardWidth = 115; -const double maxWidthConstraint = 400; +class SecondComponentList extends StatelessWidget { + const SecondComponentList({ + super.key, + required this.scaffoldKey, + }); -void Function()? handlePressed( - BuildContext context, bool isDisabled, String buttonName) { - return isDisabled - ? null - : () { - final snackBar = SnackBar( - content: Text( - 'Yay! $buttonName is clicked!', - style: TextStyle(color: Theme.of(context).colorScheme.surface), - ), - action: SnackBarAction( - textColor: Theme.of(context).colorScheme.surface, - label: 'Close', - onPressed: () {}, - ), - ); + final GlobalKey scaffoldKey; - ScaffoldMessenger.of(context).showSnackBar(snackBar); - }; + @override + Widget build(BuildContext context) { + return ListView( + padding: const EdgeInsetsDirectional.only(end: smallSpacing), + children: [ + Navigation(scaffoldKey: scaffoldKey), + colDivider, + const Selection(), + colDivider, + const TextInputs(), + ], + ); + } +} + +class Actions extends StatelessWidget { + const Actions({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Actions', children: [ + Buttons(), + FloatingActionButtons(), + IconToggleButtons(), + SegmentedButtons(), + ]); + } +} + +class Communication extends StatelessWidget { + const Communication({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Communication', children: [ + NavigationBars( + selectedIndex: 1, + isExampleBar: true, + isBadgeExample: true, + ), + ProgressIndicators(), + SnackBarSection(), + ]); + } +} + +class Containment extends StatelessWidget { + const Containment({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Containment', children: [ + BottomSheetSection(), + Cards(), + Dialogs(), + Dividers(), + // TODO: Add Lists, https://github.com/flutter/flutter/issues/114006 + // TODO: Add Side sheets, https://github.com/flutter/flutter/issues/119328 + ]); + } +} + +class Navigation extends StatelessWidget { + const Navigation({super.key, required this.scaffoldKey}); + + final GlobalKey scaffoldKey; + + @override + Widget build(BuildContext context) { + return ComponentGroupDecoration(label: 'Navigation', children: [ + const BottomAppBars(), + const NavigationBars( + selectedIndex: 0, + isExampleBar: true, + ), + NavigationDrawers(scaffoldKey: scaffoldKey), + const NavigationRails(), + // TODO: Add Search https://github.com/flutter/flutter/issues/117483 + const Tabs(), + const TopAppBars(), + ]); + } +} + +class Selection extends StatelessWidget { + const Selection({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Selection', children: [ + Checkboxes(), + Chips(), + // TODO: Add Date pickers https://github.com/flutter/flutter/issues/101481 + Menus(), + Radios(), + Sliders(), + Switches(), + // TODO: Add Time pickers https://github.com/flutter/flutter/issues/101480 + ]); + } +} + +class TextInputs extends StatelessWidget { + const TextInputs({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration( + label: 'Text inputs', + children: [TextFields()], + ); + } } class Buttons extends StatefulWidget { @@ -93,15 +181,21 @@ class Buttons extends StatefulWidget { class _ButtonsState extends State { @override Widget build(BuildContext context) { - return Wrap( - alignment: WrapAlignment.spaceEvenly, - children: const [ - ButtonsWithoutIcon(isDisabled: false), - rowDivider, - ButtonsWithIcon(), - rowDivider, - ButtonsWithoutIcon(isDisabled: true), - ], + return ComponentDecoration( + label: 'Common buttons', + tooltipMessage: + 'Use ElevatedButton, FilledButton, FilledButton.tonal, OutlinedButton, or TextButton', + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: const [ + ButtonsWithoutIcon(isDisabled: false), + ButtonsWithIcon(), + ButtonsWithoutIcon(isDisabled: true), + ], + ), + ), ); } } @@ -113,34 +207,38 @@ class ButtonsWithoutIcon extends StatelessWidget { @override Widget build(BuildContext context) { - return IntrinsicWidth( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ElevatedButton( - onPressed: handlePressed(context, isDisabled, 'ElevatedButton'), - child: const Text('Elevated'), - ), - colDivider, - FilledButton( - onPressed: handlePressed(context, isDisabled, 'FilledButton'), - child: const Text('Filled'), - ), - colDivider, - FilledButton.tonal( - onPressed: handlePressed(context, isDisabled, 'FilledTonalButton'), - child: const Text('Filled Tonal'), - ), - colDivider, - OutlinedButton( - onPressed: handlePressed(context, isDisabled, 'OutlinedButton'), - child: const Text('Outlined'), - ), - colDivider, - TextButton( - onPressed: handlePressed(context, isDisabled, 'TextButton'), - child: const Text('Text')), - ], + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 5.0), + child: IntrinsicWidth( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ElevatedButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Elevated'), + ), + colDivider, + FilledButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Filled'), + ), + colDivider, + FilledButton.tonal( + onPressed: isDisabled ? null : () {}, + child: const Text('Filled tonal'), + ), + colDivider, + OutlinedButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Outlined'), + ), + colDivider, + TextButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Text'), + ), + ], + ), ), ); } @@ -151,43 +249,43 @@ class ButtonsWithIcon extends StatelessWidget { @override Widget build(BuildContext context) { - return IntrinsicWidth( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ElevatedButton.icon( - onPressed: - handlePressed(context, false, 'ElevatedButton with Icon'), - icon: const Icon(Icons.add), - label: const Text('Icon'), - ), - colDivider, - FilledButton.icon( - onPressed: handlePressed(context, false, 'FilledButton with Icon'), - label: const Text('Icon'), - icon: const Icon(Icons.add), - ), - colDivider, - FilledButton.tonalIcon( - onPressed: - handlePressed(context, false, 'FilledTonalButton with Icon'), - label: const Text('Icon'), - icon: const Icon(Icons.add), - ), - colDivider, - OutlinedButton.icon( - onPressed: - handlePressed(context, false, 'OutlinedButton with Icon'), - icon: const Icon(Icons.add), - label: const Text('Icon'), - ), - colDivider, - TextButton.icon( - onPressed: handlePressed(context, false, 'TextButton with Icon'), - icon: const Icon(Icons.add), - label: const Text('Icon'), - ) - ], + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: IntrinsicWidth( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ElevatedButton.icon( + onPressed: () {}, + icon: const Icon(Icons.add), + label: const Text('Icon'), + ), + colDivider, + FilledButton.icon( + onPressed: () {}, + label: const Text('Icon'), + icon: const Icon(Icons.add), + ), + colDivider, + FilledButton.tonalIcon( + onPressed: () {}, + label: const Text('Icon'), + icon: const Icon(Icons.add), + ), + colDivider, + OutlinedButton.icon( + onPressed: () {}, + icon: const Icon(Icons.add), + label: const Text('Icon'), + ), + colDivider, + TextButton.icon( + onPressed: () {}, + icon: const Icon(Icons.add), + label: const Text('Icon'), + ) + ], + ), ), ); } @@ -198,30 +296,34 @@ class FloatingActionButtons extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), + return ComponentDecoration( + label: 'Floating action buttons', + tooltipMessage: + 'Use FloatingActionButton or FloatingActionButton.extended', child: Wrap( - alignment: WrapAlignment.spaceEvenly, crossAxisAlignment: WrapCrossAlignment.center, + runSpacing: smallSpacing, + spacing: smallSpacing, children: [ FloatingActionButton.small( onPressed: () {}, + tooltip: 'Small', child: const Icon(Icons.add), ), - rowDivider, - FloatingActionButton( - onPressed: () {}, - child: const Icon(Icons.add), - ), - rowDivider, FloatingActionButton.extended( onPressed: () {}, + tooltip: 'Extended', icon: const Icon(Icons.add), label: const Text('Create'), ), - rowDivider, + FloatingActionButton( + onPressed: () {}, + tooltip: 'Standard', + child: const Icon(Icons.add), + ), FloatingActionButton.large( onPressed: () {}, + tooltip: 'Large', child: const Icon(Icons.add), ), ], @@ -235,91 +337,89 @@ class Cards extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), + return ComponentDecoration( + label: 'Cards', + tooltipMessage: 'Use Card', child: Wrap( alignment: WrapAlignment.spaceEvenly, children: [ SizedBox( width: cardWidth, - child: Tooltip( - margin: const EdgeInsets.only(top: 20), - message: 'Elevated Card', - child: Card( - child: Container( - padding: const EdgeInsets.all(10), - child: Column( - children: const [ - Align( - alignment: Alignment.topRight, - child: Icon(Icons.more_vert), + child: Card( + child: Container( + padding: const EdgeInsets.fromLTRB(10, 5, 5, 10), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: IconButton( + icon: const Icon(Icons.more_vert), + onPressed: () {}, ), - SizedBox(height: 35), - Align( - alignment: Alignment.bottomLeft, - child: Text('Elevated'), - ) - ], - ), + ), + const SizedBox(height: 20), + const Align( + alignment: Alignment.bottomLeft, + child: Text('Elevated'), + ) + ], ), ), ), ), SizedBox( width: cardWidth, - child: Tooltip( - margin: const EdgeInsets.only(top: 20), - message: 'Filled Card', - child: Card( - color: Theme.of(context).colorScheme.surfaceVariant, - elevation: 0, - child: Container( - padding: const EdgeInsets.all(10), - child: Column( - children: const [ - Align( - alignment: Alignment.topRight, - child: Icon(Icons.more_vert), + child: Card( + color: Theme.of(context).colorScheme.surfaceVariant, + elevation: 0, + child: Container( + padding: const EdgeInsets.fromLTRB(10, 5, 5, 10), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: IconButton( + icon: const Icon(Icons.more_vert), + onPressed: () {}, ), - SizedBox(height: 35), - Align( - alignment: Alignment.bottomLeft, - child: Text('Filled'), - ) - ], - ), + ), + const SizedBox(height: 20), + const Align( + alignment: Alignment.bottomLeft, + child: Text('Filled'), + ) + ], ), ), ), ), SizedBox( width: cardWidth, - child: Tooltip( - margin: const EdgeInsets.only(top: 20), - message: 'Outlined Card', - child: Card( - elevation: 0, - shape: RoundedRectangleBorder( - side: BorderSide( - color: Theme.of(context).colorScheme.outline, - ), - borderRadius: const BorderRadius.all(Radius.circular(12)), + child: Card( + elevation: 0, + shape: RoundedRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.outline, ), - child: Container( - padding: const EdgeInsets.all(10), - child: Column( - children: const [ - Align( - alignment: Alignment.topRight, - child: Icon(Icons.more_vert), + borderRadius: const BorderRadius.all(Radius.circular(12)), + ), + child: Container( + padding: const EdgeInsets.fromLTRB(10, 5, 5, 10), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: IconButton( + icon: const Icon(Icons.more_vert), + onPressed: () {}, ), - SizedBox(height: 35), - Align( - alignment: Alignment.bottomLeft, - child: Text('Outlined'), - ) - ], - ), + ), + const SizedBox(height: 20), + const Align( + alignment: Alignment.bottomLeft, + child: Text('Outlined'), + ) + ], ), ), ), @@ -330,113 +430,157 @@ class Cards extends StatelessWidget { } } -class TextFields extends StatelessWidget { +class _ClearButton extends StatelessWidget { + const _ClearButton({required this.controller}); + + final TextEditingController controller; + + @override + Widget build(BuildContext context) => IconButton( + icon: const Icon(Icons.clear), + onPressed: () => controller.clear(), + ); +} + +class TextFields extends StatefulWidget { const TextFields({super.key}); + @override + State createState() => _TextFieldsState(); +} + +class _TextFieldsState extends State { + final TextEditingController _controllerFilled = TextEditingController(); + final TextEditingController _controllerOutlined = TextEditingController(); + @override Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - const Padding( - padding: EdgeInsets.all(10), - child: TextField( - decoration: InputDecoration( - prefixIcon: Icon(Icons.search), - suffixIcon: Icon(Icons.clear), - labelText: 'Filled', - hintText: 'hint text', - helperText: 'supporting text', - filled: true, - ), - ), - ), - Padding( - padding: const EdgeInsets.all(10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: const [ - SizedBox( - width: 170, - child: TextField( - decoration: InputDecoration( - prefixIcon: Icon(Icons.search), - suffixIcon: Icon(Icons.clear), - labelText: 'Filled', - hintText: 'hint text', - helperText: 'supporting text', - filled: true, - errorText: 'error text', - ), - ), - ), - SizedBox( - width: 170, - child: TextField( - enabled: false, - decoration: InputDecoration( - prefixIcon: Icon(Icons.search), - suffixIcon: Icon(Icons.clear), - labelText: 'Disabled', - hintText: 'hint text', - helperText: 'supporting text', - filled: true, - ), - ), + return ComponentDecoration( + label: 'Text fields', + tooltipMessage: 'Use TextField with different InputDecoration', + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: TextField( + controller: _controllerFilled, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerFilled), + labelText: 'Filled', + hintText: 'hint text', + helperText: 'supporting text', + filled: true, ), - ], - ), - ), - const Padding( - padding: EdgeInsets.all(10), - child: TextField( - decoration: InputDecoration( - prefixIcon: Icon(Icons.search), - suffixIcon: Icon(Icons.clear), - labelText: 'Outlined', - hintText: 'hint text', - helperText: 'supporting text', - border: OutlineInputBorder(), ), ), - ), - Padding( - padding: const EdgeInsets.all(10), + Padding( + padding: const EdgeInsets.all(smallSpacing), child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: const [ - SizedBox( - width: 170, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: SizedBox( + width: 200, child: TextField( + maxLength: 10, + maxLengthEnforcement: MaxLengthEnforcement.none, + controller: _controllerFilled, decoration: InputDecoration( - prefixIcon: Icon(Icons.search), - suffixIcon: Icon(Icons.clear), - labelText: 'Outlined', + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerFilled), + labelText: 'Filled', hintText: 'hint text', helperText: 'supporting text', - errorText: 'error text', - border: OutlineInputBorder(), filled: true, + errorText: 'error text', ), ), ), - SizedBox( - width: 170, + ), + const SizedBox(width: smallSpacing), + Flexible( + child: SizedBox( + width: 200, child: TextField( + controller: _controllerFilled, enabled: false, decoration: InputDecoration( - prefixIcon: Icon(Icons.search), - suffixIcon: Icon(Icons.clear), + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerFilled), labelText: 'Disabled', hintText: 'hint text', helperText: 'supporting text', - border: OutlineInputBorder(), filled: true, ), ), ), - ])), - ], + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: TextField( + controller: _controllerOutlined, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerOutlined), + labelText: 'Outlined', + hintText: 'hint text', + helperText: 'supporting text', + border: const OutlineInputBorder(), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: SizedBox( + width: 200, + child: TextField( + controller: _controllerOutlined, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: + _ClearButton(controller: _controllerOutlined), + labelText: 'Outlined', + hintText: 'hint text', + helperText: 'supporting text', + errorText: 'error text', + border: const OutlineInputBorder(), + filled: true, + ), + ), + ), + ), + const SizedBox(width: smallSpacing), + Flexible( + child: SizedBox( + width: 200, + child: TextField( + controller: _controllerOutlined, + enabled: false, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: + _ClearButton(controller: _controllerOutlined), + labelText: 'Disabled', + hintText: 'hint text', + helperText: 'supporting text', + border: const OutlineInputBorder(), + filled: true, + ), + ), + ), + ), + ])), + ], + ), ); } } @@ -453,33 +597,91 @@ class _DialogsState extends State { showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Basic Dialog Title'), + title: const Text('What is a dialog?'), content: const Text( 'A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made.'), actions: [ TextButton( + child: const Text('Okay'), + onPressed: () => Navigator.of(context).pop(), + ), + FilledButton( child: const Text('Dismiss'), onPressed: () => Navigator.of(context).pop(), ), + ], + ), + ); + } + + void openFullscreenDialog(BuildContext context) { + showDialog( + context: context, + builder: (context) => Dialog.fullscreen( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Scaffold( + appBar: AppBar( + title: const Text('Full-screen dialog'), + centerTitle: false, + leading: IconButton( + icon: const Icon(Icons.close), + onPressed: () => Navigator.of(context).pop(), + ), + actions: [ + TextButton( + child: const Text('Close'), + onPressed: () => Navigator.of(context).pop(), + ), + ], + ), + ), + ), + ), + ); + } + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Dialog', + tooltipMessage: + 'Use showDialog with Dialog.fullscreen, AlertDialog, or SimpleDialog', + child: Wrap( + alignment: WrapAlignment.spaceBetween, + children: [ TextButton( - child: const Text('Action'), - onPressed: () => Navigator.of(context).pop(), + child: const Text( + 'Show dialog', + style: TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () => openDialog(context), + ), + TextButton( + child: const Text( + 'Show full-screen dialog', + style: TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () => openFullscreenDialog(context), ), ], ), ); } +} + +class Dividers extends StatelessWidget { + const Dividers({super.key}); @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: TextButton( - child: const Text( - 'Open Dialog', - style: TextStyle(fontWeight: FontWeight.bold), - ), - onPressed: () => openDialog(context), + return ComponentDecoration( + label: 'Dividers', + tooltipMessage: 'Use Divider or VerticalDivider', + child: Column( + children: const [ + Divider(key: Key('divider')), + ], ), ); } @@ -490,11 +692,15 @@ class Switches extends StatelessWidget { @override Widget build(BuildContext context) { - return Column( - children: const [ - SwitchRow(isEnabled: true), - SwitchRow(isEnabled: false), - ], + return ComponentDecoration( + label: 'Switches', + tooltipMessage: 'Use SwitchListTile or Switch', + child: Column( + children: const [ + SwitchRow(isEnabled: true), + SwitchRow(isEnabled: false), + ], + ), ); } } @@ -525,6 +731,7 @@ class _SwitchRowState extends State { return Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ + // TODO: use SwitchListTile when thumbIcon is available https://github.com/flutter/flutter/issues/118616 Switch( value: value0, onChanged: widget.isEnabled @@ -551,128 +758,205 @@ class _SwitchRowState extends State { } } -class Checkboxes extends StatelessWidget { +class Checkboxes extends StatefulWidget { const Checkboxes({super.key}); + @override + State createState() => _CheckboxesState(); +} + +class _CheckboxesState extends State { + bool? isChecked0 = true; + bool? isChecked1; + bool? isChecked2 = false; + @override Widget build(BuildContext context) { - return Column( - children: const [ - CheckboxRow( - isError: false, - ), - CheckboxRow( - isError: true, - ) - ], + return ComponentDecoration( + label: 'Checkboxes', + tooltipMessage: 'Use CheckboxListTile or Checkbox', + child: Column( + children: [ + CheckboxListTile( + tristate: true, + value: isChecked0, + title: const Text('Option 1'), + onChanged: (value) { + setState(() { + isChecked0 = value; + }); + }, + ), + CheckboxListTile( + tristate: true, + value: isChecked1, + title: const Text('Option 2'), + onChanged: (value) { + setState(() { + isChecked1 = value; + }); + }, + ), + CheckboxListTile( + tristate: true, + value: isChecked2, + title: const Text('Option 3'), + // TODO: showcase error state https://github.com/flutter/flutter/issues/118616 + onChanged: (value) { + setState(() { + isChecked2 = value; + }); + }, + ), + const CheckboxListTile( + tristate: true, + title: Text('Option 4'), + value: true, + onChanged: null, + ), + ], + ), ); } } -class CheckboxRow extends StatefulWidget { - const CheckboxRow({super.key, required this.isError}); +enum Value { first, second } - final bool isError; +class Radios extends StatefulWidget { + const Radios({super.key}); @override - State createState() => _CheckboxRowState(); + State createState() => _RadiosState(); } -class _CheckboxRowState extends State { - bool? isChecked0 = true; - bool? isChecked1; - bool? isChecked2 = false; +enum Options { option1, option2, option3 } + +class _RadiosState extends State { + Options? _selectedOption = Options.option1; @override Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Checkbox( - isError: widget.isError, - tristate: true, - value: isChecked0, - onChanged: (value) { - setState(() { - isChecked0 = value; - }); - }, - ), - Checkbox( - isError: widget.isError, - tristate: true, - value: isChecked1, - onChanged: (value) { - setState(() { - isChecked1 = value; - }); - }, - ), - Checkbox( - isError: widget.isError, - tristate: true, - value: isChecked2, - onChanged: (value) { - setState(() { - isChecked2 = value; - }); - }, - ), - Checkbox( - isError: widget.isError, - tristate: true, - value: true, - onChanged: null, - ), - ], + return ComponentDecoration( + label: 'Radio buttons', + tooltipMessage: 'Use RadioListTile or Radio', + child: Column( + children: [ + RadioListTile( + title: const Text('Option 1'), + value: Options.option1, + groupValue: _selectedOption, + onChanged: (value) { + setState(() { + _selectedOption = value; + }); + }, + ), + RadioListTile( + title: const Text('Option 2'), + value: Options.option2, + groupValue: _selectedOption, + onChanged: (value) { + setState(() { + _selectedOption = value; + }); + }, + ), + RadioListTile( + title: const Text('Option 3'), + value: Options.option3, + groupValue: _selectedOption, + onChanged: null, + ), + ], + ), + ); + } +} + +class ProgressIndicators extends StatefulWidget { + const ProgressIndicators({super.key}); + + @override + State createState() => _ProgressIndicatorsState(); +} + +class _ProgressIndicatorsState extends State { + bool playProgressIndicator = false; + + @override + Widget build(BuildContext context) { + final double? progressValue = playProgressIndicator ? null : 0.7; + + return ComponentDecoration( + label: 'Progress indicators', + tooltipMessage: + 'Use CircularProgressIndicator or LinearProgressIndicator', + child: Column( + children: [ + Row( + children: [ + IconButton( + isSelected: playProgressIndicator, + selectedIcon: const Icon(Icons.pause), + icon: const Icon(Icons.play_arrow), + onPressed: () { + setState(() { + playProgressIndicator = !playProgressIndicator; + }); + }, + ), + Expanded( + child: Row( + children: [ + rowDivider, + CircularProgressIndicator( + value: progressValue, + ), + rowDivider, + Expanded( + child: LinearProgressIndicator( + value: progressValue, + ), + ), + rowDivider, + ], + ), + ), + ], + ), + ], + ), ); } } const List appBarDestinations = [ NavigationDestination( - tooltip: 'Updated component list', + tooltip: '', icon: Icon(Icons.widgets_outlined), label: 'Components', selectedIcon: Icon(Icons.widgets), ), NavigationDestination( - tooltip: 'Color palettes in light and dark modes', + tooltip: '', icon: Icon(Icons.format_paint_outlined), label: 'Color', selectedIcon: Icon(Icons.format_paint), ), NavigationDestination( - tooltip: 'Different text styles for the default TextTheme', + tooltip: '', icon: Icon(Icons.text_snippet_outlined), label: 'Typography', selectedIcon: Icon(Icons.text_snippet), ), NavigationDestination( - tooltip: - 'Different ways of elevation with a new supported feature "surfaceTintColor"', + tooltip: '', icon: Icon(Icons.invert_colors_on_outlined), label: 'Elevation', selectedIcon: Icon(Icons.opacity), ) ]; -final List navRailDestinations = appBarDestinations - .map( - (destination) => NavigationRailDestination( - icon: Tooltip( - message: destination.label, - child: destination.icon, - ), - selectedIcon: Tooltip( - message: destination.label, - child: destination.selectedIcon, - ), - label: Text(destination.label), - ), - ) - .toList(); - const List exampleBarDestinations = [ NavigationDestination( tooltip: '', @@ -694,24 +978,53 @@ const List exampleBarDestinations = [ ) ]; -class NavigationBars extends StatefulWidget { - final void Function(int)? onSelectItem; - final int selectedIndex; - final bool isExampleBar; +List barWithBadgeDestinations = [ + NavigationDestination( + tooltip: '', + icon: Badge.count(count: 1000, child: const Icon(Icons.mail_outlined)), + label: 'Mail', + selectedIcon: Badge.count(count: 1000, child: const Icon(Icons.mail)), + ), + const NavigationDestination( + tooltip: '', + icon: Badge(label: Text('10'), child: Icon(Icons.chat_bubble_outline)), + label: 'Chat', + selectedIcon: Badge(label: Text('10'), child: Icon(Icons.chat_bubble)), + ), + const NavigationDestination( + tooltip: '', + icon: Badge(child: Icon(Icons.group_outlined)), + label: 'Rooms', + selectedIcon: Badge(child: Icon(Icons.group_rounded)), + ), + NavigationDestination( + tooltip: '', + icon: Badge.count(count: 3, child: const Icon(Icons.videocam_outlined)), + label: 'Meet', + selectedIcon: Badge.count(count: 3, child: const Icon(Icons.videocam)), + ) +]; +class NavigationBars extends StatefulWidget { const NavigationBars({ super.key, this.onSelectItem, required this.selectedIndex, required this.isExampleBar, + this.isBadgeExample, }); + final void Function(int)? onSelectItem; + final int selectedIndex; + final bool isExampleBar; + final bool? isBadgeExample; + @override State createState() => _NavigationBarsState(); } class _NavigationBarsState extends State { - int selectedIndex = 0; + late int selectedIndex; @override void initState() { @@ -720,55 +1033,44 @@ class _NavigationBarsState extends State { } @override - Widget build(BuildContext context) { - return NavigationBar( - selectedIndex: selectedIndex, - onDestinationSelected: (index) { - setState(() { - selectedIndex = index; - }); - if (!widget.isExampleBar) widget.onSelectItem!(index); - }, - destinations: - widget.isExampleBar ? exampleBarDestinations : appBarDestinations, - ); - } -} - -class NavigationRailSection extends StatefulWidget { - final void Function(int) onSelectItem; - final int selectedIndex; - - const NavigationRailSection( - {super.key, required this.onSelectItem, required this.selectedIndex}); - - @override - State createState() => _NavigationRailSectionState(); -} - -class _NavigationRailSectionState extends State { - int selectedIndex = 0; - - @override - void initState() { - super.initState(); - selectedIndex = widget.selectedIndex; + void didUpdateWidget(covariant NavigationBars oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.selectedIndex != oldWidget.selectedIndex) { + selectedIndex = widget.selectedIndex; + } } @override Widget build(BuildContext context) { - return NavigationRail( - minWidth: 50, - destinations: navRailDestinations, + bool isBadgeExample = widget.isBadgeExample ?? false; + Widget navigationBar = NavigationBar( selectedIndex: selectedIndex, - useIndicator: true, onDestinationSelected: (index) { setState(() { selectedIndex = index; }); - widget.onSelectItem(index); + if (!widget.isExampleBar) widget.onSelectItem!(index); }, + destinations: widget.isExampleBar && isBadgeExample + ? barWithBadgeDestinations + : widget.isExampleBar + ? exampleBarDestinations + : appBarDestinations, ); + + if (widget.isExampleBar && isBadgeExample) { + navigationBar = ComponentDecoration( + label: 'Badges', + tooltipMessage: 'Use Badge or Badge.count', + child: navigationBar); + } else if (widget.isExampleBar) { + navigationBar = ComponentDecoration( + label: 'Navigation bar', + tooltipMessage: 'Use NavigationBar', + child: navigationBar); + } + + return navigationBar; } } @@ -782,61 +1084,70 @@ class IconToggleButtons extends StatefulWidget { class _IconToggleButtonsState extends State { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(10.0), + return ComponentDecoration( + label: 'Icon buttons', + tooltipMessage: 'Use IconButton', child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Column( - mainAxisAlignment: MainAxisAlignment.center, // Standard IconButton children: const [ - IconToggleButton(isEnabled: true), + IconToggleButton( + isEnabled: true, + tooltip: 'Standard', + ), colDivider, - IconToggleButton(isEnabled: false), + IconToggleButton( + isEnabled: false, + tooltip: 'Standard (disabled)', + ), ], ), Column( - mainAxisAlignment: MainAxisAlignment.center, children: const [ // Filled IconButton IconToggleButton( isEnabled: true, + tooltip: 'Filled', getDefaultStyle: enabledFilledButtonStyle, ), colDivider, IconToggleButton( isEnabled: false, + tooltip: 'Filled (disabled)', getDefaultStyle: disabledFilledButtonStyle, ), ], ), Column( - mainAxisAlignment: MainAxisAlignment.center, children: const [ // Filled Tonal IconButton IconToggleButton( isEnabled: true, + tooltip: 'Filled tonal', getDefaultStyle: enabledFilledTonalButtonStyle, ), colDivider, IconToggleButton( isEnabled: false, + tooltip: 'Filled tonal (disabled)', getDefaultStyle: disabledFilledTonalButtonStyle, ), ], ), Column( - mainAxisAlignment: MainAxisAlignment.center, children: const [ // Outlined IconButton IconToggleButton( isEnabled: true, + tooltip: 'Outlined', getDefaultStyle: enabledOutlinedButtonStyle, ), colDivider, IconToggleButton( isEnabled: false, + tooltip: 'Outlined (disabled)', getDefaultStyle: disabledOutlinedButtonStyle, ), ], @@ -850,11 +1161,13 @@ class _IconToggleButtonsState extends State { class IconToggleButton extends StatefulWidget { const IconToggleButton({ required this.isEnabled, + required this.tooltip, this.getDefaultStyle, super.key, }); final bool isEnabled; + final String tooltip; final ButtonStyle? Function(bool, ColorScheme)? getDefaultStyle; @override @@ -879,6 +1192,7 @@ class _IconToggleButtonState extends State { return IconButton( visualDensity: VisualDensity.standard, isSelected: selected, + tooltip: widget.tooltip, icon: const Icon(Icons.settings_outlined), selectedIcon: const Icon(Icons.settings), onPressed: onPressed, @@ -972,102 +1286,74 @@ ButtonStyle disabledOutlinedButtonStyle(bool selected, ColorScheme colors) { ); } -class Chips extends StatelessWidget { +class Chips extends StatefulWidget { const Chips({super.key}); + @override + State createState() => _ChipsState(); +} + +class _ChipsState extends State { + bool isFiltered = true; + @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(10.0), + return ComponentDecoration( + label: 'Chips', + tooltipMessage: + 'Use ActionChip, FilterChip, or InputChip. \nActionChip can also be used for suggestion chip', child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Wrap( - alignment: WrapAlignment.spaceBetween, - runSpacing: 5, + spacing: smallSpacing, + runSpacing: smallSpacing, children: [ ActionChip( - label: const Text('Assist'), - avatar: const Icon(Icons.chat_outlined), - onPressed: () {}), - ActionChip( - label: const Text('Set alarm'), - avatar: const Icon(Icons.alarm_add_outlined), - onPressed: () {}), - const ActionChip( - label: Text('No Action'), - avatar: Icon(Icons.indeterminate_check_box_outlined), + label: const Text('Assist'), + avatar: const Icon(Icons.event), + onPressed: () {}, ), - ], - ), - colDivider, - Wrap( - alignment: WrapAlignment.spaceBetween, - runSpacing: 5, - children: [ FilterChip( label: const Text('Filter'), - onSelected: (isSelected) {}, + selected: isFiltered, + onSelected: (selected) { + setState(() => isFiltered = selected); + }, ), - FilterChip( - label: const Text('OK'), - selected: true, - onSelected: (isSelected) {}, + InputChip( + label: const Text('Input'), + onPressed: () {}, + onDeleted: () {}, ), - const FilterChip( - label: Text('Disabled'), - selected: true, - onSelected: null, + ActionChip( + label: const Text('Suggestion'), + onPressed: () {}, ), - const FilterChip( - label: Text('Disabled'), - onSelected: null, - ) ], ), colDivider, Wrap( - alignment: WrapAlignment.spaceBetween, - runSpacing: 5, + spacing: smallSpacing, + runSpacing: smallSpacing, children: [ - InputChip( - label: const Text('Input'), - onDeleted: () {}, + const ActionChip( + label: Text('Assist'), + avatar: Icon(Icons.event), ), - InputChip( - label: const Text('Egg'), - onDeleted: () {}, + FilterChip( + label: const Text('Filter'), + selected: isFiltered, + onSelected: null, ), InputChip( - label: const Text('Lettuce'), - showCheckmark: false, - selected: true, + label: const Text('Input'), onDeleted: () {}, - ), - const InputChip( - label: Text('No'), isEnabled: false, ), - ], - ), - colDivider, - Wrap( - alignment: WrapAlignment.spaceBetween, - runSpacing: 5, - children: [ - ActionChip( - label: const Text('Suggestion'), - onPressed: () {}, - ), - ActionChip( - label: const Text('I agree'), - onPressed: () {}, - ), - ActionChip( - label: const Text('LGTM'), - onPressed: () {}, + const ActionChip( + label: Text('Suggestion'), ), - const ActionChip(label: Text('Nope')), ], ), ], @@ -1075,3 +1361,914 @@ class Chips extends StatelessWidget { ); } } + +class SegmentedButtons extends StatelessWidget { + const SegmentedButtons({super.key}); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Segmented buttons', + tooltipMessage: 'Use SegmentedButton', + child: Column( + children: const [ + SingleChoice(), + colDivider, + MultipleChoice(), + ], + ), + ); + } +} + +enum Calendar { day, week, month, year } + +class SingleChoice extends StatefulWidget { + const SingleChoice({super.key}); + + @override + State createState() => _SingleChoiceState(); +} + +class _SingleChoiceState extends State { + Calendar calendarView = Calendar.day; + + @override + Widget build(BuildContext context) { + return SegmentedButton( + segments: const >[ + ButtonSegment( + value: Calendar.day, + label: Text('Day'), + icon: Icon(Icons.calendar_view_day)), + ButtonSegment( + value: Calendar.week, + label: Text('Week'), + icon: Icon(Icons.calendar_view_week)), + ButtonSegment( + value: Calendar.month, + label: Text('Month'), + icon: Icon(Icons.calendar_view_month)), + ButtonSegment( + value: Calendar.year, + label: Text('Year'), + icon: Icon(Icons.calendar_today)), + ], + selected: {calendarView}, + onSelectionChanged: (newSelection) { + setState(() { + // By default there is only a single segment that can be + // selected at one time, so its value is always the first + // item in the selected set. + calendarView = newSelection.first; + }); + }, + ); + } +} + +enum Sizes { extraSmall, small, medium, large, extraLarge } + +class MultipleChoice extends StatefulWidget { + const MultipleChoice({super.key}); + + @override + State createState() => _MultipleChoiceState(); +} + +class _MultipleChoiceState extends State { + Set selection = {Sizes.large, Sizes.extraLarge}; + + @override + Widget build(BuildContext context) { + return SegmentedButton( + segments: const >[ + ButtonSegment(value: Sizes.extraSmall, label: Text('XS')), + ButtonSegment(value: Sizes.small, label: Text('S')), + ButtonSegment(value: Sizes.medium, label: Text('M')), + ButtonSegment( + value: Sizes.large, + label: Text('L'), + ), + ButtonSegment(value: Sizes.extraLarge, label: Text('XL')), + ], + selected: selection, + onSelectionChanged: (newSelection) { + setState(() { + selection = newSelection; + }); + }, + multiSelectionEnabled: true, + ); + } +} + +class SnackBarSection extends StatelessWidget { + const SnackBarSection({super.key}); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Snackbar', + tooltipMessage: + 'Use ScaffoldMessenger.of(context).showSnackBar with SnackBar', + child: TextButton( + onPressed: () { + final snackBar = SnackBar( + behavior: SnackBarBehavior.floating, + width: 400.0, + content: const Text('This is a snackbar'), + action: SnackBarAction( + label: 'Close', + onPressed: () {}, + ), + ); + + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + }, + child: const Text( + 'Show snackbar', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ); + } +} + +class BottomSheetSection extends StatefulWidget { + const BottomSheetSection({super.key}); + + @override + State createState() => _BottomSheetSectionState(); +} + +class _BottomSheetSectionState extends State { + bool isNonModalBottomSheetOpen = false; + PersistentBottomSheetController? _nonModalBottomSheetController; + + @override + Widget build(BuildContext context) { + List buttonList = [ + IconButton(onPressed: () {}, icon: const Icon(Icons.share_outlined)), + IconButton(onPressed: () {}, icon: const Icon(Icons.add)), + IconButton(onPressed: () {}, icon: const Icon(Icons.delete_outline)), + IconButton(onPressed: () {}, icon: const Icon(Icons.archive_outlined)), + IconButton(onPressed: () {}, icon: const Icon(Icons.settings_outlined)), + IconButton(onPressed: () {}, icon: const Icon(Icons.favorite_border)), + ]; + List labelList = const [ + Text('Share'), + Text('Add to'), + Text('Trash'), + Text('Archive'), + Text('Settings'), + Text('Favorite') + ]; + + buttonList = List.generate( + buttonList.length, + (index) => Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30.0, 20.0, 20.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + buttonList[index], + labelList[index], + ], + ), + )); + + return ComponentDecoration( + label: 'Bottom sheet', + tooltipMessage: 'Use showModalBottomSheet or showBottomSheet', + child: Wrap( + alignment: WrapAlignment.spaceEvenly, + children: [ + TextButton( + child: const Text( + 'Show modal bottom sheet', + style: TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () { + showModalBottomSheet( + context: context, + // TODO: Remove when this is in the framework https://github.com/flutter/flutter/issues/118619 + constraints: const BoxConstraints(maxWidth: 640), + builder: (context) { + return SizedBox( + height: 150, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: ListView( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + children: buttonList, + ), + ), + ); + }, + ); + }, + ), + TextButton( + child: Text( + isNonModalBottomSheetOpen + ? 'Hide bottom sheet' + : 'Show bottom sheet', + style: const TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () { + if (isNonModalBottomSheetOpen) { + _nonModalBottomSheetController?.close(); + setState(() { + isNonModalBottomSheetOpen = false; + }); + return; + } else { + setState(() { + isNonModalBottomSheetOpen = true; + }); + } + + _nonModalBottomSheetController = showBottomSheet( + elevation: 8.0, + context: context, + // TODO: Remove when this is in the framework https://github.com/flutter/flutter/issues/118619 + constraints: const BoxConstraints(maxWidth: 640), + builder: (context) { + return SizedBox( + height: 150, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: ListView( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + children: buttonList, + ), + ), + ); + }, + ); + }, + ), + ], + ), + ); + } +} + +class BottomAppBars extends StatelessWidget { + const BottomAppBars({super.key}); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Bottom app bar', + tooltipMessage: 'Use BottomAppBar', + child: Column( + children: [ + SizedBox( + height: 80, + child: Scaffold( + floatingActionButton: FloatingActionButton( + onPressed: () {}, + elevation: 0.0, + child: const Icon(Icons.add), + ), + floatingActionButtonLocation: + FloatingActionButtonLocation.endContained, + bottomNavigationBar: BottomAppBar( + child: Row( + children: [ + const IconButtonAnchorExample(), + IconButton( + tooltip: 'Search', + icon: const Icon(Icons.search), + onPressed: () {}, + ), + IconButton( + tooltip: 'Favorite', + icon: const Icon(Icons.favorite), + onPressed: () {}, + ), + ], + ), + ), + ), + ), + ], + ), + ); + } +} + +class IconButtonAnchorExample extends StatelessWidget { + const IconButtonAnchorExample({super.key}); + + @override + Widget build(BuildContext context) { + return MenuAnchor( + builder: (context, controller, child) { + return IconButton( + onPressed: () { + if (controller.isOpen) { + controller.close(); + } else { + controller.open(); + } + }, + icon: const Icon(Icons.more_vert), + ); + }, + menuChildren: [ + MenuItemButton( + child: const Text('Menu 1'), + onPressed: () {}, + ), + MenuItemButton( + child: const Text('Menu 2'), + onPressed: () {}, + ), + SubmenuButton( + menuChildren: [ + MenuItemButton( + onPressed: () {}, + child: const Text('Menu 3.1'), + ), + MenuItemButton( + onPressed: () {}, + child: const Text('Menu 3.2'), + ), + MenuItemButton( + onPressed: () {}, + child: const Text('Menu 3.3'), + ), + ], + child: const Text('Menu 3'), + ), + ], + ); + } +} + +class ButtonAnchorExample extends StatelessWidget { + const ButtonAnchorExample({super.key}); + + @override + Widget build(BuildContext context) { + return MenuAnchor( + builder: (context, controller, child) { + return FilledButton.tonal( + onPressed: () { + if (controller.isOpen) { + controller.close(); + } else { + controller.open(); + } + }, + child: const Text('Show menu'), + ); + }, + menuChildren: [ + MenuItemButton( + leadingIcon: const Icon(Icons.people_alt_outlined), + child: const Text('Item 1'), + onPressed: () {}, + ), + MenuItemButton( + leadingIcon: const Icon(Icons.remove_red_eye_outlined), + child: const Text('Item 2'), + onPressed: () {}, + ), + MenuItemButton( + leadingIcon: const Icon(Icons.refresh), + onPressed: () {}, + child: const Text('Item 3'), + ), + ], + ); + } +} + +class NavigationDrawers extends StatelessWidget { + const NavigationDrawers({super.key, required this.scaffoldKey}); + final GlobalKey scaffoldKey; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Navigation drawer', + tooltipMessage: + 'Use NavigationDrawer. For modal navigation drawers, see Scaffold.endDrawer', + child: Column( + children: [ + const SizedBox(height: 520, child: NavigationDrawerSection()), + colDivider, + colDivider, + TextButton( + child: const Text('Show modal navigation drawer', + style: TextStyle(fontWeight: FontWeight.bold)), + onPressed: () { + scaffoldKey.currentState!.openEndDrawer(); + }, + ), + ], + ), + ); + } +} + +class NavigationDrawerSection extends StatefulWidget { + const NavigationDrawerSection({super.key}); + + @override + State createState() => + _NavigationDrawerSectionState(); +} + +class _NavigationDrawerSectionState extends State { + int navDrawerIndex = 0; + + @override + Widget build(BuildContext context) { + return NavigationDrawer( + onDestinationSelected: (selectedIndex) { + setState(() { + navDrawerIndex = selectedIndex; + }); + }, + selectedIndex: navDrawerIndex, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(28, 16, 16, 10), + child: Text( + 'Mail', + style: Theme.of(context).textTheme.titleSmall, + ), + ), + ...destinations.map((destination) { + return NavigationDrawerDestination( + label: Text(destination.label), + icon: destination.icon, + selectedIcon: destination.selectedIcon, + ); + }), + const Divider(indent: 28, endIndent: 28), + Padding( + padding: const EdgeInsets.fromLTRB(28, 16, 16, 10), + child: Text( + 'Labels', + style: Theme.of(context).textTheme.titleSmall, + ), + ), + ...labelDestinations.map((destination) { + return NavigationDrawerDestination( + label: Text(destination.label), + icon: destination.icon, + selectedIcon: destination.selectedIcon, + ); + }), + ], + ); + } +} + +class ExampleDestination { + const ExampleDestination(this.label, this.icon, this.selectedIcon); + + final String label; + final Widget icon; + final Widget selectedIcon; +} + +const List destinations = [ + ExampleDestination('Inbox', Icon(Icons.inbox_outlined), Icon(Icons.inbox)), + ExampleDestination('Outbox', Icon(Icons.send_outlined), Icon(Icons.send)), + ExampleDestination( + 'Favorites', Icon(Icons.favorite_outline), Icon(Icons.favorite)), + ExampleDestination('Trash', Icon(Icons.delete_outline), Icon(Icons.delete)), +]; + +const List labelDestinations = [ + ExampleDestination( + 'Family', Icon(Icons.bookmark_border), Icon(Icons.bookmark)), + ExampleDestination( + 'School', Icon(Icons.bookmark_border), Icon(Icons.bookmark)), + ExampleDestination('Work', Icon(Icons.bookmark_border), Icon(Icons.bookmark)), +]; + +class NavigationRails extends StatelessWidget { + const NavigationRails({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentDecoration( + label: 'Navigation rail', + tooltipMessage: 'Use NavigationRail', + child: IntrinsicWidth( + child: SizedBox(height: 420, child: NavigationRailSection())), + ); + } +} + +class NavigationRailSection extends StatefulWidget { + const NavigationRailSection({super.key}); + + @override + State createState() => _NavigationRailSectionState(); +} + +class _NavigationRailSectionState extends State { + int navRailIndex = 0; + + @override + Widget build(BuildContext context) { + return NavigationRail( + onDestinationSelected: (selectedIndex) { + setState(() { + navRailIndex = selectedIndex; + }); + }, + elevation: 4, + leading: FloatingActionButton( + child: const Icon(Icons.create), onPressed: () {}), + groupAlignment: 0.0, + selectedIndex: navRailIndex, + labelType: NavigationRailLabelType.selected, + destinations: [ + ...destinations.map((destination) { + return NavigationRailDestination( + label: Text(destination.label), + icon: destination.icon, + selectedIcon: destination.selectedIcon, + ); + }), + ], + ); + } +} + +class Tabs extends StatefulWidget { + const Tabs({super.key}); + + @override + State createState() => _TabsState(); +} + +class _TabsState extends State with TickerProviderStateMixin { + late TabController _tabController; + + @override + void initState() { + super.initState(); + _tabController = TabController(length: 3, vsync: this); + } + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Tabs', + tooltipMessage: 'Use TabBar', + child: SizedBox( + height: 80, + child: Scaffold( + appBar: AppBar( + bottom: TabBar( + controller: _tabController, + tabs: const [ + Tab( + icon: Icon(Icons.videocam_outlined), + text: 'Video', + iconMargin: EdgeInsets.only(bottom: 0.0), + ), + Tab( + icon: Icon(Icons.photo_outlined), + text: 'Photos', + iconMargin: EdgeInsets.only(bottom: 0.0), + ), + Tab( + icon: Icon(Icons.audiotrack_sharp), + text: 'Audio', + iconMargin: EdgeInsets.only(bottom: 0.0), + ), + ], + ), + // TODO: Showcase secondary tab bar https://github.com/flutter/flutter/issues/111962 + ), + ), + ), + ); + } +} + +class TopAppBars extends StatelessWidget { + const TopAppBars({super.key}); + + static final actions = [ + IconButton(icon: const Icon(Icons.attach_file), onPressed: () {}), + IconButton(icon: const Icon(Icons.event), onPressed: () {}), + IconButton(icon: const Icon(Icons.more_vert), onPressed: () {}), + ]; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Top app bars', + tooltipMessage: + 'Use AppBar, SliverAppBar, SliverAppBar.medium, or SliverAppBar.large', + child: Column( + children: [ + AppBar( + title: const Text('Center-aligned'), + leading: const BackButton(), + actions: [ + IconButton( + iconSize: 32, + icon: const Icon(Icons.account_circle_outlined), + onPressed: () {}, + ), + ], + centerTitle: true, + ), + colDivider, + AppBar( + title: const Text('Small'), + leading: const BackButton(), + actions: actions, + centerTitle: false, + ), + colDivider, + SizedBox( + height: 100, + child: CustomScrollView( + slivers: [ + SliverAppBar.medium( + title: const Text('Medium'), + leading: const BackButton(), + actions: actions, + ), + const SliverFillRemaining(), + ], + ), + ), + colDivider, + SizedBox( + height: 130, + child: CustomScrollView( + slivers: [ + SliverAppBar.large( + title: const Text('Large'), + leading: const BackButton(), + actions: actions, + ), + const SliverFillRemaining(), + ], + ), + ), + ], + ), + ); + } +} + +class Menus extends StatefulWidget { + const Menus({super.key}); + + @override + State createState() => _MenusState(); +} + +class _MenusState extends State { + final TextEditingController colorController = TextEditingController(); + final TextEditingController iconController = TextEditingController(); + IconLabel? selectedIcon = IconLabel.smile; + ColorLabel? selectedColor; + + @override + Widget build(BuildContext context) { + final List> colorEntries = + >[]; + for (final ColorLabel color in ColorLabel.values) { + colorEntries.add(DropdownMenuEntry( + value: color, label: color.label, enabled: color.label != 'Grey')); + } + + final List> iconEntries = + >[]; + for (final IconLabel icon in IconLabel.values) { + iconEntries + .add(DropdownMenuEntry(value: icon, label: icon.label)); + } + + return ComponentDecoration( + label: 'Menus', + tooltipMessage: 'Use MenuAnchor or DropdownMenu', + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + ButtonAnchorExample(), + rowDivider, + IconButtonAnchorExample(), + ], + ), + colDivider, + Wrap( + alignment: WrapAlignment.spaceAround, + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: smallSpacing, + runSpacing: smallSpacing, + children: [ + DropdownMenu( + controller: colorController, + label: const Text('Color'), + enableFilter: true, + dropdownMenuEntries: colorEntries, + inputDecorationTheme: const InputDecorationTheme(filled: true), + onSelected: (color) { + setState(() { + selectedColor = color; + }); + }, + ), + DropdownMenu( + initialSelection: IconLabel.smile, + controller: iconController, + leadingIcon: const Icon(Icons.search), + label: const Text('Icon'), + dropdownMenuEntries: iconEntries, + onSelected: (icon) { + setState(() { + selectedIcon = icon; + }); + }, + ), + Icon( + selectedIcon?.icon, + color: selectedColor?.color ?? Colors.grey.withOpacity(0.5), + ) + ], + ), + ], + ), + ); + } +} + +enum ColorLabel { + blue('Blue', Colors.blue), + pink('Pink', Colors.pink), + green('Green', Colors.green), + yellow('Yellow', Colors.yellow), + grey('Grey', Colors.grey); + + const ColorLabel(this.label, this.color); + final String label; + final Color color; +} + +enum IconLabel { + smile('Smile', Icons.sentiment_satisfied_outlined), + cloud( + 'Cloud', + Icons.cloud_outlined, + ), + brush('Brush', Icons.brush_outlined), + heart('Heart', Icons.favorite); + + const IconLabel(this.label, this.icon); + final String label; + final IconData icon; +} + +class Sliders extends StatefulWidget { + const Sliders({super.key}); + + @override + State createState() => _SlidersState(); +} + +class _SlidersState extends State { + double sliderValue0 = 30.0; + double sliderValue1 = 20.0; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Sliders', + tooltipMessage: 'Use Slider or RangeSlider', + child: Column( + children: [ + Slider( + max: 100, + value: sliderValue0, + onChanged: (value) { + setState(() { + sliderValue0 = value; + }); + }, + ), + const SizedBox(height: 20), + Slider( + max: 100, + divisions: 5, + value: sliderValue1, + label: sliderValue1.round().toString(), + onChanged: (value) { + setState(() { + sliderValue1 = value; + }); + }, + ), + ], + )); + } +} + +class ComponentDecoration extends StatelessWidget { + const ComponentDecoration({ + super.key, + required this.label, + required this.child, + this.tooltipMessage = '', + }); + + final String label; + final Widget child; + final String? tooltipMessage; + + @override + Widget build(BuildContext context) { + return RepaintBoundary( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: smallSpacing), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(label, style: Theme.of(context).textTheme.titleSmall), + Tooltip( + message: tooltipMessage, + child: const Padding( + padding: EdgeInsets.symmetric(horizontal: 5.0), + child: Icon(Icons.info_outline, size: 16)), + ), + ], + ), + ConstrainedBox( + constraints: + const BoxConstraints.tightFor(width: widthConstraint), + child: Card( + elevation: 0, + shape: RoundedRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.outlineVariant, + ), + borderRadius: const BorderRadius.all(Radius.circular(12)), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 5.0, vertical: 20.0), + child: Center(child: child), + ), + ), + ), + ], + ), + ), + ); + } +} + +class ComponentGroupDecoration extends StatelessWidget { + const ComponentGroupDecoration( + {super.key, required this.label, required this.children}); + + final String label; + final List children; + + @override + Widget build(BuildContext context) { + return Card( + margin: EdgeInsets.zero, + elevation: 0, + color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Column( + children: [ + Text(label, style: Theme.of(context).textTheme.titleLarge), + colDivider, + ...children + ], + ), + ), + ), + ); + } +} diff --git a/experimental/material_3_demo/lib/elevation_screen.dart b/experimental/material_3_demo/lib/elevation_screen.dart index 7e235b7cc..0f3d6299e 100644 --- a/experimental/material_3_demo/lib/elevation_screen.dart +++ b/experimental/material_3_demo/lib/elevation_screen.dart @@ -12,35 +12,45 @@ class ElevationScreen extends StatelessWidget { Color shadowColor = Theme.of(context).colorScheme.shadow; Color surfaceTint = Theme.of(context).colorScheme.primary; return Expanded( - child: ListView( - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(16.0, 20, 16.0, 0), - child: Text( - 'Surface Tint only', - style: Theme.of(context).textTheme.titleLarge, + child: CustomScrollView( + slivers: [ + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16.0, 20, 16.0, 0), + child: Text( + 'Surface Tint Color Only', + style: Theme.of(context).textTheme.titleLarge, + ), ), ), ElevationGrid(surfaceTintColor: surfaceTint), - const SizedBox(height: 10), - Padding( - padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), - child: Text( - 'Surface Tint and Shadow', - style: Theme.of(context).textTheme.titleLarge, - ), + SliverList( + delegate: SliverChildListDelegate([ + const SizedBox(height: 10), + Padding( + padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), + child: Text( + 'Surface Tint Color and Shadow Color', + style: Theme.of(context).textTheme.titleLarge, + ), + ), + ]), ), ElevationGrid( shadowColor: shadowColor, surfaceTintColor: surfaceTint, ), - const SizedBox(height: 10), - Padding( - padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), - child: Text( - 'Shadow only', - style: Theme.of(context).textTheme.titleLarge, - ), + SliverList( + delegate: SliverChildListDelegate([ + const SizedBox(height: 10), + Padding( + padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), + child: Text( + 'Shadow Color Only', + style: Theme.of(context).textTheme.titleLarge, + ), + ), + ]), ), ElevationGrid(shadowColor: shadowColor), ], @@ -72,18 +82,16 @@ class ElevationGrid extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( + return SliverPadding( padding: const EdgeInsets.all(8), - child: LayoutBuilder(builder: (context, constraints) { - if (constraints.maxWidth < narrowScreenWidthThreshold) { - return GridView.count( - shrinkWrap: true, + sliver: SliverLayoutBuilder(builder: (context, constraints) { + if (constraints.crossAxisExtent < narrowScreenWidthThreshold) { + return SliverGrid.count( crossAxisCount: 3, children: elevationCards(shadowColor, surfaceTintColor), ); } else { - return GridView.count( - shrinkWrap: true, + return SliverGrid.count( crossAxisCount: 6, children: elevationCards(shadowColor, surfaceTintColor), ); @@ -117,7 +125,6 @@ class _ElevationCardState extends State { @override Widget build(BuildContext context) { const BorderRadius borderRadius = BorderRadius.all(Radius.circular(4.0)); - final bool showOpacity = _elevation == widget.info.elevation; final Color color = Theme.of(context).colorScheme.surface; return Padding( @@ -142,7 +149,7 @@ class _ElevationCardState extends State { '${widget.info.level.toInt()} dp', style: Theme.of(context).textTheme.labelMedium, ), - if (showOpacity) + if (widget.surfaceTint != null) Expanded( child: Align( alignment: Alignment.bottomRight, diff --git a/experimental/material_3_demo/lib/main.dart b/experimental/material_3_demo/lib/main.dart index 4504642a3..b36fd8f10 100644 --- a/experimental/material_3_demo/lib/main.dart +++ b/experimental/material_3_demo/lib/main.dart @@ -3,13 +3,20 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; + import 'color_palettes_screen.dart'; import 'component_screen.dart'; import 'elevation_screen.dart'; import 'typography_screen.dart'; void main() { - runApp(const Material3Demo()); + runApp( + const MaterialApp( + debugShowCheckedModeBanner: false, + home: Material3Demo(), + ), + ); } class Material3Demo extends StatefulWidget { @@ -23,25 +30,23 @@ class Material3Demo extends StatefulWidget { // screenWidthThreshold; otherwise, NavigationBar is used for navigation. const double narrowScreenWidthThreshold = 450; -const Color m3BaseColor = Color(0xff6750a4); -const List colorOptions = [ - m3BaseColor, - Colors.blue, - Colors.teal, - Colors.green, - Colors.yellow, - Colors.orange, - Colors.pink -]; -const List colorText = [ - 'M3 Baseline', - 'Blue', - 'Teal', - 'Green', - 'Yellow', - 'Orange', - 'Pink', -]; +const double transitionLength = 500; + +enum ColorSeed { + baseColor('M3 Baseline', Color(0xff6750a4)), + indigo('Indigo', Colors.indigo), + blue('Blue', Colors.blue), + teal('Teal', Colors.teal), + green('Green', Colors.green), + yellow('Yellow', Colors.yellow), + orange('Orange', Colors.orange), + deepOrange('Deep Orange', Colors.deepOrange), + pink('Pink', Colors.pink); + + const ColorSeed(this.label, this.color); + final String label; + final Color color; +} enum ScreenSelected { component(0), @@ -53,25 +58,81 @@ enum ScreenSelected { final int value; } -class _Material3DemoState extends State { +class _Material3DemoState extends State + with SingleTickerProviderStateMixin { + final GlobalKey scaffoldKey = GlobalKey(); + late final AnimationController controller; + late final CurvedAnimation railAnimation; + bool controllerInitialized = false; + bool showMediumSizeLayout = false; + bool showLargeSizeLayout = false; bool useMaterial3 = true; - bool useLightMode = true; - int colorSelected = 0; - int screenIndex = ScreenSelected.component.value; + ThemeMode themeMode = ThemeMode.system; + bool get useLightMode { + switch (themeMode) { + case ThemeMode.system: + return SchedulerBinding.instance.window.platformBrightness == + Brightness.light; + case ThemeMode.light: + return true; + case ThemeMode.dark: + return false; + } + } - late ThemeData themeData; + ColorSeed colorSelected = ColorSeed.baseColor; + int screenIndex = ScreenSelected.component.value; @override initState() { super.initState(); - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); + controller = AnimationController( + duration: Duration(milliseconds: transitionLength.toInt() * 2), + value: 0, + vsync: this, + ); + railAnimation = CurvedAnimation( + parent: controller, + curve: const Interval(0.5, 1.0), + ); } - ThemeData updateThemes(int colorIndex, bool useMaterial3, bool useLightMode) { - return ThemeData( - colorSchemeSeed: colorOptions[colorSelected], - useMaterial3: useMaterial3, - brightness: useLightMode ? Brightness.light : Brightness.dark); + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + final double width = MediaQuery.of(context).size.width; + final AnimationStatus status = controller.status; + if (width > 1000) { + if (width > 1500) { + showMediumSizeLayout = false; + showLargeSizeLayout = true; + } else { + showMediumSizeLayout = true; + showLargeSizeLayout = false; + } + if (status != AnimationStatus.forward && + status != AnimationStatus.completed) { + controller.forward(); + } + } else { + showMediumSizeLayout = false; + showLargeSizeLayout = false; + if (status != AnimationStatus.reverse && + status != AnimationStatus.dismissed) { + controller.reverse(); + } + } + if (!controllerInitialized) { + controllerInitialized = true; + controller.value = width > 1000 ? 1 : 0; + } } void handleScreenChanged(int screenSelected) { @@ -80,24 +141,21 @@ class _Material3DemoState extends State { }); } - void handleBrightnessChange() { + void handleBrightnessChange(bool useLightMode) { setState(() { - useLightMode = !useLightMode; - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); + themeMode = useLightMode ? ThemeMode.light : ThemeMode.dark; }); } void handleMaterialVersionChange() { setState(() { useMaterial3 = !useMaterial3; - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); }); } void handleColorSelect(int value) { setState(() { - colorSelected = value; - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); + colorSelected = ColorSeed.values[value]; }); } @@ -105,7 +163,18 @@ class _Material3DemoState extends State { ScreenSelected screenSelected, bool showNavBarExample) { switch (screenSelected) { case ScreenSelected.component: - return ComponentScreen(showNavBottomBar: showNavBarExample); + return Expanded( + child: OneTwoTransition( + animation: railAnimation, + one: FirstComponentList( + showNavBottomBar: showNavBarExample, + scaffoldKey: scaffoldKey, + showSecondList: showMediumSizeLayout || showLargeSizeLayout), + two: SecondComponentList( + scaffoldKey: scaffoldKey, + ), + ), + ); case ScreenSelected.color: return const ColorPalettesScreen(); case ScreenSelected.typography: @@ -113,103 +182,556 @@ class _Material3DemoState extends State { case ScreenSelected.elevation: return const ElevationScreen(); default: - return ComponentScreen(showNavBottomBar: showNavBarExample); + return FirstComponentList( + showNavBottomBar: showNavBarExample, + scaffoldKey: scaffoldKey, + showSecondList: showMediumSizeLayout || showLargeSizeLayout); } } PreferredSizeWidget createAppBar() { return AppBar( title: useMaterial3 ? const Text('Material 3') : const Text('Material 2'), - actions: [ - IconButton( - icon: useLightMode - ? const Icon(Icons.wb_sunny_outlined) - : const Icon(Icons.wb_sunny), - onPressed: handleBrightnessChange, - tooltip: 'Toggle brightness', - ), - IconButton( - icon: useMaterial3 - ? const Icon(Icons.filter_3) - : const Icon(Icons.filter_2), - onPressed: handleMaterialVersionChange, - tooltip: 'Switch to Material ${useMaterial3 ? 2 : 3}', - ), - PopupMenuButton( - icon: const Icon(Icons.more_vert), - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - itemBuilder: (context) { - return List.generate(colorOptions.length, (index) { - return PopupMenuItem( - value: index, - child: Wrap( - children: [ - Padding( - padding: const EdgeInsets.only(left: 10), - child: Icon( - index == colorSelected - ? Icons.color_lens - : Icons.color_lens_outlined, - color: colorOptions[index], - ), - ), - Padding( - padding: const EdgeInsets.only(left: 20), - child: Text(colorText[index]), - ), - ], - ), - ); - }); - }, - onSelected: handleColorSelect, - ), - ], + actions: !showMediumSizeLayout && !showLargeSizeLayout + ? [ + _BrightnessButton( + handleBrightnessChange: handleBrightnessChange, + ), + _Material3Button( + handleMaterialVersionChange: handleMaterialVersionChange, + ), + _ColorSeedButton( + handleColorSelect: handleColorSelect, + colorSelected: colorSelected, + ), + ] + : [Container()], ); } + Widget _expandedTrailingActions() => Container( + constraints: const BoxConstraints.tightFor(width: 250), + padding: const EdgeInsets.symmetric(horizontal: 30), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + const Text('Brightness'), + Expanded(child: Container()), + Switch( + value: useLightMode, + onChanged: (value) { + handleBrightnessChange(value); + }) + ], + ), + Row( + children: [ + useMaterial3 + ? const Text('Material 3') + : const Text('Material 2'), + Expanded(child: Container()), + Switch( + value: useMaterial3, + onChanged: (_) { + handleMaterialVersionChange(); + }) + ], + ), + const Divider(), + ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 200.0), + child: GridView.count( + crossAxisCount: 3, + children: List.generate( + ColorSeed.values.length, + (i) => IconButton( + icon: const Icon(Icons.radio_button_unchecked), + color: ColorSeed.values[i].color, + isSelected: + colorSelected.color == ColorSeed.values[i].color, + selectedIcon: const Icon(Icons.circle), + onPressed: () { + handleColorSelect(i); + }, + )), + ), + ), + ], + ), + ); + + Widget _trailingActions() => Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: _BrightnessButton( + handleBrightnessChange: handleBrightnessChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _Material3Button( + handleMaterialVersionChange: handleMaterialVersionChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _ColorSeedButton( + handleColorSelect: handleColorSelect, + colorSelected: colorSelected, + ), + ), + ], + ); + @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Material 3', - themeMode: useLightMode ? ThemeMode.light : ThemeMode.dark, - theme: themeData, - home: LayoutBuilder(builder: (context, constraints) { - if (constraints.maxWidth < narrowScreenWidthThreshold) { - return Scaffold( + themeMode: themeMode, + theme: ThemeData( + colorSchemeSeed: colorSelected.color, + useMaterial3: useMaterial3, + brightness: Brightness.light, + ), + darkTheme: ThemeData( + colorSchemeSeed: colorSelected.color, + useMaterial3: useMaterial3, + brightness: Brightness.dark, + ), + home: AnimatedBuilder( + animation: controller, + builder: (context, child) { + return NavigationTransition( + scaffoldKey: scaffoldKey, + animationController: controller, + railAnimation: railAnimation, appBar: createAppBar(), - body: Row(children: [ - createScreenFor(ScreenSelected.values[screenIndex], false), - ]), - bottomNavigationBar: NavigationBars( - onSelectItem: handleScreenChanged, + body: createScreenFor( + ScreenSelected.values[screenIndex], controller.value == 1), + navigationRail: NavigationRail( + extended: showLargeSizeLayout, + destinations: navRailDestinations, + selectedIndex: screenIndex, + onDestinationSelected: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, + trailing: Expanded( + child: Padding( + padding: const EdgeInsets.only(bottom: 20), + child: showLargeSizeLayout + ? _expandedTrailingActions() + : _trailingActions(), + ), + ), + ), + navigationBar: NavigationBars( + onSelectItem: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, selectedIndex: screenIndex, isExampleBar: false, ), ); - } else { - return Scaffold( - appBar: createAppBar(), - body: SafeArea( - bottom: false, - top: false, - child: Row( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: NavigationRailSection( - onSelectItem: handleScreenChanged, - selectedIndex: screenIndex)), - const VerticalDivider(thickness: 1, width: 1), - createScreenFor(ScreenSelected.values[screenIndex], true), - ], - ), + }, + ), + ); + } +} + +class _BrightnessButton extends StatelessWidget { + const _BrightnessButton({ + required this.handleBrightnessChange, + this.showTooltipBelow = true, + }); + + final Function handleBrightnessChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final isBright = Theme.of(context).brightness == Brightness.light; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Toggle brightness', + child: IconButton( + icon: isBright + ? const Icon(Icons.dark_mode_outlined) + : const Icon(Icons.light_mode_outlined), + onPressed: () => handleBrightnessChange(!isBright), + ), + ); + } +} + +class _Material3Button extends StatelessWidget { + const _Material3Button({ + required this.handleMaterialVersionChange, + this.showTooltipBelow = true, + }); + + final void Function() handleMaterialVersionChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final useMaterial3 = Theme.of(context).useMaterial3; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Switch to Material ${useMaterial3 ? 2 : 3}', + child: IconButton( + icon: useMaterial3 + ? const Icon(Icons.filter_2) + : const Icon(Icons.filter_3), + onPressed: handleMaterialVersionChange, + ), + ); + } +} + +class _ColorSeedButton extends StatelessWidget { + const _ColorSeedButton({ + required this.handleColorSelect, + required this.colorSelected, + }); + + final void Function(int) handleColorSelect; + final ColorSeed colorSelected; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: Icon( + Icons.palette_outlined, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + tooltip: 'Select a seed color', + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + itemBuilder: (context) { + return List.generate(ColorSeed.values.length, (index) { + ColorSeed currentColor = ColorSeed.values[index]; + + return PopupMenuItem( + value: index, + enabled: currentColor != colorSelected, + child: Wrap( + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: Icon( + currentColor == colorSelected + ? Icons.color_lens + : Icons.color_lens_outlined, + color: currentColor.color, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20), + child: Text(currentColor.label), + ), + ], ), ); - } - }), + }); + }, + onSelected: handleColorSelect, + ); + } +} + +class NavigationTransition extends StatefulWidget { + const NavigationTransition( + {super.key, + required this.scaffoldKey, + required this.animationController, + required this.railAnimation, + required this.navigationRail, + required this.navigationBar, + required this.appBar, + required this.body}); + + final GlobalKey scaffoldKey; + final AnimationController animationController; + final CurvedAnimation railAnimation; + final Widget navigationRail; + final Widget navigationBar; + final PreferredSizeWidget appBar; + final Widget body; + + @override + State createState() => _NavigationTransitionState(); +} + +class _NavigationTransitionState extends State { + late final AnimationController controller; + late final CurvedAnimation railAnimation; + late final ReverseAnimation barAnimation; + bool controllerInitialized = false; + bool showDivider = false; + + @override + void initState() { + super.initState(); + + controller = widget.animationController; + railAnimation = widget.railAnimation; + + barAnimation = ReverseAnimation( + CurvedAnimation( + parent: controller, + curve: const Interval(0.0, 0.5), + ), + ); + } + + @override + Widget build(BuildContext context) { + final ColorScheme colorScheme = Theme.of(context).colorScheme; + + return Scaffold( + key: widget.scaffoldKey, + appBar: widget.appBar, + body: Row( + children: [ + RailTransition( + animation: railAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationRail, + ), + widget.body, + ], + ), + bottomNavigationBar: BarTransition( + animation: barAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationBar, + ), + endDrawer: const NavigationDrawerSection(), + ); + } +} + +final List navRailDestinations = appBarDestinations + .map( + (destination) => NavigationRailDestination( + icon: Tooltip( + message: destination.label, + child: destination.icon, + ), + selectedIcon: Tooltip( + message: destination.label, + child: destination.selectedIcon, + ), + label: Text(destination.label), + ), + ) + .toList(); + +class SizeAnimation extends CurvedAnimation { + SizeAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.2, + 0.8, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class OffsetAnimation extends CurvedAnimation { + OffsetAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.4, + 1.0, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class RailTransition extends StatefulWidget { + const RailTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Widget child; + final Color backgroundColor; + + @override + State createState() => _RailTransition(); +} + +class _RailTransition extends State { + late Animation offsetAnimation; + late Animation widthAnimation; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + // The animations are only rebuilt by this method when the text + // direction changes because this widget only depends on Directionality. + final bool ltr = Directionality.of(context) == TextDirection.ltr; + + widthAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + + offsetAnimation = Tween( + begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + widthFactor: widthAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class BarTransition extends StatefulWidget { + const BarTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Color backgroundColor; + final Widget child; + + @override + State createState() => _BarTransition(); +} + +class _BarTransition extends State { + late final Animation offsetAnimation; + late final Animation heightAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(0, 1), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + heightAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + heightFactor: heightAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class OneTwoTransition extends StatefulWidget { + const OneTwoTransition({ + super.key, + required this.animation, + required this.one, + required this.two, + }); + + final Animation animation; + final Widget one; + final Widget two; + + @override + State createState() => _OneTwoTransitionState(); +} + +class _OneTwoTransitionState extends State { + late final Animation offsetAnimation; + late final Animation widthAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + widthAnimation = Tween( + begin: 0, + end: 1000, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Flexible( + flex: 1000, + child: widget.one, + ), + if (widthAnimation.value.toInt() > 0) ...[ + Flexible( + flex: widthAnimation.value.toInt(), + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.two, + ), + ) + ], + ], ); } } diff --git a/experimental/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig b/experimental/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b60..4b81f9b2d 100644 --- a/experimental/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig +++ b/experimental/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/experimental/material_3_demo/macos/Flutter/Flutter-Release.xcconfig b/experimental/material_3_demo/macos/Flutter/Flutter-Release.xcconfig index c2efd0b60..5caa9d157 100644 --- a/experimental/material_3_demo/macos/Flutter/Flutter-Release.xcconfig +++ b/experimental/material_3_demo/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/experimental/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift b/experimental/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817a5..8236f5728 100644 --- a/experimental/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/experimental/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,8 @@ import FlutterMacOS import Foundation +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/null_safety/null_unsafe_app/macos/Podfile b/experimental/material_3_demo/macos/Podfile similarity index 98% rename from null_safety/null_unsafe_app/macos/Podfile rename to experimental/material_3_demo/macos/Podfile index dade8dfad..049abe295 100644 --- a/null_safety/null_unsafe_app/macos/Podfile +++ b/experimental/material_3_demo/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj b/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj index 761c8ce3c..8c64178e0 100644 --- a/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj +++ b/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 29893622E48563911C289557 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13168370F89CE850498E884F /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -52,9 +53,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 13168370F89CE850498E884F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* material_3_demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "material_3_demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* material_3_demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = material_3_demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -66,8 +68,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 73B8DF92B3D56F290108F695 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + F108BC42B08AF0DCE6FE7E0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F7B140583E6057BF7218F5FF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -75,12 +80,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 29893622E48563911C289557 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 1CEE48D24C5E4B574B6EA5CE /* Pods */ = { + isa = PBXGroup; + children = ( + F7B140583E6057BF7218F5FF /* Pods-Runner.debug.xcconfig */, + 73B8DF92B3D56F290108F695 /* Pods-Runner.release.xcconfig */, + F108BC42B08AF0DCE6FE7E0F /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -99,6 +116,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 1CEE48D24C5E4B574B6EA5CE /* Pods */, ); sourceTree = ""; }; @@ -148,6 +166,7 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 13168370F89CE850498E884F /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -159,11 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 62AA8B239FF89DC9F3C6C609 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 9D8B14DF00D7FCC6D93AE630 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -271,6 +292,45 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 62AA8B239FF89DC9F3C6C609 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9D8B14DF00D7FCC6D93AE630 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -345,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -424,7 +484,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -471,7 +531,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/experimental/material_3_demo/macos/Runner.xcworkspace/contents.xcworkspacedata b/experimental/material_3_demo/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16e..21a3cc14c 100644 --- a/experimental/material_3_demo/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/experimental/material_3_demo/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/experimental/material_3_demo/pubspec.yaml b/experimental/material_3_demo/pubspec.yaml index 63371e70b..09c335396 100644 --- a/experimental/material_3_demo/pubspec.yaml +++ b/experimental/material_3_demo/pubspec.yaml @@ -15,6 +15,7 @@ dependencies: sdk: flutter cupertino_icons: ^1.0.2 + url_launcher: ^6.1.8 dev_dependencies: flutter_test: diff --git a/experimental/material_3_demo/test/color_screen_test.dart b/experimental/material_3_demo/test/color_screen_test.dart index f28d126f7..a29b089f7 100644 --- a/experimental/material_3_demo/test/color_screen_test.dart +++ b/experimental/material_3_demo/test/color_screen_test.dart @@ -16,46 +16,60 @@ void main() { 'on NavigationBar', (tester) async { widgetSetup(tester, 449); addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); - expect(find.text('Light Theme'), findsNothing); - expect(find.text('Dark Theme'), findsNothing); + expect(find.text('Light ColorScheme'), findsNothing); + expect(find.text('Dark ColorScheme'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); - Finder colorIconOnBar = find.byIcon(Icons.format_paint_outlined); + Finder colorIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.format_paint_outlined)); expect(colorIconOnBar, findsOneWidget); await tester.tap(colorIconOnBar); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(colorIconOnBar, findsNothing); - expect(find.byIcon(Icons.format_paint), findsOneWidget); - expect(find.text('Light Theme'), findsOneWidget); - expect(find.text('Dark Theme'), findsOneWidget); + + Finder selectedColorIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: + find.widgetWithIcon(NavigationDestination, Icons.format_paint)); + expect(selectedColorIconOnBar, findsOneWidget); + expect(find.text('Light ColorScheme'), findsOneWidget); + expect(find.text('Dark ColorScheme'), findsOneWidget); }); testWidgets( 'Color palettes screen shows correctly when color icon is clicked ' 'on NavigationRail', (tester) async { - widgetSetup(tester, 450); // NavigationRail shows only when width is >= 450. + widgetSetup( + tester, 1200); // NavigationRail shows only when width is > 1000. addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); - expect(find.text('Light Theme'), findsNothing); - expect(find.text('Dark Theme'), findsNothing); - expect(find.byType(NavigationRail), findsOneWidget); - Finder colorIconOnRail = find.byIcon(Icons.format_paint_outlined); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpAndSettle(); + expect(find.text('Light ColorScheme'), findsNothing); + expect(find.text('Dark ColorScheme'), findsNothing); + Finder colorIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.format_paint_outlined)); expect(colorIconOnRail, findsOneWidget); await tester.tap(colorIconOnRail); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(colorIconOnRail, findsNothing); - expect(find.byIcon(Icons.format_paint), findsOneWidget); - expect(find.text('Light Theme'), findsOneWidget); - expect(find.text('Dark Theme'), findsOneWidget); + Finder selectedColorIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.format_paint)); + expect(selectedColorIconOnRail, findsOneWidget); + expect(find.text('Light ColorScheme'), findsOneWidget); + expect(find.text('Dark ColorScheme'), findsOneWidget); }); testWidgets('Color screen shows correct content', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold(body: Row(children: const [ColorPalettesScreen()])), )); - expect(find.text('Light Theme'), findsOneWidget); - expect(find.text('Dark Theme'), findsOneWidget); + expect(find.text('Light ColorScheme'), findsOneWidget); + expect(find.text('Dark ColorScheme'), findsOneWidget); expect(find.byType(ColorGroup, skipOffstage: false), findsNWidgets(14)); }); } diff --git a/experimental/material_3_demo/test/component_screen_test.dart b/experimental/material_3_demo/test/component_screen_test.dart index be80be7d3..e5f820995 100644 --- a/experimental/material_3_demo/test/component_screen_test.dart +++ b/experimental/material_3_demo/test/component_screen_test.dart @@ -10,124 +10,175 @@ import 'package:material_3_demo/main.dart'; void main() { testWidgets('Default main page shows all M3 components', (tester) async { - widgetSetup(tester, 800, windowHeight: 3500); - await tester.pumpWidget(const Material3Demo()); + widgetSetup(tester, 800, windowHeight: 7000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); // Elements on the app bar expect(find.text('Material 3'), findsOneWidget); - expect(find.widgetWithIcon(IconButton, Icons.wb_sunny_outlined), - findsOneWidget); - expect(find.widgetWithIcon(IconButton, Icons.filter_3), findsOneWidget); - expect(find.widgetWithIcon(IconButton, Icons.more_vert), findsOneWidget); + expect( + find.widgetWithIcon(AppBar, Icons.dark_mode_outlined), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_2), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.palette_outlined), findsOneWidget); // Elements on the component screen - // Buttons + // Common buttons expect(find.widgetWithText(ElevatedButton, 'Elevated'), findsNWidgets(2)); expect(find.widgetWithText(FilledButton, 'Filled'), findsNWidgets(2)); - expect(find.widgetWithText(FilledButton, 'Filled Tonal'), findsNWidgets(2)); + expect(find.widgetWithText(FilledButton, 'Filled tonal'), findsNWidgets(2)); expect(find.widgetWithText(OutlinedButton, 'Outlined'), findsNWidgets(2)); expect(find.widgetWithText(TextButton, 'Text'), findsNWidgets(2)); - expect(find.text('Icon'), findsNWidgets(5)); - - // IconButtons - expect(find.byType(IconToggleButton), findsNWidgets(8)); + expect(find.widgetWithText(Buttons, 'Icon'), findsNWidgets(5)); // FABs - expect(find.byType(FloatingActionButton), findsNWidgets(4)); + expect( + find.byType(FloatingActionButton), + findsNWidgets( + 6)); // 2 more show up in the bottom app bar. 1 more in the navigation rail expect(find.widgetWithText(FloatingActionButton, 'Create'), findsOneWidget); + // Icon buttons + expect(find.byType(IconToggleButton), findsNWidgets(8)); + + // Segmented buttons + expect(find.byType(SegmentedButton), findsOneWidget); + expect(find.byType(SegmentedButton), findsOneWidget); + + // Badges + expect(find.byType(Badge), findsNWidgets(4)); + + // Progress indicators + Finder circularProgressIndicator = find.byType(CircularProgressIndicator); + expect(circularProgressIndicator, findsOneWidget); + Finder linearProgressIndicator = find.byType(LinearProgressIndicator); + expect(linearProgressIndicator, findsOneWidget); + + // Snackbar + expect(find.widgetWithText(TextButton, 'Show snackbar'), findsOneWidget); + + // Bottom sheet + expect(find.widgetWithText(TextButton, 'Show modal bottom sheet'), + findsOneWidget); + expect( + find.widgetWithText(TextButton, 'Show bottom sheet'), findsOneWidget); + + // Cards + expect(find.widgetWithText(Cards, 'Elevated'), findsOneWidget); + expect(find.widgetWithText(Cards, 'Filled'), findsOneWidget); + expect(find.widgetWithText(Cards, 'Outlined'), findsOneWidget); + + // Dialogs + expect(find.widgetWithText(TextButton, 'Show dialog'), findsOneWidget); + expect(find.widgetWithText(TextButton, 'Show full-screen dialog'), + findsOneWidget); + + // Dividers + expect(find.byKey(const Key('divider')), findsOneWidget); + + // Bottom app bar + expect(find.byType(BottomAppBar), findsOneWidget); + + // Navigation bar + // Third one is off screen in the scaffold + expect(find.byType(NavigationBar), findsNWidgets(3)); + + // Navigation drawer + expect(find.byType(Drawer), findsOneWidget); + expect(find.widgetWithText(TextButton, 'Show modal navigation drawer'), + findsOneWidget); + + // Navigation rail + // Second one is off screen in the scaffold + expect(find.byType(NavigationRail), findsNWidgets(2)); + + // Tabs + expect(find.byType(TabBar), findsOneWidget); + + // Top app bars + expect(find.byType(AppBar), findsNWidgets(6)); + + // Checkboxes + Finder checkboxExample = find.byType(CheckboxListTile); + expect(checkboxExample, findsNWidgets(4)); + // Chips expect(find.byType(ActionChip), - findsNWidgets(7)); // includes Assist and Suggestion chip. - expect(find.byType(FilterChip), findsNWidgets(4)); - expect(find.byType(InputChip), findsNWidgets(4)); + findsNWidgets(4)); // includes Assist and Suggestion chip. + expect(find.byType(FilterChip), findsNWidgets(2)); + expect(find.byType(InputChip), findsNWidgets(2)); - // Cards - expect(find.widgetWithText(Card, 'Filled'), findsOneWidget); - expect(find.widgetWithText(Card, 'Filled'), findsOneWidget); - expect(find.widgetWithText(Card, 'Outlined'), findsOneWidget); + // Menus + expect(find.byType(MenuAnchor), findsNWidgets(5)); + expect(find.byType(DropdownMenu), findsOneWidget); + expect(find.byType(DropdownMenu), findsOneWidget); - // TextFields - expect(find.widgetWithText(TextField, 'Disabled'), findsNWidgets(2)); - expect(find.widgetWithText(TextField, 'Filled'), findsNWidgets(2)); - expect(find.widgetWithText(TextField, 'Outlined'), findsNWidgets(2)); + // Radios + Finder radioExample = find.byType(RadioListTile); + expect(radioExample, findsNWidgets(3)); - // Alert Dialog - Finder dialogExample = find.widgetWithText(TextButton, 'Open Dialog'); - expect(dialogExample, findsOneWidget); + // Sliders + expect(find.byType(Slider), findsNWidgets(2)); // Switches - Finder switchExample = find.byType(Switch); - expect(switchExample, findsNWidgets(4)); + expect(find.byType(Switch), findsNWidgets(4)); - // Checkboxes - Finder checkboxExample = find.byType(Checkbox); - expect(checkboxExample, findsNWidgets(8)); + // TextFields + expect(find.widgetWithText(TextField, 'Disabled'), findsNWidgets(2)); + expect(find.widgetWithText(TextField, 'Filled'), findsNWidgets(2)); + expect(find.widgetWithText(TextField, 'Outlined'), findsNWidgets(2)); }); testWidgets( - 'NavigationRail doesn\'t show when width value is small than 450 ' + 'NavigationRail doesn\'t show when width value is small than 1000 ' '(in Portrait mode or narrow screen)', (tester) async { - widgetSetup(tester, 449); - await tester.pumpWidget(const Material3Demo()); + widgetSetup(tester, 999, windowHeight: 7000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpAndSettle(); - // When screen width is less than 450, NavigationBar will show. At the same - // time, the NavigationRail and the NavigationBar example will NOT show. - expect(find.byType(NavigationBars), findsOneWidget); + // When screen width is less than 1000, NavigationBar will show. At the same + // time, the NavigationBar example still show up in the navigation group. + expect(find.byType(NavigationBars), + findsNWidgets(3)); // The real navBar, badges example and navBar example expect(find.widgetWithText(NavigationBar, 'Components'), findsOneWidget); expect(find.widgetWithText(NavigationBar, 'Color'), findsOneWidget); expect(find.widgetWithText(NavigationBar, 'Typography'), findsOneWidget); expect(find.widgetWithText(NavigationBar, 'Elevation'), findsOneWidget); - expect(find.byType(NavigationRailSection), findsNothing); - expect(find.widgetWithText(NavigationBar, 'Explore'), findsNothing); - expect(find.widgetWithText(NavigationBar, 'Pets'), findsNothing); - expect(find.widgetWithText(NavigationBar, 'Account'), findsNothing); + expect(find.widgetWithText(NavigationBar, 'Explore'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Pets'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Account'), findsOneWidget); }); testWidgets( 'NavigationRail shows when width value is greater than or equal ' - 'to 450 (in Landscape mode or wider screen)', (tester) async { - widgetSetup(tester, 450); - await tester.pumpWidget(const Material3Demo()); - - // When screen width is greater than or equal to 450, NavigationRail and - // NavigationBar example will show. At the same time, the NavigationBar - // will NOT show. - expect(find.byType(NavigationRailSection), findsOneWidget); + 'to 1000 (in Landscape mode or wider screen)', (tester) async { + widgetSetup(tester, 1001, windowHeight: 3000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpAndSettle(); + + // When screen width is greater than or equal to 1000, NavigationRail will show. + // At the same time, the NavigationBar will NOT show. + expect(find.byType(NavigationRail), findsNWidgets(2)); expect(find.byType(Tooltip, skipOffstage: false), findsWidgets); - expect(find.widgetWithText(NavigationRailSection, 'Components'), - findsOneWidget); - expect(find.widgetWithText(NavigationRailSection, 'Color'), findsOneWidget); - expect(find.widgetWithText(NavigationRailSection, 'Typography'), - findsOneWidget); - expect(find.widgetWithText(NavigationRailSection, 'Elevation'), - findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Components'), findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Color'), findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Typography'), findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Elevation'), findsOneWidget); - final navbarExample = find.byType(NavigationBars); - await tester.scrollUntilVisible( - scrollable: find.byType(Scrollable).first, - navbarExample, - 500.0, - ); - expect(find.byType(NavigationBars), findsOneWidget); expect(find.widgetWithText(NavigationBar, 'Explore'), findsOneWidget); expect(find.widgetWithText(NavigationBar, 'Pets'), findsOneWidget); expect(find.widgetWithText(NavigationBar, 'Account'), findsOneWidget); - expect(find.widgetWithText(NavigationBar, 'Components'), findsNothing); - expect(find.widgetWithText(NavigationBar, 'Colors'), findsNothing); - expect(find.widgetWithText(NavigationBar, 'Typography'), findsNothing); - expect(find.widgetWithText(NavigationBar, 'Elevation'), findsNothing); + // the Navigation bar should be out of screen. + final RenderBox box = + tester.renderObject(find.widgetWithText(NavigationBar, 'Components')); + expect(box.localToGlobal(Offset.zero), const Offset(0.0, 3080.0)); }); testWidgets( 'Material version switches between Material3 and Material2 when' 'the version icon is clicked', (tester) async { - widgetSetup(tester, 450, windowHeight: 3000); - await tester.pumpWidget(const Material3Demo()); - Finder m3Icon = find.widgetWithIcon(IconButton, Icons.filter_3); - Finder m2Icon = find.widgetWithIcon(IconButton, Icons.filter_2); + widgetSetup(tester, 450, windowHeight: 7000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); BuildContext defaultElevatedButton = tester.firstElement(find.byType(ElevatedButton)); BuildContext defaultIconButton = @@ -138,17 +189,17 @@ void main() { tester.firstElement(find.widgetWithText(Card, 'Elevated')); BuildContext defaultChip = tester.firstElement(find.widgetWithText(ActionChip, 'Assist')); - Finder dialog = find.text('Open Dialog'); + Finder dialog = find.text('Show dialog'); await tester.tap(dialog); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext defaultAlertDialog = tester.element(find.byType(AlertDialog)); expect(Theme.of(defaultAlertDialog).useMaterial3, true); - Finder dismiss = find.text('Dismiss'); + Finder dismiss = find.text('Okay'); await tester.tap(dismiss); await tester.pumpAndSettle(const Duration(microseconds: 500)); - expect(m3Icon, findsOneWidget); - expect(m2Icon, findsNothing); + expect(find.widgetWithIcon(AppBar, Icons.filter_2), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_3), findsNothing); expect(find.text('Material 3'), findsOneWidget); expect(Theme.of(defaultElevatedButton).useMaterial3, true); expect(Theme.of(defaultIconButton).useMaterial3, true); @@ -156,7 +207,10 @@ void main() { expect(Theme.of(defaultCard).useMaterial3, true); expect(Theme.of(defaultChip).useMaterial3, true); - await tester.tap(m3Icon); + Finder appbarM3Icon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.filter_2)); + await tester.tap(appbarM3Icon); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext updatedElevatedButton = tester.firstElement(find.byType(ElevatedButton)); @@ -167,7 +221,7 @@ void main() { BuildContext updatedCard = tester.firstElement(find.byType(Card)); BuildContext updatedChip = tester.firstElement(find.widgetWithText(ActionChip, 'Assist')); - Finder updatedDialog = find.text('Open Dialog'); + Finder updatedDialog = find.text('Show dialog'); await tester.tap(updatedDialog); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext updatedAlertDialog = @@ -177,8 +231,8 @@ void main() { await tester.tap(updatedDismiss); await tester.pumpAndSettle(const Duration(microseconds: 500)); - expect(m3Icon, findsNothing); - expect(m2Icon, findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_3), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_2), findsNothing); expect(find.text('Material 2'), findsOneWidget); expect(Theme.of(updatedElevatedButton).useMaterial3, false); expect(Theme.of(updatedIconButton).useMaterial3, false); @@ -190,17 +244,33 @@ void main() { testWidgets( 'Other screens become Material2 mode after changing mode from ' 'main screen', (tester) async { - await tester.pumpWidget(const Material3Demo()); - await tester.tap(find.widgetWithIcon(IconButton, Icons.filter_3)); - await tester.tap(find.byIcon(Icons.format_paint_outlined)); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + Finder appbarM2Icon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.filter_2)); + await tester.tap(appbarM2Icon); + Finder secondScreenIcon = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.format_paint_outlined)); + await tester.tap(secondScreenIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); - BuildContext lightThemeText = tester.element(find.text('Light Theme')); + BuildContext lightThemeText = + tester.element(find.text('Light ColorScheme')); expect(Theme.of(lightThemeText).useMaterial3, false); - await tester.tap(find.byIcon(Icons.text_snippet_outlined)); + Finder thirdScreenIcon = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.text_snippet_outlined)); + await tester.tap(thirdScreenIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext displayLargeText = tester.element(find.text('Display Large')); expect(Theme.of(displayLargeText).useMaterial3, false); - await tester.tap(find.byIcon(Icons.invert_colors_on_outlined)); + Finder fourthScreenIcon = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.invert_colors_on_outlined)); + await tester.tap(fourthScreenIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext material = tester.firstElement(find.byType(Material)); expect(Theme.of(material).useMaterial3, false); @@ -209,25 +279,32 @@ void main() { testWidgets( 'Brightness mode switches between dark and light when' 'the brightness icon is clicked', (tester) async { - await tester.pumpWidget(const Material3Demo()); - Finder lightIcon = find.widgetWithIcon(IconButton, Icons.wb_sunny_outlined); - Finder darkIcon = find.widgetWithIcon(IconButton, Icons.wb_sunny); - BuildContext appBar = tester.element(find.byType(AppBar)); - BuildContext body = tester.element(find.byType(Scaffold)); - BuildContext navigationRail = tester.element(find.byType(NavigationRail)); - expect(lightIcon, findsOneWidget); - expect(darkIcon, findsNothing); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + Finder lightIcon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.light_mode_outlined)); + Finder darkIcon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.dark_mode_outlined)); + BuildContext appBar = tester.element(find.byType(AppBar).first); + BuildContext body = tester.firstElement(find.byType(Scaffold).first); + BuildContext navigationRail = tester.element( + find.widgetWithIcon(NavigationRail, Icons.format_paint_outlined)); + expect(darkIcon, findsOneWidget); + expect(lightIcon, findsNothing); expect(Theme.of(appBar).brightness, Brightness.light); expect(Theme.of(body).brightness, Brightness.light); expect(Theme.of(navigationRail).brightness, Brightness.light); - await tester.tap(lightIcon); + await tester.tap(darkIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); - BuildContext appBar2 = tester.element(find.byType(AppBar)); - BuildContext body2 = tester.element(find.byType(Scaffold)); - BuildContext navigationRail2 = tester.element(find.byType(NavigationRail)); - expect(lightIcon, findsNothing); - expect(darkIcon, findsOneWidget); + BuildContext appBar2 = tester.element(find.byType(AppBar).first); + BuildContext body2 = tester.element(find.byType(Scaffold).first); + BuildContext navigationRail2 = tester.element( + find.widgetWithIcon(NavigationRail, Icons.format_paint_outlined)); + + expect(darkIcon, findsNothing); + expect(lightIcon, findsOneWidget); expect(Theme.of(appBar2).brightness, Brightness.dark); expect(Theme.of(body2).brightness, Brightness.dark); expect(Theme.of(navigationRail2).brightness, Brightness.dark); @@ -235,27 +312,29 @@ void main() { testWidgets('Color theme changes when a color is selected from menu', (tester) async { - await tester.pumpWidget(const Material3Demo()); - Finder menuIcon = find.widgetWithIcon(IconButton, Icons.more_vert); - BuildContext appBar = tester.element(find.byType(AppBar)); - BuildContext body = tester.element(find.byType(Scaffold)); - BuildContext navigationRail = tester.element(find.byType(NavigationRail)); + Color m3BaseColor = const Color(0xff6750a4); + await tester.pumpWidget(Container()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pump(); + Finder menuIcon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.palette_outlined)); + BuildContext appBar = tester + .element(find.widgetWithIcon(AppBar, Icons.palette_outlined).first); + BuildContext body = tester.element(find.byType(Scaffold).first); expect(Theme.of(appBar).primaryColor, m3BaseColor); expect(Theme.of(body).primaryColor, m3BaseColor); - expect(Theme.of(navigationRail).primaryColor, m3BaseColor); await tester.tap(menuIcon); await tester.pumpAndSettle(); - await tester.tap(find.text('Blue')); + await tester.tap(find.text('Blue').last); await tester.pumpAndSettle(); - BuildContext appBar2 = tester.element(find.byType(AppBar)); - BuildContext body2 = tester.element(find.byType(Scaffold)); - BuildContext navigationRail2 = tester.element(find.byType(NavigationRail)); + BuildContext appBar2 = tester.element(find.byType(AppBar).first); + BuildContext body2 = tester.element(find.byType(Scaffold).first); ThemeData expectedTheme = ThemeData(colorSchemeSeed: Colors.blue); expect(Theme.of(appBar2).primaryColor, expectedTheme.primaryColor); expect(Theme.of(body2).primaryColor, expectedTheme.primaryColor); - expect(Theme.of(navigationRail2).primaryColor, expectedTheme.primaryColor); }); } diff --git a/experimental/material_3_demo/test/elevation_screen_test.dart b/experimental/material_3_demo/test/elevation_screen_test.dart index ee31f381d..737a355a6 100644 --- a/experimental/material_3_demo/test/elevation_screen_test.dart +++ b/experimental/material_3_demo/test/elevation_screen_test.dart @@ -16,43 +16,53 @@ void main() { 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); - expect(find.text('Surface Tint only'), findsNothing); + expect(find.text('Surface Tint Color Only'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); - Finder tintIconOnBar = find.byIcon(Icons.invert_colors_on_outlined); + Finder tintIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.invert_colors_on_outlined)); expect(tintIconOnBar, findsOneWidget); await tester.tap(tintIconOnBar); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(tintIconOnBar, findsNothing); - expect(find.byIcon(Icons.opacity), findsOneWidget); - expect(find.text('Surface Tint only'), findsOneWidget); + Finder selectedTintIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon(NavigationDestination, Icons.opacity)); + expect(selectedTintIconOnBar, findsOneWidget); + expect(find.text('Surface Tint Color Only'), findsOneWidget); }); testWidgets( 'Surface Tones screen shows correctly when the corresponding icon is ' 'selected on NavigationRail', (tester) async { - widgetSetup(tester, 450); // NavigationRail shows only when width is >= 450. + widgetSetup( + tester, 1200); // NavigationRail shows only when width is > 1000. addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); - expect(find.text('Surface Tint only'), findsNothing); - expect(find.byType(NavigationRail), findsOneWidget); - Finder tintIconOnRail = find.byIcon(Icons.invert_colors_on_outlined); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + expect(find.text('Surface Tint Color Only'), findsNothing); + Finder tintIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.invert_colors_on_outlined)); expect(tintIconOnRail, findsOneWidget); await tester.tap(tintIconOnRail); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(tintIconOnRail, findsNothing); - expect(find.byIcon(Icons.opacity), findsOneWidget); - expect(find.text('Surface Tint only'), findsOneWidget); + Finder selectedTintIconOnRail = find.descendant( + of: find.byType(NavigationRail), matching: find.byIcon(Icons.opacity)); + expect(selectedTintIconOnRail, findsOneWidget); + expect(find.text('Surface Tint Color Only'), findsOneWidget); }); testWidgets('Surface Tones screen shows correct content', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold(body: Row(children: const [ElevationScreen()])), )); - expect(find.text('Surface Tint only'), findsOneWidget); - expect(find.text('Surface Tint and Shadow'), findsOneWidget); - expect(find.text('Shadow only'), findsOneWidget); + expect(find.text('Surface Tint Color Only'), findsOneWidget); + expect(find.text('Surface Tint Color and Shadow Color'), findsOneWidget); + expect(find.text('Shadow Color Only'), findsOneWidget); expect(find.byType(ElevationGrid), findsNWidgets(3)); expect(find.byType(ElevationCard), findsNWidgets(18)); }); diff --git a/experimental/material_3_demo/test/typography_screen_test.dart b/experimental/material_3_demo/test/typography_screen_test.dart index a6dd95469..234c14b3d 100644 --- a/experimental/material_3_demo/test/typography_screen_test.dart +++ b/experimental/material_3_demo/test/typography_screen_test.dart @@ -16,33 +16,43 @@ void main() { 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); expect(find.text('Display Large'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); - Finder textIconOnBar = find.byIcon(Icons.text_snippet_outlined); + Finder textIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.byIcon(Icons.text_snippet_outlined)); expect(textIconOnBar, findsOneWidget); await tester.tap(textIconOnBar); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(textIconOnBar, findsNothing); - expect(find.byIcon(Icons.text_snippet), findsOneWidget); + Finder selectedTextIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.byIcon(Icons.text_snippet)); + expect(selectedTextIconOnBar, findsOneWidget); expect(find.text('Display Large'), findsOneWidget); }); testWidgets( 'Typography screen shows correctly when the corresponding icon is ' 'selected on NavigationRail', (tester) async { - widgetSetup(tester, 450); // NavigationRail shows only when width is >= 450. + widgetSetup( + tester, 1200); // NavigationRail shows only when width is > 1000. addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); expect(find.text('Display Large'), findsNothing); - expect(find.byType(NavigationRail), findsOneWidget); - Finder textIconOnRail = find.byIcon(Icons.text_snippet_outlined); + Finder textIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.text_snippet_outlined)); expect(textIconOnRail, findsOneWidget); await tester.tap(textIconOnRail); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(textIconOnRail, findsNothing); - expect(find.byIcon(Icons.text_snippet), findsOneWidget); + Finder selectedTextIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.text_snippet)); + expect(selectedTextIconOnRail, findsOneWidget); expect(find.text('Display Large'), findsOneWidget); }); diff --git a/experimental/material_3_demo/windows/flutter/generated_plugin_registrant.cc b/experimental/material_3_demo/windows/flutter/generated_plugin_registrant.cc index 8b6d4680a..4f7884874 100644 --- a/experimental/material_3_demo/windows/flutter/generated_plugin_registrant.cc +++ b/experimental/material_3_demo/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/experimental/material_3_demo/windows/flutter/generated_plugins.cmake b/experimental/material_3_demo/windows/flutter/generated_plugins.cmake index b93c4c30c..88b22e5c7 100644 --- a/experimental/material_3_demo/windows/flutter/generated_plugins.cmake +++ b/experimental/material_3_demo/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/experimental/pedometer/.gitignore b/experimental/pedometer/.gitignore new file mode 100644 index 000000000..96486fd93 --- /dev/null +++ b/experimental/pedometer/.gitignore @@ -0,0 +1,30 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.packages +build/ diff --git a/experimental/pedometer/.metadata b/experimental/pedometer/.metadata new file mode 100644 index 000000000..4defcaca8 --- /dev/null +++ b/experimental/pedometer/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + channel: master + +project_type: plugin_ffi + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + base_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + - platform: ios + create_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + base_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/experimental/pedometer/CHANGELOG.md b/experimental/pedometer/CHANGELOG.md new file mode 100644 index 000000000..41cc7d819 --- /dev/null +++ b/experimental/pedometer/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/experimental/pedometer/LICENSE b/experimental/pedometer/LICENSE new file mode 100644 index 000000000..ba75c69f7 --- /dev/null +++ b/experimental/pedometer/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/experimental/pedometer/README.md b/experimental/pedometer/README.md new file mode 100644 index 000000000..e3402143f --- /dev/null +++ b/experimental/pedometer/README.md @@ -0,0 +1,56 @@ +# FFIgen + JNIgen pedometer + +This is a demo for some of our tooling around calling platform APIs directly from dart code. This repository represents a demo of a plugin that leverages FFIgen & JNIgen. There is also an example pedometer app that uses the bindings generated from these tools. + +- [FFIgen](https://pub.dev/packages/ffigen) is used to generate bindings for C, Objective-C and Swift APIs +- [JNIgen](https://pub.dev/packages/jnigen) is used to generate bindings for Jave and Kotlin APIs + +**These tools are both experimental and are currently a work in progress.** If you find any issues or have feedback, please file it on the corresponding Github repositories. + + +## Re-generating bindings +The bindings that allow the dart code to call the platform code have already been generated [here](/lib). You can regenerate them by following the steps below. + +### FFIgen +Configuration for FFIgen is [here](/ffigen.yaml) for the [CoreMotion](https://developer.apple.com/documentation/coremotion) framework. FFIgen currently does not support autogenerating the code to handle callbacks. So, there were a few steps needed to appropriately handle callbacks in Objective-C. You can [read more here](https://dart.dev/guides/libraries/objective-c-interop#callbacks-and-multithreading-limitations). + +`dart run ffigen --config ffigen.yaml` + +### JNIgen +Configuration for JNIgen is [here](/jnigen.yaml) for the [HealthConnect API](https://developer.android.com/guide/health-and-fitness/health-connect). Right now, JNIgen requires an Android folder to generate the bindings so there are a few steps to regenerate: + +1. `flutter create .` +2. `flutter build apk` +3. `dart run jnigen --config jnigen.yaml` +4. delete the android folder + + +## Running the example app +Note that step counting is only available on physical devices. + +### iOS +- `flutter run` +- Allow *pedometer* app access to step counting + +### Android +- Make sure that Google Fit is installed (to ensure that steps are being counted) +- `flutter run` +- Install Health Connect and grant access to Google Fit and the *jni_demo* app + + +## Project stucture + +* `src`: Contains the native source code, and a CmakeFile.txt file for building + that source code into a dynamic library. + +* `lib`: Contains the Dart code that defines the API of the plugin, and which + calls into the native code using `dart:ffi`. + +* platform folders (`ios` etc.): Contains the build files + for building and bundling the native code library with the platform application. + +* `example`: Contains the native source code, and a CmakeFile.txt file for building + that source code into a dynamic library. + + + diff --git a/experimental/pedometer/analysis_options.yaml b/experimental/pedometer/analysis_options.yaml new file mode 100644 index 000000000..a5744c1cf --- /dev/null +++ b/experimental/pedometer/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/experimental/pedometer/classes.jar b/experimental/pedometer/classes.jar new file mode 100644 index 000000000..c5462a88e Binary files /dev/null and b/experimental/pedometer/classes.jar differ diff --git a/experimental/pedometer/example/.gitignore b/experimental/pedometer/example/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/experimental/pedometer/example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/experimental/pedometer/example/README.md b/experimental/pedometer/example/README.md new file mode 100644 index 000000000..808ae6feb --- /dev/null +++ b/experimental/pedometer/example/README.md @@ -0,0 +1,16 @@ +# pedometer_example + +Demonstrates how to use the pedometer plugin. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/experimental/pedometer/example/analysis_options.yaml b/experimental/pedometer/example/analysis_options.yaml new file mode 100644 index 000000000..61b6c4de1 --- /dev/null +++ b/experimental/pedometer/example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/experimental/pedometer/example/android/.gitignore b/experimental/pedometer/example/android/.gitignore new file mode 100644 index 000000000..d945a87dd --- /dev/null +++ b/experimental/pedometer/example/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/app/.cxx/ +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/experimental/pedometer/example/android/app/build.gradle b/experimental/pedometer/example/android/app/build.gradle new file mode 100644 index 000000000..20998ca96 --- /dev/null +++ b/experimental/pedometer/example/android/app/build.gradle @@ -0,0 +1,83 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion '25.1.8937393' + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.jni_demo" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + compileSdkVersion 33 + minSdkVersion 30 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + signingConfig signingConfigs.debug + } + } + + externalNativeBuild { + cmake { + path "../../../src/health_connect/CMakeLists.txt" + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "androidx.health.connect:connect-client:1.0.0-alpha06" +} diff --git a/experimental/pedometer/example/android/app/proguard-rules.pro b/experimental/pedometer/example/android/app/proguard-rules.pro new file mode 100644 index 000000000..c917f5609 --- /dev/null +++ b/experimental/pedometer/example/android/app/proguard-rules.pro @@ -0,0 +1,2 @@ +-keep class androidx.health.connect.client.** { *; } +-keep class kotlin.coroutines.** { *; } diff --git a/experimental/pedometer/example/android/app/src/debug/AndroidManifest.xml b/experimental/pedometer/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..dfafb1a95 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/experimental/pedometer/example/android/app/src/main/AndroidManifest.xml b/experimental/pedometer/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..0b7b61644 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/experimental/pedometer/example/android/app/src/main/kotlin/com/example/jni_demo/MainActivity.kt b/experimental/pedometer/example/android/app/src/main/kotlin/com/example/jni_demo/MainActivity.kt new file mode 100644 index 000000000..7d34f80a9 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/kotlin/com/example/jni_demo/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.jni_demo + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() {} diff --git a/experimental/pedometer/example/android/app/src/main/res/drawable-v21/launch_background.xml b/experimental/pedometer/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/experimental/pedometer/example/android/app/src/main/res/drawable/launch_background.xml b/experimental/pedometer/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/experimental/pedometer/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/experimental/pedometer/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..db77bb4b7 Binary files /dev/null and b/experimental/pedometer/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/experimental/pedometer/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/experimental/pedometer/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..17987b79b Binary files /dev/null and b/experimental/pedometer/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/experimental/pedometer/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/experimental/pedometer/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..09d439148 Binary files /dev/null and b/experimental/pedometer/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/experimental/pedometer/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/experimental/pedometer/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..d5f1c8d34 Binary files /dev/null and b/experimental/pedometer/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/experimental/pedometer/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/experimental/pedometer/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4d6372eeb Binary files /dev/null and b/experimental/pedometer/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/experimental/pedometer/example/android/app/src/main/res/values-night/styles.xml b/experimental/pedometer/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/experimental/pedometer/example/android/app/src/main/res/values/health-permissions.xml b/experimental/pedometer/example/android/app/src/main/res/values/health-permissions.xml new file mode 100644 index 000000000..bd3b65651 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/res/values/health-permissions.xml @@ -0,0 +1,8 @@ + + + androidx.health.permission.HeartRate.READ + androidx.health.permission.HeartRate.WRITE + androidx.health.permission.Steps.READ + androidx.health.permission.Steps.WRITE + + \ No newline at end of file diff --git a/experimental/pedometer/example/android/app/src/main/res/values/styles.xml b/experimental/pedometer/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/experimental/pedometer/example/android/app/src/profile/AndroidManifest.xml b/experimental/pedometer/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..dfafb1a95 --- /dev/null +++ b/experimental/pedometer/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/experimental/pedometer/example/android/build.gradle b/experimental/pedometer/example/android/build.gradle new file mode 100644 index 000000000..11f164c35 --- /dev/null +++ b/experimental/pedometer/example/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} + diff --git a/experimental/pedometer/example/android/gradle.properties b/experimental/pedometer/example/android/gradle.properties new file mode 100644 index 000000000..94adc3a3f --- /dev/null +++ b/experimental/pedometer/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/experimental/pedometer/example/android/gradle/wrapper/gradle-wrapper.properties b/experimental/pedometer/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..dcf0f19c5 --- /dev/null +++ b/experimental/pedometer/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip diff --git a/experimental/pedometer/example/android/settings.gradle b/experimental/pedometer/example/android/settings.gradle new file mode 100644 index 000000000..44e62bcf0 --- /dev/null +++ b/experimental/pedometer/example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/experimental/pedometer/example/ios/.gitignore b/experimental/pedometer/example/ios/.gitignore new file mode 100644 index 000000000..7a7f9873a --- /dev/null +++ b/experimental/pedometer/example/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/experimental/pedometer/example/ios/Flutter/AppFrameworkInfo.plist b/experimental/pedometer/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..9625e105d --- /dev/null +++ b/experimental/pedometer/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/null_safety/null_unsafe_app/ios/Flutter/Debug.xcconfig b/experimental/pedometer/example/ios/Flutter/Debug.xcconfig similarity index 100% rename from null_safety/null_unsafe_app/ios/Flutter/Debug.xcconfig rename to experimental/pedometer/example/ios/Flutter/Debug.xcconfig diff --git a/null_safety/null_unsafe_app/ios/Flutter/Release.xcconfig b/experimental/pedometer/example/ios/Flutter/Release.xcconfig similarity index 100% rename from null_safety/null_unsafe_app/ios/Flutter/Release.xcconfig rename to experimental/pedometer/example/ios/Flutter/Release.xcconfig diff --git a/experimental/pedometer/example/ios/Podfile b/experimental/pedometer/example/ios/Podfile new file mode 100644 index 000000000..88359b225 --- /dev/null +++ b/experimental/pedometer/example/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/null_safety/null_safe_app/ios/Runner.xcodeproj/project.pbxproj b/experimental/pedometer/example/ios/Runner.xcodeproj/project.pbxproj similarity index 88% rename from null_safety/null_safe_app/ios/Runner.xcodeproj/project.pbxproj rename to experimental/pedometer/example/ios/Runner.xcodeproj/project.pbxproj index 1448b8851..84e7ee74d 100644 --- a/null_safety/null_safe_app/ios/Runner.xcodeproj/project.pbxproj +++ b/experimental/pedometer/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,7 +13,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - BF62D040289FF8F4805B602C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14E1487E88BC921250912C09 /* Pods_Runner.framework */; }; + CD8D487B2DE298847620CE27 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD546C851461740D88EB9EA1 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -30,13 +30,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0E73CBA5419BEF015A90306B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 14E1487E88BC921250912C09 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2010AAE4CBBE00CB839BFF7C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 328A1AA89AFDDF5149206AB6 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - 34D0A5D8E8CE1E43EB4169D7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 3838EA3C4ACB62ED755A9FF6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 6FC09200CFFED4F1241C2B25 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -47,6 +46,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD546C851461740D88EB9EA1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,29 +54,28 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BF62D040289FF8F4805B602C /* Pods_Runner.framework in Frameworks */, + CD8D487B2DE298847620CE27 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 306A4EA63E49E9D3B01CBAAB /* Frameworks */ = { + 2E033E4F7934F793372AF7BD /* Frameworks */ = { isa = PBXGroup; children = ( - 14E1487E88BC921250912C09 /* Pods_Runner.framework */, + CD546C851461740D88EB9EA1 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; }; - 411BA2AC00C770969A3758B7 /* Pods */ = { + 3CD8DEE842AFA53B3E88ECBE /* Pods */ = { isa = PBXGroup; children = ( - 328A1AA89AFDDF5149206AB6 /* Pods-Runner.debug.xcconfig */, - 2010AAE4CBBE00CB839BFF7C /* Pods-Runner.release.xcconfig */, - 34D0A5D8E8CE1E43EB4169D7 /* Pods-Runner.profile.xcconfig */, + 6FC09200CFFED4F1241C2B25 /* Pods-Runner.debug.xcconfig */, + 3838EA3C4ACB62ED755A9FF6 /* Pods-Runner.release.xcconfig */, + 0E73CBA5419BEF015A90306B /* Pods-Runner.profile.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -97,8 +96,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 411BA2AC00C770969A3758B7 /* Pods */, - 306A4EA63E49E9D3B01CBAAB /* Frameworks */, + 3CD8DEE842AFA53B3E88ECBE /* Pods */, + 2E033E4F7934F793372AF7BD /* Frameworks */, ); sourceTree = ""; }; @@ -132,13 +131,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E479CBF8D6BDD38CA28B75D2 /* [CP] Check Pods Manifest.lock */, + CF8D8954002953B19E29F0D1 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + C8366BDABC1428824E3EC64F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -199,6 +199,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -213,6 +214,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -225,7 +227,24 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E479CBF8D6BDD38CA28B75D2 /* [CP] Check Pods Manifest.lock */ = { + C8366BDABC1428824E3EC64F /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + CF8D8954002953B19E29F0D1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -304,6 +323,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -322,7 +342,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -338,13 +358,15 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.nullSafeApp; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.leighatest; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -375,6 +397,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -399,7 +422,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -430,6 +453,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -448,7 +472,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -466,13 +490,15 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.nullSafeApp; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.leighatest; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -488,13 +514,15 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.nullSafeApp; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.leighatest; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/experimental/pedometer/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/experimental/pedometer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/pedometer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..c87d15a33 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/null_safety/null_safe_app/macos/Runner.xcworkspace/contents.xcworkspacedata b/experimental/pedometer/example/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from null_safety/null_safe_app/macos/Runner.xcworkspace/contents.xcworkspacedata rename to experimental/pedometer/example/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/experimental/pedometer/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/pedometer/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/pedometer/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/experimental/pedometer/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/experimental/pedometer/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/experimental/pedometer/example/ios/Runner/AppDelegate.swift b/experimental/pedometer/example/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..70693e4a8 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 000000000..dc9ada472 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 000000000..7353c41ec Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 000000000..6ed2d933e Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 000000000..4cd7b0099 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 000000000..fe730945a Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 000000000..321773cd8 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 000000000..502f463a9 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 000000000..e9f5fea27 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 000000000..84ac32ae7 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 000000000..8953cba09 Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 000000000..0467bf12a Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000..0bedcf2fd --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/experimental/pedometer/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/experimental/pedometer/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/pedometer/example/ios/Runner/Base.lproj/Main.storyboard b/experimental/pedometer/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/pedometer/example/ios/Runner/Info.plist b/experimental/pedometer/example/ios/Runner/Info.plist new file mode 100644 index 000000000..15dfe789c --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Info.plist @@ -0,0 +1,53 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Pedometer + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + pedometer_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + NSMotionUsageDescription + Live stream pedometer + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/experimental/pedometer/example/ios/Runner/Runner-Bridging-Header.h b/experimental/pedometer/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/experimental/pedometer/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/experimental/pedometer/example/lib/main.dart b/experimental/pedometer/example/lib/main.dart new file mode 100644 index 000000000..82a754b73 --- /dev/null +++ b/experimental/pedometer/example/lib/main.dart @@ -0,0 +1,217 @@ +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:fl_chart/fl_chart.dart'; + +import 'steps_repo.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const Home(), + ); + } +} + +class RoundClipper extends CustomClipper { + @override + Path getClip(Size size) { + final diameter = size.shortestSide * 1.5; + final x = -(diameter - size.width) / 2; + final y = size.height - diameter; + final rect = Offset(x, y) & Size(diameter, diameter); + return Path()..addOval(rect); + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return false; + } +} + +class Home extends StatefulWidget { + const Home({ + Key? key, + }) : super(key: key); + + @override + State createState() => _HomeState(); +} + +class _HomeState extends State { + var hourlySteps = []; + DateTime? lastUpdated; + + @override + void initState() { + runPedometer(); + super.initState(); + } + + void runPedometer() async { + final now = DateTime.now(); + hourlySteps = await StepsRepo.instance.getSteps(); + lastUpdated = now; + setState(() {}); + } + + @override + Widget build(BuildContext context) { + final textTheme = Theme.of(context).textTheme; + + final barGroups = hourlySteps + .map( + (e) => BarChartGroupData( + x: int.parse(e.startHour), + barRods: [ + BarChartRodData( + color: Colors.blue[900], + toY: e.steps.toDouble() / 100, + ) + ], + ), + ) + .toList(); + + return Scaffold( + body: Stack( + children: [ + ClipPath( + clipper: RoundClipper(), + child: FractionallySizedBox( + heightFactor: 0.55, + widthFactor: 1, + child: Container(color: Colors.blue[300]), + ), + ), + Align( + alignment: Alignment.topCenter, + child: Padding( + padding: const EdgeInsets.all(80.0), + child: Column( + children: [ + lastUpdated != null + ? Padding( + padding: const EdgeInsets.symmetric(vertical: 50.0), + child: Text( + DateFormat.yMMMMd('en_US').format(lastUpdated!), + style: textTheme.titleLarge! + .copyWith(color: Colors.blue[900]), + ), + ) + : const SizedBox(height: 0), + Text( + hourlySteps.fold(0, (t, e) => t + e.steps).toString(), + style: textTheme.displayMedium!.copyWith(color: Colors.white), + ), + Text( + 'steps', + style: textTheme.titleLarge!.copyWith(color: Colors.white), + ) + ], + ), + ), + ), + Align( + alignment: Alignment.centerRight, + child: GestureDetector( + onTap: runPedometer, + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Container( + decoration: BoxDecoration( + color: Colors.blue[900], + shape: BoxShape.circle, + ), + child: const Padding( + padding: EdgeInsets.all(8.0), + child: Icon( + Icons.refresh, + color: Colors.white, + size: 50, + ), + ), + ), + ), + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 30.0, vertical: 50.0), + child: AspectRatio( + aspectRatio: 1.2, + child: BarChart( + BarChartData( + titlesData: FlTitlesData( + show: true, + // Top titles are null + topTitles: + AxisTitles(sideTitles: SideTitles(showTitles: false)), + rightTitles: + AxisTitles(sideTitles: SideTitles(showTitles: false)), + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: false, + ), + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 30, + getTitlesWidget: getBottomTitles, + ), + ), + ), + borderData: FlBorderData( + show: false, + ), + barGroups: barGroups, + gridData: FlGridData(show: false), + alignment: BarChartAlignment.spaceAround, + ), + ), + ), + ), + ), + ], + )); + } +} + +// Axis labels for bottom of chart +Widget getBottomTitles(double value, TitleMeta meta) { + String text; + switch (value.toInt()) { + case 0: + text = '12AM'; + break; + case 6: + text = '6AM'; + break; + case 12: + text = '12PM'; + break; + case 18: + text = '6PM'; + break; + default: + text = ''; + } + return SideTitleWidget( + axisSide: meta.axisSide, + space: 4, + child: Text(text, style: TextStyle(fontSize: 14, color: Colors.blue[900])), + ); +} diff --git a/experimental/pedometer/example/lib/steps_repo.dart b/experimental/pedometer/example/lib/steps_repo.dart new file mode 100644 index 000000000..22da6be3c --- /dev/null +++ b/experimental/pedometer/example/lib/steps_repo.dart @@ -0,0 +1,164 @@ +import 'dart:ffi' as ffi; +import 'dart:io'; +import 'dart:isolate'; + +import 'package:flutter/foundation.dart'; +import 'package:intl/intl.dart'; +import 'package:jni/jni.dart' as jni; +import 'package:pedometer/pedometer_bindings_generated.dart' as pd; +import 'package:pedometer/health_connect.dart' as hc; + +/// Class to hold the information needed for the chart +class Steps { + String startHour; + int steps; + Steps(this.startHour, this.steps); +} + +abstract class StepsRepo { + static const _formatString = "yyyy-MM-dd HH:mm:ss"; + + static StepsRepo? _instance; + static StepsRepo get instance => + _instance ??= Platform.isAndroid ? _AndroidStepsRepo() : _IOSStepsRepo(); + + Future> getSteps(); +} + +class _IOSStepsRepo implements StepsRepo { + static const _dylibPath = + '/System/Library/Frameworks/CoreMotion.framework/CoreMotion'; + + // Bindings for the CMPedometer class + final lib = pd.PedometerBindings(ffi.DynamicLibrary.open(_dylibPath)); + // Bindings for the helper function + final helpLib = pd.PedometerBindings(ffi.DynamicLibrary.process()); + + late final pd.CMPedometer client; + late final pd.NSDateFormatter formatter; + late final pd.NSDateFormatter hourFormatter; + + _IOSStepsRepo() { + // Contains the Dart API helper functions + final dylib = ffi.DynamicLibrary.open("pedometer.framework/pedometer"); + + // Initialize the Dart API + final initializeApi = dylib.lookupFunction< + ffi.IntPtr Function(ffi.Pointer), + int Function(ffi.Pointer)>('Dart_InitializeApiDL'); + + final initializeResult = initializeApi(ffi.NativeApi.initializeApiDLData); + if (initializeResult != 0) { + throw StateError('failed to init API.'); + } + + // Create a new CMPedometer instance. + client = pd.CMPedometer.new1(lib); + + // Setting the formatter for date strings. + formatter = + pd.NSDateFormatter.castFrom(pd.NSDateFormatter.alloc(lib).init()); + formatter.dateFormat = pd.NSString(lib, "${StepsRepo._formatString} zzz"); + hourFormatter = + pd.NSDateFormatter.castFrom(pd.NSDateFormatter.alloc(lib).init()); + hourFormatter.dateFormat = pd.NSString(lib, "HH"); + } + + pd.NSDate dateConverter(DateTime dartDate) { + // Format dart date to string. + final formattedDate = DateFormat(StepsRepo._formatString).format(dartDate); + // Get current timezone. If eastern african change to AST to follow with NSDate. + final tz = dartDate.timeZoneName == "EAT" ? "AST" : dartDate.timeZoneName; + + // Create a new NSString with the formatted date and timezone. + final nString = pd.NSString(lib, "$formattedDate $tz"); + // Convert the NSString to NSDate. + return formatter.dateFromString_(nString); + } + + @override + Future> getSteps() async { + if (!pd.CMPedometer.isStepCountingAvailable(lib)) { + debugPrint("Step counting is not available."); + return []; + } + + final futures = []; + final now = DateTime.now(); + + for (var h = 0; h <= now.hour; h++) { + // Open up a port to receive data from native side. + final receivePort = ReceivePort(); + final nativePort = receivePort.sendPort.nativePort; + final start = dateConverter(DateTime(now.year, now.month, now.day, h)); + final end = dateConverter(DateTime(now.year, now.month, now.day, h + 1)); + + pd.PedometerHelper.startPedometerWithPort_pedometer_start_end_( + helpLib, + nativePort, + client, + start, + end, + ); + // Handle the data received from native side. + futures.add(receivePort.first); + } + + final data = await Future.wait(futures); + return data.where((e) => e != null).cast().map((address) { + final result = ffi.Pointer.fromAddress(address); + final pedometerData = + pd.CMPedometerData.castFromPointer(lib, result, release: true); + final stepCount = pedometerData.numberOfSteps?.intValue ?? 0; + final startHour = + hourFormatter.stringFromDate_(pedometerData.startDate!).toString(); + return Steps(startHour, stepCount); + }).toList(); + } +} + +class _AndroidStepsRepo implements StepsRepo { + late final hc.Activity activity; + late final hc.Context applicationContext; + late final hc.HealthConnectClient client; + + _AndroidStepsRepo() { + jni.Jni.initDLApi(); + activity = hc.Activity.fromRef(jni.Jni.getCurrentActivity()); + applicationContext = + hc.Context.fromRef(jni.Jni.getCachedApplicationContext()); + client = hc.HealthConnectClient.getOrCreate1(applicationContext); + } + + @override + Future> getSteps() async { + final futures = >[]; + final now = DateTime.now(); + + for (var h = 0; h <= now.hour; h++) { + final start = + DateTime(now.year, now.month, now.day, h).millisecondsSinceEpoch; + final end = + DateTime(now.year, now.month, now.day, h + 1).millisecondsSinceEpoch; + final request = hc.AggregateRequest( + hc.Set.of1( + hc.AggregateMetric.type(hc.Long.type), + hc.StepsRecord.COUNT_TOTAL, + ), + hc.TimeRangeFilter.between( + hc.Instant.ofEpochMilli(start), + hc.Instant.ofEpochMilli(end), + ), + hc.Set.of(jni.JObject.type), + ); + futures.add(client.aggregate(request)); + } + final data = await Future.wait(futures); + return data.asMap().entries.map((entry) { + final stepsLong = + entry.value.get0(hc.Long.type, hc.StepsRecord.COUNT_TOTAL); + final steps = stepsLong.isNull ? 0 : stepsLong.intValue(); + return Steps(entry.key.toString().padLeft(2, '0'), steps); + }).toList(); + } +} diff --git a/experimental/pedometer/example/pubspec.yaml b/experimental/pedometer/example/pubspec.yaml new file mode 100644 index 000000000..1df87eb09 --- /dev/null +++ b/experimental/pedometer/example/pubspec.yaml @@ -0,0 +1,105 @@ +name: pedometer_example +description: Demonstrates how to use the pedometer plugin. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=2.19.0-389.0.dev <3.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + pedometer: + # When depending on this package from a real application you should use: + # pedometer: ^x.y.z + # See https://dart.dev/tools/pub/dependencies#version-constraints + # The example app is bundled with the plugin so we use a path dependency on + # the parent directory to use the current plugin's version. + path: ../ + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + ffi: ^2.0.1 + intl: ^0.18.0 + jni: + git: + url: https://github.com/dart-lang/jnigen + ref: suspend-fun + path: ./jni + fl_chart: ^0.55.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/experimental/pedometer/ffigen.yaml b/experimental/pedometer/ffigen.yaml new file mode 100644 index 000000000..aa27fa0d6 --- /dev/null +++ b/experimental/pedometer/ffigen.yaml @@ -0,0 +1,23 @@ +# Run with `flutter pub run ffigen --config ffigen.yaml`. +name: PedometerBindings +description: "Bindings for CM pedometers" +language: objc +output: "lib/pedometer_bindings_generated.dart" +compiler-opts: + - "-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks" + - "-mios-version-min=13.0" +exclude-all-by-default: true +objc-interfaces: + include: + - "CMPedometer" + - "PedometerHelper" + - "NSDate" + - "NSDateFormatter" +headers: + entry-points: + - "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreMotion.framework/Headers/CMPedometer.h" + - "src/pedometerHelper.h" + +# To use this API, you must include the NSMotionUsageDescription key in your app’s Info.plist file +# and provide a usage description string for this key. +# The usage description appears in the prompt that the user must accept the first time the system asks the user to access motion data for your app. \ No newline at end of file diff --git a/experimental/pedometer/ios/Classes/dart_api_dl.c b/experimental/pedometer/ios/Classes/dart_api_dl.c new file mode 100644 index 000000000..20b9bf290 --- /dev/null +++ b/experimental/pedometer/ios/Classes/dart_api_dl.c @@ -0,0 +1,2 @@ +#include "../../src/dart-sdk/include/dart_api_dl.c" + diff --git a/experimental/pedometer/ios/Classes/pedometerHelper.m b/experimental/pedometer/ios/Classes/pedometerHelper.m new file mode 100644 index 000000000..ac82ca067 --- /dev/null +++ b/experimental/pedometer/ios/Classes/pedometerHelper.m @@ -0,0 +1,3 @@ +// Relative import to be able to reuse the C sources. +// See the comment in ../{projectName}}.podspec for more information. + #include "../../src/pedometerHelper.m" diff --git a/experimental/pedometer/ios/pedometer.podspec b/experimental/pedometer/ios/pedometer.podspec new file mode 100644 index 000000000..3f5d503e5 --- /dev/null +++ b/experimental/pedometer/ios/pedometer.podspec @@ -0,0 +1,29 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. +# Run `pod lib lint pedometer.podspec` to validate before publishing. +# +Pod::Spec.new do |s| + s.name = 'pedometer' + s.version = '0.0.1' + s.summary = 'A new Flutter FFI plugin project.' + s.description = <<-DESC +A new Flutter FFI plugin project. + DESC + s.homepage = 'http://example.com' + s.license = { :file => '../LICENSE' } + s.author = { 'Your Company' => 'email@example.com' } + + # This will ensure the source files in Classes/ are included in the native + # builds of apps using this FFI plugin. Podspec does not support relative + # paths, so Classes contains a forwarder C file that relatively imports + # `../src/*` so that the C sources can be shared among all target platforms. + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.dependency 'Flutter' + s.platform = :ios, '9.0' + s.requires_arc = [] + + # Flutter.framework does not contain a i386 slice. + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } + s.swift_version = '5.0' +end diff --git a/experimental/pedometer/jnigen.yaml b/experimental/pedometer/jnigen.yaml new file mode 100644 index 000000000..3f140db9b --- /dev/null +++ b/experimental/pedometer/jnigen.yaml @@ -0,0 +1,34 @@ +android_sdk_config: + add_gradle_deps: true + +summarizer: + backend: asm + +# Experimental flag to convert suspend functions in Kotlin to Dart async +# functions. Only available in suspend-fun branch of jnigen for now. +suspend_fun_to_async: true + +output: + c: + library_name: health_connect + path: src/health_connect/ + dart: + path: lib/health_connect.dart + structure: single_file + +class_path: + - 'classes.jar' +classes: + - 'androidx.health.connect.client.HealthConnectClient' + - 'androidx.health.connect.client.PermissionController' + - 'androidx.health.connect.client.records.StepsRecord' + - 'androidx.health.connect.client.time' + - 'android.content.Context' + - 'android.content.Intent' + - 'android.app.Activity' + - 'java.time.Instant' + - 'java.lang.Long' + - 'java.util.Set' + - 'androidx.health.connect.client.request' + - 'androidx.health.connect.client.aggregate.AggregationResult' + - 'androidx.health.connect.client.aggregate.AggregateMetric' diff --git a/experimental/pedometer/lib/health_connect.dart b/experimental/pedometer/lib/health_connect.dart new file mode 100644 index 000000000..ea44f7dce --- /dev/null +++ b/experimental/pedometer/lib/health_connect.dart @@ -0,0 +1,12152 @@ +// Autogenerated by jnigen. DO NOT EDIT! + +// ignore_for_file: annotate_overrides +// ignore_for_file: camel_case_extensions +// ignore_for_file: camel_case_types +// ignore_for_file: constant_identifier_names +// ignore_for_file: file_names +// ignore_for_file: no_leading_underscores_for_local_identifiers +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: overridden_fields +// ignore_for_file: unnecessary_cast +// ignore_for_file: unused_element +// ignore_for_file: unused_import + +import "dart:isolate" show ReceivePort; +import "dart:ffi" as ffi; +import "package:jni/internal_helpers_for_jnigen.dart"; +import "package:jni/jni.dart" as jni; + +// Auto-generated initialization code. + +final ffi.Pointer Function(String sym) jniLookup = + ProtectedJniExtensions.initGeneratedLibrary("health_connect"); + +/// from: androidx.health.connect.client.HealthConnectClient +class HealthConnectClient extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + HealthConnectClient.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $HealthConnectClientType(); + + static final _get_Companion = + jniLookup>( + "get_HealthConnectClient__Companion") + .asFunction(); + + /// from: static public final androidx.health.connect.client.HealthConnectClient$Companion Companion + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JObject get Companion => + const jni.JObjectType().fromRef(_get_Companion().object); + + /// from: static public final java.lang.String DEFAULT_PROVIDER_PACKAGE_NAME + static const DEFAULT_PROVIDER_PACKAGE_NAME = + "com.google.android.apps.healthdata"; + + static final _getPermissionController = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "HealthConnectClient__getPermissionController") + .asFunction)>(); + + /// from: public abstract androidx.health.connect.client.PermissionController getPermissionController() + /// The returned object must be deleted after use, by calling the `delete` method. + PermissionController getPermissionController() => + const $PermissionControllerType() + .fromRef(_getPermissionController(reference).object); + + static final _insertRecords = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__insertRecords") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object insertRecords(java.util.List list, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future insertRecords(jni.JObject list) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _insertRecords(reference, list.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _updateRecords = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__updateRecords") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object updateRecords(java.util.List list, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future updateRecords(jni.JObject list) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _updateRecords(reference, list.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _deleteRecords = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__deleteRecords") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object deleteRecords(kotlin.reflect.KClass kClass, java.util.List list, java.util.List list1, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future deleteRecords( + jni.JObject kClass, jni.JObject list, jni.JObject list1) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _deleteRecords( + reference, kClass.reference, list.reference, list1.reference, $c) + .object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _deleteRecords1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + "HealthConnectClient__deleteRecords1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.Object deleteRecords(kotlin.reflect.KClass kClass, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future deleteRecords1( + jni.JObject kClass, TimeRangeFilter timeRangeFilter) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _deleteRecords1(reference, kClass.reference, timeRangeFilter.reference, $c) + .object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _readRecord = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__readRecord") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.Object readRecord(kotlin.reflect.KClass kClass, java.lang.String string, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future readRecord( + jni.JObjType $T, jni.JObject kClass, jni.JString string) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _readRecord(reference, kClass.reference, string.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _readRecords = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__readRecords") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object readRecords(androidx.health.connect.client.request.ReadRecordsRequest readRecordsRequest, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future readRecords( + jni.JObjType $T, ReadRecordsRequest readRecordsRequest) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _readRecords(reference, readRecordsRequest.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _aggregate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__aggregate") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object aggregate(androidx.health.connect.client.request.AggregateRequest aggregateRequest, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future aggregate(AggregateRequest aggregateRequest) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _aggregate(reference, aggregateRequest.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const $AggregationResultType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const $AggregationResultType().fromRef($o); + } + + static final _aggregateGroupByDuration = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient__aggregateGroupByDuration") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest aggregateGroupByDurationRequest, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future aggregateGroupByDuration( + AggregateGroupByDurationRequest aggregateGroupByDurationRequest) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _aggregateGroupByDuration( + reference, aggregateGroupByDurationRequest.reference, $c) + .object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _aggregateGroupByPeriod = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient__aggregateGroupByPeriod") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest aggregateGroupByPeriodRequest, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future aggregateGroupByPeriod( + AggregateGroupByPeriodRequest aggregateGroupByPeriodRequest) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _aggregateGroupByPeriod( + reference, aggregateGroupByPeriodRequest.reference, $c) + .object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _getChangesToken = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient__getChangesToken") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest changesTokenRequest, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future getChangesToken( + ChangesTokenRequest changesTokenRequest) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _getChangesToken(reference, changesTokenRequest.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JStringType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JStringType().fromRef($o); + } + + static final _getChanges = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__getChanges") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object getChanges(java.lang.String string, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future getChanges(jni.JString string) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _getChanges(reference, string.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _isAvailable = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__isAvailable") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public boolean isAvailable(android.content.Context context, java.util.List list) + static bool isAvailable(Context context, jni.JObject list) => + _isAvailable(context.reference, list.reference).boolean; + + static final _getOrCreate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("HealthConnectClient__getOrCreate") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, java.util.List list) + /// The returned object must be deleted after use, by calling the `delete` method. + static HealthConnectClient getOrCreate(Context context, jni.JObject list) => + const $HealthConnectClientType() + .fromRef(_getOrCreate(context.reference, list.reference).object); + + static final _isAvailable1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("HealthConnectClient__isAvailable1") + .asFunction)>(); + + /// from: static public boolean isAvailable(android.content.Context context) + static bool isAvailable1(Context context) => + _isAvailable1(context.reference).boolean; + + static final _getOrCreate1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("HealthConnectClient__getOrCreate1") + .asFunction)>(); + + /// from: static public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context) + /// The returned object must be deleted after use, by calling the `delete` method. + static HealthConnectClient getOrCreate1(Context context) => + const $HealthConnectClientType() + .fromRef(_getOrCreate1(context.reference).object); +} + +class $HealthConnectClientType extends jni.JObjType { + const $HealthConnectClientType(); + + @override + String get signature => + r"Landroidx/health/connect/client/HealthConnectClient;"; + + @override + HealthConnectClient fromRef(jni.JObjectPtr ref) => + HealthConnectClient.fromRef(ref); +} + +extension $HealthConnectClientArray on jni.JArray { + HealthConnectClient operator [](int index) { + return (elementType as $HealthConnectClientType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, HealthConnectClient value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.PermissionController +class PermissionController extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + PermissionController.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $PermissionControllerType(); + + static final _createRequestPermissionActivityContract = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "PermissionController__createRequestPermissionActivityContract") + .asFunction)>(); + + /// from: public abstract androidx.activity.result.contract.ActivityResultContract createRequestPermissionActivityContract() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject createRequestPermissionActivityContract() => + const jni.JObjectType() + .fromRef(_createRequestPermissionActivityContract(reference).object); + + static final _getGrantedPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "PermissionController__getGrantedPermissions") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object getGrantedPermissions(java.util.Set set, kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future> getGrantedPermissions(Set set0) async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _getGrantedPermissions(reference, set0.reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const $SetType(jni.JObjectType()).getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const $SetType(jni.JObjectType()).fromRef($o); + } + + static final _revokeAllPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "PermissionController__revokeAllPermissions") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.Object revokeAllPermissions(kotlin.coroutines.Continuation continuation) + /// The returned object must be deleted after use, by calling the `delete` method. + Future revokeAllPermissions() async { + final $p = ReceivePort(); + final $c = jni.Jni.newPortContinuation($p); + _revokeAllPermissions(reference, $c).object; + final $o = ffi.Pointer.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } +} + +class $PermissionControllerType extends jni.JObjType { + const $PermissionControllerType(); + + @override + String get signature => + r"Landroidx/health/connect/client/PermissionController;"; + + @override + PermissionController fromRef(jni.JObjectPtr ref) => + PermissionController.fromRef(ref); +} + +extension $PermissionControllerArray on jni.JArray { + PermissionController operator [](int index) { + return (elementType as $PermissionControllerType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, PermissionController value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.records.StepsRecord +class StepsRecord extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + StepsRecord.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $StepsRecordType(); + + static final _get_Companion = + jniLookup>( + "get_StepsRecord__Companion") + .asFunction(); + + /// from: static public final androidx.health.connect.client.records.StepsRecord$Companion Companion + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JObject get Companion => + const jni.JObjectType().fromRef(_get_Companion().object); + + static final _get_COUNT_TOTAL = + jniLookup>( + "get_StepsRecord__COUNT_TOTAL") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric COUNT_TOTAL + /// The returned object must be deleted after use, by calling the `delete` method. + static AggregateMetric get COUNT_TOTAL => + const $AggregateMetricType($LongType()) + .fromRef(_get_COUNT_TOTAL().object); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Int64, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("StepsRecord__ctor") + .asFunction< + jni.JniResult Function( + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void (long j, java.time.Instant instant, java.time.ZoneOffset zoneOffset, java.time.Instant instant1, java.time.ZoneOffset zoneOffset1, androidx.health.connect.client.records.metadata.Metadata metadata) + StepsRecord(int j, Instant instant, jni.JObject zoneOffset, Instant instant1, + jni.JObject zoneOffset1, jni.JObject metadata) + : super.fromRef(_ctor(j, instant.reference, zoneOffset.reference, + instant1.reference, zoneOffset1.reference, metadata.reference) + .object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Int64, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("StepsRecord__ctor1") + .asFunction< + jni.JniResult Function( + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + /// from: public void (long j, java.time.Instant instant, java.time.ZoneOffset zoneOffset, java.time.Instant instant1, java.time.ZoneOffset zoneOffset1, androidx.health.connect.client.records.metadata.Metadata metadata, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + StepsRecord.ctor1( + int j, + Instant instant, + jni.JObject zoneOffset, + Instant instant1, + jni.JObject zoneOffset1, + jni.JObject metadata, + int i, + jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1( + j, + instant.reference, + zoneOffset.reference, + instant1.reference, + zoneOffset1.reference, + metadata.reference, + i, + defaultConstructorMarker.reference) + .object); + + static final _getCount = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__getCount") + .asFunction)>(); + + /// from: public final long getCount() + int getCount() => _getCount(reference).long; + + static final _getStartTime = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__getStartTime") + .asFunction)>(); + + /// from: public java.time.Instant getStartTime() + /// The returned object must be deleted after use, by calling the `delete` method. + Instant getStartTime() => + const $InstantType().fromRef(_getStartTime(reference).object); + + static final _getStartZoneOffset = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__getStartZoneOffset") + .asFunction)>(); + + /// from: public java.time.ZoneOffset getStartZoneOffset() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getStartZoneOffset() => + const jni.JObjectType().fromRef(_getStartZoneOffset(reference).object); + + static final _getEndTime = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__getEndTime") + .asFunction)>(); + + /// from: public java.time.Instant getEndTime() + /// The returned object must be deleted after use, by calling the `delete` method. + Instant getEndTime() => + const $InstantType().fromRef(_getEndTime(reference).object); + + static final _getEndZoneOffset = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__getEndZoneOffset") + .asFunction)>(); + + /// from: public java.time.ZoneOffset getEndZoneOffset() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getEndZoneOffset() => + const jni.JObjectType().fromRef(_getEndZoneOffset(reference).object); + + static final _getMetadata = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__getMetadata") + .asFunction)>(); + + /// from: public androidx.health.connect.client.records.metadata.Metadata getMetadata() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getMetadata() => + const jni.JObjectType().fromRef(_getMetadata(reference).object); + + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("StepsRecord__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean equals(java.lang.Object object) + bool equals1(jni.JObject object) => + _equals1(reference, object.reference).boolean; + + static final _hashCode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("StepsRecord__hashCode1") + .asFunction)>(); + + /// from: public int hashCode() + int hashCode1() => _hashCode1(reference).integer; +} + +class $StepsRecordType extends jni.JObjType { + const $StepsRecordType(); + + @override + String get signature => + r"Landroidx/health/connect/client/records/StepsRecord;"; + + @override + StepsRecord fromRef(jni.JObjectPtr ref) => StepsRecord.fromRef(ref); +} + +extension $StepsRecordArray on jni.JArray { + StepsRecord operator [](int index) { + return (elementType as $StepsRecordType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, StepsRecord value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.time.TimeRangeFilter$Companion +class TimeRangeFilter_Companion extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + TimeRangeFilter_Companion.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $TimeRangeFilter_CompanionType(); + + static final _between = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter_Companion__between") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.Instant instant, java.time.Instant instant1) + /// The returned object must be deleted after use, by calling the `delete` method. + TimeRangeFilter between(Instant instant, Instant instant1) => + const $TimeRangeFilterType().fromRef( + _between(reference, instant.reference, instant1.reference).object); + + static final _between1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "TimeRangeFilter_Companion__between1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1) + /// The returned object must be deleted after use, by calling the `delete` method. + TimeRangeFilter between1( + jni.JObject localDateTime, jni.JObject localDateTime1) => + const $TimeRangeFilterType().fromRef(_between1( + reference, localDateTime.reference, localDateTime1.reference) + .object); + + static final _before = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter_Companion__before") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.Instant instant) + /// The returned object must be deleted after use, by calling the `delete` method. + TimeRangeFilter before(Instant instant) => const $TimeRangeFilterType() + .fromRef(_before(reference, instant.reference).object); + + static final _before1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter_Companion__before1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.LocalDateTime localDateTime) + /// The returned object must be deleted after use, by calling the `delete` method. + TimeRangeFilter before1(jni.JObject localDateTime) => + const $TimeRangeFilterType() + .fromRef(_before1(reference, localDateTime.reference).object); + + static final _after = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter_Companion__after") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.Instant instant) + /// The returned object must be deleted after use, by calling the `delete` method. + TimeRangeFilter after(Instant instant) => const $TimeRangeFilterType() + .fromRef(_after(reference, instant.reference).object); + + static final _after1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter_Companion__after1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.LocalDateTime localDateTime) + /// The returned object must be deleted after use, by calling the `delete` method. + TimeRangeFilter after1(jni.JObject localDateTime) => + const $TimeRangeFilterType() + .fromRef(_after1(reference, localDateTime.reference).object); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("TimeRangeFilter_Companion__ctor") + .asFunction)>(); + + /// from: public void (kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + TimeRangeFilter_Companion(jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor(defaultConstructorMarker.reference).object); +} + +class $TimeRangeFilter_CompanionType + extends jni.JObjType { + const $TimeRangeFilter_CompanionType(); + + @override + String get signature => + r"Landroidx/health/connect/client/time/TimeRangeFilter$Companion;"; + + @override + TimeRangeFilter_Companion fromRef(jni.JObjectPtr ref) => + TimeRangeFilter_Companion.fromRef(ref); +} + +extension $TimeRangeFilter_CompanionArray + on jni.JArray { + TimeRangeFilter_Companion operator [](int index) { + return (elementType as $TimeRangeFilter_CompanionType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, TimeRangeFilter_Companion value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.time.TimeRangeFilter +class TimeRangeFilter extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + TimeRangeFilter.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $TimeRangeFilterType(); + + static final _get_Companion = + jniLookup>( + "get_TimeRangeFilter__Companion") + .asFunction(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter$Companion Companion + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter_Companion get Companion => + const $TimeRangeFilter_CompanionType().fromRef(_get_Companion().object); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (java.time.Instant instant, java.time.Instant instant1, java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1) + TimeRangeFilter(Instant instant, Instant instant1, jni.JObject localDateTime, + jni.JObject localDateTime1) + : super.fromRef(_ctor(instant.reference, instant1.reference, + localDateTime.reference, localDateTime1.reference) + .object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("TimeRangeFilter__ctor1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + /// from: public void (java.time.Instant instant, java.time.Instant instant1, java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + TimeRangeFilter.ctor1( + Instant instant, + Instant instant1, + jni.JObject localDateTime, + jni.JObject localDateTime1, + int i, + jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1( + instant.reference, + instant1.reference, + localDateTime.reference, + localDateTime1.reference, + i, + defaultConstructorMarker.reference) + .object); + + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean equals(java.lang.Object object) + bool equals1(jni.JObject object) => + _equals1(reference, object.reference).boolean; + + static final _hashCode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("TimeRangeFilter__hashCode1") + .asFunction)>(); + + /// from: public int hashCode() + int hashCode1() => _hashCode1(reference).integer; + + static final _ctor2 = jniLookup>( + "TimeRangeFilter__ctor2") + .asFunction(); + + /// from: public void () + TimeRangeFilter.ctor2() : super.fromRef(_ctor2().object); + + static final _between = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter__between") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.Instant instant, java.time.Instant instant1) + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter between(Instant instant, Instant instant1) => + const $TimeRangeFilterType() + .fromRef(_between(instant.reference, instant1.reference).object); + + static final _between1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("TimeRangeFilter__between1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1) + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter between1( + jni.JObject localDateTime, jni.JObject localDateTime1) => + const $TimeRangeFilterType().fromRef( + _between1(localDateTime.reference, localDateTime1.reference).object); + + static final _before = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("TimeRangeFilter__before") + .asFunction)>(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.Instant instant) + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter before(Instant instant) => + const $TimeRangeFilterType().fromRef(_before(instant.reference).object); + + static final _before1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("TimeRangeFilter__before1") + .asFunction)>(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.LocalDateTime localDateTime) + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter before1(jni.JObject localDateTime) => + const $TimeRangeFilterType() + .fromRef(_before1(localDateTime.reference).object); + + static final _after = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("TimeRangeFilter__after") + .asFunction)>(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.Instant instant) + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter after(Instant instant) => + const $TimeRangeFilterType().fromRef(_after(instant.reference).object); + + static final _after1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("TimeRangeFilter__after1") + .asFunction)>(); + + /// from: static public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.LocalDateTime localDateTime) + /// The returned object must be deleted after use, by calling the `delete` method. + static TimeRangeFilter after1(jni.JObject localDateTime) => + const $TimeRangeFilterType() + .fromRef(_after1(localDateTime.reference).object); +} + +class $TimeRangeFilterType extends jni.JObjType { + const $TimeRangeFilterType(); + + @override + String get signature => + r"Landroidx/health/connect/client/time/TimeRangeFilter;"; + + @override + TimeRangeFilter fromRef(jni.JObjectPtr ref) => TimeRangeFilter.fromRef(ref); +} + +extension $TimeRangeFilterArray on jni.JArray { + TimeRangeFilter operator [](int index) { + return (elementType as $TimeRangeFilterType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, TimeRangeFilter value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: android.content.Context +class Context extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + Context.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $ContextType(); + + /// from: static public final java.lang.String ACCESSIBILITY_SERVICE + static const ACCESSIBILITY_SERVICE = "accessibility"; + + /// from: static public final java.lang.String ACCOUNT_SERVICE + static const ACCOUNT_SERVICE = "account"; + + /// from: static public final java.lang.String ACTIVITY_SERVICE + static const ACTIVITY_SERVICE = "activity"; + + /// from: static public final java.lang.String ALARM_SERVICE + static const ALARM_SERVICE = "alarm"; + + /// from: static public final java.lang.String APPWIDGET_SERVICE + static const APPWIDGET_SERVICE = "appwidget"; + + /// from: static public final java.lang.String APP_OPS_SERVICE + static const APP_OPS_SERVICE = "appops"; + + /// from: static public final java.lang.String APP_SEARCH_SERVICE + static const APP_SEARCH_SERVICE = "app_search"; + + /// from: static public final java.lang.String AUDIO_SERVICE + static const AUDIO_SERVICE = "audio"; + + /// from: static public final java.lang.String BATTERY_SERVICE + static const BATTERY_SERVICE = "batterymanager"; + + /// from: static public final int BIND_ABOVE_CLIENT + static const BIND_ABOVE_CLIENT = 8; + + /// from: static public final int BIND_ADJUST_WITH_ACTIVITY + static const BIND_ADJUST_WITH_ACTIVITY = 128; + + /// from: static public final int BIND_ALLOW_OOM_MANAGEMENT + static const BIND_ALLOW_OOM_MANAGEMENT = 16; + + /// from: static public final int BIND_AUTO_CREATE + static const BIND_AUTO_CREATE = 1; + + /// from: static public final int BIND_DEBUG_UNBIND + static const BIND_DEBUG_UNBIND = 2; + + /// from: static public final int BIND_EXTERNAL_SERVICE + static const BIND_EXTERNAL_SERVICE = -2147483648; + + /// from: static public final int BIND_IMPORTANT + static const BIND_IMPORTANT = 64; + + /// from: static public final int BIND_INCLUDE_CAPABILITIES + static const BIND_INCLUDE_CAPABILITIES = 4096; + + /// from: static public final int BIND_NOT_FOREGROUND + static const BIND_NOT_FOREGROUND = 4; + + /// from: static public final int BIND_NOT_PERCEPTIBLE + static const BIND_NOT_PERCEPTIBLE = 256; + + /// from: static public final int BIND_WAIVE_PRIORITY + static const BIND_WAIVE_PRIORITY = 32; + + /// from: static public final java.lang.String BIOMETRIC_SERVICE + static const BIOMETRIC_SERVICE = "biometric"; + + /// from: static public final java.lang.String BLOB_STORE_SERVICE + static const BLOB_STORE_SERVICE = "blob_store"; + + /// from: static public final java.lang.String BLUETOOTH_SERVICE + static const BLUETOOTH_SERVICE = "bluetooth"; + + /// from: static public final java.lang.String BUGREPORT_SERVICE + static const BUGREPORT_SERVICE = "bugreport"; + + /// from: static public final java.lang.String CAMERA_SERVICE + static const CAMERA_SERVICE = "camera"; + + /// from: static public final java.lang.String CAPTIONING_SERVICE + static const CAPTIONING_SERVICE = "captioning"; + + /// from: static public final java.lang.String CARRIER_CONFIG_SERVICE + static const CARRIER_CONFIG_SERVICE = "carrier_config"; + + /// from: static public final java.lang.String CLIPBOARD_SERVICE + static const CLIPBOARD_SERVICE = "clipboard"; + + /// from: static public final java.lang.String COMPANION_DEVICE_SERVICE + static const COMPANION_DEVICE_SERVICE = "companiondevice"; + + /// from: static public final java.lang.String CONNECTIVITY_DIAGNOSTICS_SERVICE + static const CONNECTIVITY_DIAGNOSTICS_SERVICE = "connectivity_diagnostics"; + + /// from: static public final java.lang.String CONNECTIVITY_SERVICE + static const CONNECTIVITY_SERVICE = "connectivity"; + + /// from: static public final java.lang.String CONSUMER_IR_SERVICE + static const CONSUMER_IR_SERVICE = "consumer_ir"; + + /// from: static public final int CONTEXT_IGNORE_SECURITY + static const CONTEXT_IGNORE_SECURITY = 2; + + /// from: static public final int CONTEXT_INCLUDE_CODE + static const CONTEXT_INCLUDE_CODE = 1; + + /// from: static public final int CONTEXT_RESTRICTED + static const CONTEXT_RESTRICTED = 4; + + /// from: static public final java.lang.String CROSS_PROFILE_APPS_SERVICE + static const CROSS_PROFILE_APPS_SERVICE = "crossprofileapps"; + + /// from: static public final java.lang.String DEVICE_POLICY_SERVICE + static const DEVICE_POLICY_SERVICE = "device_policy"; + + /// from: static public final java.lang.String DISPLAY_HASH_SERVICE + static const DISPLAY_HASH_SERVICE = "display_hash"; + + /// from: static public final java.lang.String DISPLAY_SERVICE + static const DISPLAY_SERVICE = "display"; + + /// from: static public final java.lang.String DOMAIN_VERIFICATION_SERVICE + static const DOMAIN_VERIFICATION_SERVICE = "domain_verification"; + + /// from: static public final java.lang.String DOWNLOAD_SERVICE + static const DOWNLOAD_SERVICE = "download"; + + /// from: static public final java.lang.String DROPBOX_SERVICE + static const DROPBOX_SERVICE = "dropbox"; + + /// from: static public final java.lang.String EUICC_SERVICE + static const EUICC_SERVICE = "euicc"; + + /// from: static public final java.lang.String FILE_INTEGRITY_SERVICE + static const FILE_INTEGRITY_SERVICE = "file_integrity"; + + /// from: static public final java.lang.String FINGERPRINT_SERVICE + static const FINGERPRINT_SERVICE = "fingerprint"; + + /// from: static public final java.lang.String GAME_SERVICE + static const GAME_SERVICE = "game"; + + /// from: static public final java.lang.String HARDWARE_PROPERTIES_SERVICE + static const HARDWARE_PROPERTIES_SERVICE = "hardware_properties"; + + /// from: static public final java.lang.String INPUT_METHOD_SERVICE + static const INPUT_METHOD_SERVICE = "input_method"; + + /// from: static public final java.lang.String INPUT_SERVICE + static const INPUT_SERVICE = "input"; + + /// from: static public final java.lang.String IPSEC_SERVICE + static const IPSEC_SERVICE = "ipsec"; + + /// from: static public final java.lang.String JOB_SCHEDULER_SERVICE + static const JOB_SCHEDULER_SERVICE = "jobscheduler"; + + /// from: static public final java.lang.String KEYGUARD_SERVICE + static const KEYGUARD_SERVICE = "keyguard"; + + /// from: static public final java.lang.String LAUNCHER_APPS_SERVICE + static const LAUNCHER_APPS_SERVICE = "launcherapps"; + + /// from: static public final java.lang.String LAYOUT_INFLATER_SERVICE + static const LAYOUT_INFLATER_SERVICE = "layout_inflater"; + + /// from: static public final java.lang.String LOCALE_SERVICE + static const LOCALE_SERVICE = "locale"; + + /// from: static public final java.lang.String LOCATION_SERVICE + static const LOCATION_SERVICE = "location"; + + /// from: static public final java.lang.String MEDIA_COMMUNICATION_SERVICE + static const MEDIA_COMMUNICATION_SERVICE = "media_communication"; + + /// from: static public final java.lang.String MEDIA_METRICS_SERVICE + static const MEDIA_METRICS_SERVICE = "media_metrics"; + + /// from: static public final java.lang.String MEDIA_PROJECTION_SERVICE + static const MEDIA_PROJECTION_SERVICE = "media_projection"; + + /// from: static public final java.lang.String MEDIA_ROUTER_SERVICE + static const MEDIA_ROUTER_SERVICE = "media_router"; + + /// from: static public final java.lang.String MEDIA_SESSION_SERVICE + static const MEDIA_SESSION_SERVICE = "media_session"; + + /// from: static public final java.lang.String MIDI_SERVICE + static const MIDI_SERVICE = "midi"; + + /// from: static public final int MODE_APPEND + static const MODE_APPEND = 32768; + + /// from: static public final int MODE_ENABLE_WRITE_AHEAD_LOGGING + static const MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; + + /// from: static public final int MODE_MULTI_PROCESS + static const MODE_MULTI_PROCESS = 4; + + /// from: static public final int MODE_NO_LOCALIZED_COLLATORS + static const MODE_NO_LOCALIZED_COLLATORS = 16; + + /// from: static public final int MODE_PRIVATE + static const MODE_PRIVATE = 0; + + /// from: static public final int MODE_WORLD_READABLE + static const MODE_WORLD_READABLE = 1; + + /// from: static public final int MODE_WORLD_WRITEABLE + static const MODE_WORLD_WRITEABLE = 2; + + /// from: static public final java.lang.String NETWORK_STATS_SERVICE + static const NETWORK_STATS_SERVICE = "netstats"; + + /// from: static public final java.lang.String NFC_SERVICE + static const NFC_SERVICE = "nfc"; + + /// from: static public final java.lang.String NOTIFICATION_SERVICE + static const NOTIFICATION_SERVICE = "notification"; + + /// from: static public final java.lang.String NSD_SERVICE + static const NSD_SERVICE = "servicediscovery"; + + /// from: static public final java.lang.String PEOPLE_SERVICE + static const PEOPLE_SERVICE = "people"; + + /// from: static public final java.lang.String PERFORMANCE_HINT_SERVICE + static const PERFORMANCE_HINT_SERVICE = "performance_hint"; + + /// from: static public final java.lang.String POWER_SERVICE + static const POWER_SERVICE = "power"; + + /// from: static public final java.lang.String PRINT_SERVICE + static const PRINT_SERVICE = "print"; + + /// from: static public final int RECEIVER_EXPORTED + static const RECEIVER_EXPORTED = 2; + + /// from: static public final int RECEIVER_NOT_EXPORTED + static const RECEIVER_NOT_EXPORTED = 4; + + /// from: static public final int RECEIVER_VISIBLE_TO_INSTANT_APPS + static const RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; + + /// from: static public final java.lang.String RESTRICTIONS_SERVICE + static const RESTRICTIONS_SERVICE = "restrictions"; + + /// from: static public final java.lang.String ROLE_SERVICE + static const ROLE_SERVICE = "role"; + + /// from: static public final java.lang.String SEARCH_SERVICE + static const SEARCH_SERVICE = "search"; + + /// from: static public final java.lang.String SENSOR_SERVICE + static const SENSOR_SERVICE = "sensor"; + + /// from: static public final java.lang.String SHORTCUT_SERVICE + static const SHORTCUT_SERVICE = "shortcut"; + + /// from: static public final java.lang.String STATUS_BAR_SERVICE + static const STATUS_BAR_SERVICE = "statusbar"; + + /// from: static public final java.lang.String STORAGE_SERVICE + static const STORAGE_SERVICE = "storage"; + + /// from: static public final java.lang.String STORAGE_STATS_SERVICE + static const STORAGE_STATS_SERVICE = "storagestats"; + + /// from: static public final java.lang.String SYSTEM_HEALTH_SERVICE + static const SYSTEM_HEALTH_SERVICE = "systemhealth"; + + /// from: static public final java.lang.String TELECOM_SERVICE + static const TELECOM_SERVICE = "telecom"; + + /// from: static public final java.lang.String TELEPHONY_IMS_SERVICE + static const TELEPHONY_IMS_SERVICE = "telephony_ims"; + + /// from: static public final java.lang.String TELEPHONY_SERVICE + static const TELEPHONY_SERVICE = "phone"; + + /// from: static public final java.lang.String TELEPHONY_SUBSCRIPTION_SERVICE + static const TELEPHONY_SUBSCRIPTION_SERVICE = + "telephony_subscription_service"; + + /// from: static public final java.lang.String TEXT_CLASSIFICATION_SERVICE + static const TEXT_CLASSIFICATION_SERVICE = "textclassification"; + + /// from: static public final java.lang.String TEXT_SERVICES_MANAGER_SERVICE + static const TEXT_SERVICES_MANAGER_SERVICE = "textservices"; + + /// from: static public final java.lang.String TV_INPUT_SERVICE + static const TV_INPUT_SERVICE = "tv_input"; + + /// from: static public final java.lang.String TV_INTERACTIVE_APP_SERVICE + static const TV_INTERACTIVE_APP_SERVICE = "tv_interactive_app"; + + /// from: static public final java.lang.String UI_MODE_SERVICE + static const UI_MODE_SERVICE = "uimode"; + + /// from: static public final java.lang.String USAGE_STATS_SERVICE + static const USAGE_STATS_SERVICE = "usagestats"; + + /// from: static public final java.lang.String USB_SERVICE + static const USB_SERVICE = "usb"; + + /// from: static public final java.lang.String USER_SERVICE + static const USER_SERVICE = "user"; + + /// from: static public final java.lang.String VIBRATOR_MANAGER_SERVICE + static const VIBRATOR_MANAGER_SERVICE = "vibrator_manager"; + + /// from: static public final java.lang.String VIBRATOR_SERVICE + static const VIBRATOR_SERVICE = "vibrator"; + + /// from: static public final java.lang.String VPN_MANAGEMENT_SERVICE + static const VPN_MANAGEMENT_SERVICE = "vpn_management"; + + /// from: static public final java.lang.String WALLPAPER_SERVICE + static const WALLPAPER_SERVICE = "wallpaper"; + + /// from: static public final java.lang.String WIFI_AWARE_SERVICE + static const WIFI_AWARE_SERVICE = "wifiaware"; + + /// from: static public final java.lang.String WIFI_P2P_SERVICE + static const WIFI_P2P_SERVICE = "wifip2p"; + + /// from: static public final java.lang.String WIFI_RTT_RANGING_SERVICE + static const WIFI_RTT_RANGING_SERVICE = "wifirtt"; + + /// from: static public final java.lang.String WIFI_SERVICE + static const WIFI_SERVICE = "wifi"; + + /// from: static public final java.lang.String WINDOW_SERVICE + static const WINDOW_SERVICE = "window"; + + static final _ctor = + jniLookup>("Context__ctor") + .asFunction(); + + /// from: public void () + Context() : super.fromRef(_ctor().object); + + static final _getAssets = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getAssets") + .asFunction)>(); + + /// from: public abstract android.content.res.AssetManager getAssets() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getAssets() => + const jni.JObjectType().fromRef(_getAssets(reference).object); + + static final _getResources = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getResources") + .asFunction)>(); + + /// from: public abstract android.content.res.Resources getResources() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getResources() => + const jni.JObjectType().fromRef(_getResources(reference).object); + + static final _getPackageManager = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getPackageManager") + .asFunction)>(); + + /// from: public abstract android.content.pm.PackageManager getPackageManager() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getPackageManager() => + const jni.JObjectType().fromRef(_getPackageManager(reference).object); + + static final _getContentResolver = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getContentResolver") + .asFunction)>(); + + /// from: public abstract android.content.ContentResolver getContentResolver() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getContentResolver() => + const jni.JObjectType().fromRef(_getContentResolver(reference).object); + + static final _getMainLooper = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getMainLooper") + .asFunction)>(); + + /// from: public abstract android.os.Looper getMainLooper() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getMainLooper() => + const jni.JObjectType().fromRef(_getMainLooper(reference).object); + + static final _getMainExecutor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getMainExecutor") + .asFunction)>(); + + /// from: public java.util.concurrent.Executor getMainExecutor() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getMainExecutor() => + const jni.JObjectType().fromRef(_getMainExecutor(reference).object); + + static final _getApplicationContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getApplicationContext") + .asFunction)>(); + + /// from: public abstract android.content.Context getApplicationContext() + /// The returned object must be deleted after use, by calling the `delete` method. + Context getApplicationContext() => + const $ContextType().fromRef(_getApplicationContext(reference).object); + + static final _registerComponentCallbacks = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Context__registerComponentCallbacks") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void registerComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) + void registerComponentCallbacks(jni.JObject componentCallbacks) => + _registerComponentCallbacks(reference, componentCallbacks.reference) + .check(); + + static final _unregisterComponentCallbacks = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Context__unregisterComponentCallbacks") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void unregisterComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) + void unregisterComponentCallbacks(jni.JObject componentCallbacks) => + _unregisterComponentCallbacks(reference, componentCallbacks.reference) + .check(); + + static final _getText = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Context__getText") + .asFunction, int)>(); + + /// from: public final java.lang.CharSequence getText(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getText(int i) => + const jni.JObjectType().fromRef(_getText(reference, i).object); + + static final _getString = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Context__getString") + .asFunction, int)>(); + + /// from: public final java.lang.String getString(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getString(int i) => + const jni.JStringType().fromRef(_getString(reference, i).object); + + static final _getString1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Context__getString1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public final java.lang.String getString(int i, java.lang.Object[] objects) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getString1(int i, jni.JArray objects) => + const jni.JStringType() + .fromRef(_getString1(reference, i, objects.reference).object); + + static final _getColor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Context__getColor") + .asFunction, int)>(); + + /// from: public final int getColor(int i) + int getColor(int i) => _getColor(reference, i).integer; + + static final _getDrawable = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Context__getDrawable") + .asFunction, int)>(); + + /// from: public final android.graphics.drawable.Drawable getDrawable(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getDrawable(int i) => + const jni.JObjectType().fromRef(_getDrawable(reference, i).object); + + static final _getColorStateList = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Context__getColorStateList") + .asFunction, int)>(); + + /// from: public final android.content.res.ColorStateList getColorStateList(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getColorStateList(int i) => + const jni.JObjectType().fromRef(_getColorStateList(reference, i).object); + + static final _setTheme = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Context__setTheme") + .asFunction, int)>(); + + /// from: public abstract void setTheme(int i) + void setTheme(int i) => _setTheme(reference, i).check(); + + static final _getTheme = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getTheme") + .asFunction)>(); + + /// from: public abstract android.content.res.Resources$Theme getTheme() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getTheme() => + const jni.JObjectType().fromRef(_getTheme(reference).object); + + static final _obtainStyledAttributes = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__obtainStyledAttributes") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final android.content.res.TypedArray obtainStyledAttributes(int[] is) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject obtainStyledAttributes(jni.JArray is0) => + const jni.JObjectType() + .fromRef(_obtainStyledAttributes(reference, is0.reference).object); + + static final _obtainStyledAttributes1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Context__obtainStyledAttributes1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public final android.content.res.TypedArray obtainStyledAttributes(int i, int[] is) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject obtainStyledAttributes1(int i, jni.JArray is0) => + const jni.JObjectType().fromRef( + _obtainStyledAttributes1(reference, i, is0.reference).object); + + static final _obtainStyledAttributes2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__obtainStyledAttributes2") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet attributeSet, int[] is) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject obtainStyledAttributes2( + jni.JObject attributeSet, jni.JArray is0) => + const jni.JObjectType().fromRef(_obtainStyledAttributes2( + reference, attributeSet.reference, is0.reference) + .object); + + static final _obtainStyledAttributes3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32)>>("Context__obtainStyledAttributes3") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int)>(); + + /// from: public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet attributeSet, int[] is, int i, int i1) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject obtainStyledAttributes3( + jni.JObject attributeSet, jni.JArray is0, int i, int i1) => + const jni.JObjectType().fromRef(_obtainStyledAttributes3( + reference, attributeSet.reference, is0.reference, i, i1) + .object); + + static final _getClassLoader = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getClassLoader") + .asFunction)>(); + + /// from: public abstract java.lang.ClassLoader getClassLoader() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getClassLoader() => + const jni.JObjectType().fromRef(_getClassLoader(reference).object); + + static final _getPackageName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getPackageName") + .asFunction)>(); + + /// from: public abstract java.lang.String getPackageName() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getPackageName() => + const jni.JStringType().fromRef(_getPackageName(reference).object); + + static final _getOpPackageName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getOpPackageName") + .asFunction)>(); + + /// from: public java.lang.String getOpPackageName() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getOpPackageName() => + const jni.JStringType().fromRef(_getOpPackageName(reference).object); + + static final _getAttributionTag = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getAttributionTag") + .asFunction)>(); + + /// from: public java.lang.String getAttributionTag() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getAttributionTag() => + const jni.JStringType().fromRef(_getAttributionTag(reference).object); + + static final _getAttributionSource = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getAttributionSource") + .asFunction)>(); + + /// from: public android.content.AttributionSource getAttributionSource() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getAttributionSource() => + const jni.JObjectType().fromRef(_getAttributionSource(reference).object); + + static final _getParams = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getParams") + .asFunction)>(); + + /// from: public android.content.ContextParams getParams() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getParams() => + const jni.JObjectType().fromRef(_getParams(reference).object); + + static final _getApplicationInfo = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getApplicationInfo") + .asFunction)>(); + + /// from: public abstract android.content.pm.ApplicationInfo getApplicationInfo() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getApplicationInfo() => + const jni.JObjectType().fromRef(_getApplicationInfo(reference).object); + + static final _getPackageResourcePath = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getPackageResourcePath") + .asFunction)>(); + + /// from: public abstract java.lang.String getPackageResourcePath() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getPackageResourcePath() => const jni.JStringType() + .fromRef(_getPackageResourcePath(reference).object); + + static final _getPackageCodePath = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getPackageCodePath") + .asFunction)>(); + + /// from: public abstract java.lang.String getPackageCodePath() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getPackageCodePath() => + const jni.JStringType().fromRef(_getPackageCodePath(reference).object); + + static final _getSharedPreferences = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__getSharedPreferences") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSharedPreferences(jni.JString string, int i) => + const jni.JObjectType().fromRef( + _getSharedPreferences(reference, string.reference, i).object); + + static final _moveSharedPreferencesFrom = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__moveSharedPreferencesFrom") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract boolean moveSharedPreferencesFrom(android.content.Context context, java.lang.String string) + bool moveSharedPreferencesFrom(Context context, jni.JString string) => + _moveSharedPreferencesFrom(reference, context.reference, string.reference) + .boolean; + + static final _deleteSharedPreferences = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__deleteSharedPreferences") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean deleteSharedPreferences(java.lang.String string) + bool deleteSharedPreferences(jni.JString string) => + _deleteSharedPreferences(reference, string.reference).boolean; + + static final _openFileInput = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__openFileInput") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.io.FileInputStream openFileInput(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject openFileInput(jni.JString string) => const jni.JObjectType() + .fromRef(_openFileInput(reference, string.reference).object); + + static final _openFileOutput = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>("Context__openFileOutput") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract java.io.FileOutputStream openFileOutput(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject openFileOutput(jni.JString string, int i) => + const jni.JObjectType() + .fromRef(_openFileOutput(reference, string.reference, i).object); + + static final _deleteFile = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__deleteFile") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean deleteFile(java.lang.String string) + bool deleteFile(jni.JString string) => + _deleteFile(reference, string.reference).boolean; + + static final _getFileStreamPath = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getFileStreamPath") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.io.File getFileStreamPath(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getFileStreamPath(jni.JString string) => const jni.JObjectType() + .fromRef(_getFileStreamPath(reference, string.reference).object); + + static final _getDataDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getDataDir") + .asFunction)>(); + + /// from: public abstract java.io.File getDataDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getDataDir() => + const jni.JObjectType().fromRef(_getDataDir(reference).object); + + static final _getFilesDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getFilesDir") + .asFunction)>(); + + /// from: public abstract java.io.File getFilesDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getFilesDir() => + const jni.JObjectType().fromRef(_getFilesDir(reference).object); + + static final _getNoBackupFilesDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getNoBackupFilesDir") + .asFunction)>(); + + /// from: public abstract java.io.File getNoBackupFilesDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getNoBackupFilesDir() => + const jni.JObjectType().fromRef(_getNoBackupFilesDir(reference).object); + + static final _getExternalFilesDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getExternalFilesDir") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.io.File getExternalFilesDir(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getExternalFilesDir(jni.JString string) => const jni.JObjectType() + .fromRef(_getExternalFilesDir(reference, string.reference).object); + + static final _getExternalFilesDirs = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getExternalFilesDirs") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.io.File[] getExternalFilesDirs(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getExternalFilesDirs(jni.JString string) => + const jni.JArrayType(jni.JObjectType()) + .fromRef(_getExternalFilesDirs(reference, string.reference).object); + + static final _getObbDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getObbDir") + .asFunction)>(); + + /// from: public abstract java.io.File getObbDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getObbDir() => + const jni.JObjectType().fromRef(_getObbDir(reference).object); + + static final _getObbDirs = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getObbDirs") + .asFunction)>(); + + /// from: public abstract java.io.File[] getObbDirs() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getObbDirs() => + const jni.JArrayType(jni.JObjectType()) + .fromRef(_getObbDirs(reference).object); + + static final _getCacheDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getCacheDir") + .asFunction)>(); + + /// from: public abstract java.io.File getCacheDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getCacheDir() => + const jni.JObjectType().fromRef(_getCacheDir(reference).object); + + static final _getCodeCacheDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getCodeCacheDir") + .asFunction)>(); + + /// from: public abstract java.io.File getCodeCacheDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getCodeCacheDir() => + const jni.JObjectType().fromRef(_getCodeCacheDir(reference).object); + + static final _getExternalCacheDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getExternalCacheDir") + .asFunction)>(); + + /// from: public abstract java.io.File getExternalCacheDir() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getExternalCacheDir() => + const jni.JObjectType().fromRef(_getExternalCacheDir(reference).object); + + static final _getExternalCacheDirs = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getExternalCacheDirs") + .asFunction)>(); + + /// from: public abstract java.io.File[] getExternalCacheDirs() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getExternalCacheDirs() => + const jni.JArrayType(jni.JObjectType()) + .fromRef(_getExternalCacheDirs(reference).object); + + static final _getExternalMediaDirs = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getExternalMediaDirs") + .asFunction)>(); + + /// from: public abstract java.io.File[] getExternalMediaDirs() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getExternalMediaDirs() => + const jni.JArrayType(jni.JObjectType()) + .fromRef(_getExternalMediaDirs(reference).object); + + static final _fileList = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__fileList") + .asFunction)>(); + + /// from: public abstract java.lang.String[] fileList() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray fileList() => const jni.JArrayType(jni.JStringType()) + .fromRef(_fileList(reference).object); + + static final _getDir = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>("Context__getDir") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract java.io.File getDir(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getDir(jni.JString string, int i) => const jni.JObjectType() + .fromRef(_getDir(reference, string.reference, i).object); + + static final _openOrCreateDatabase = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("Context__openOrCreateDatabase") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String string, int i, android.database.sqlite.SQLiteDatabase$CursorFactory cursorFactory) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject openOrCreateDatabase( + jni.JString string, int i, jni.JObject cursorFactory) => + const jni.JObjectType().fromRef(_openOrCreateDatabase( + reference, string.reference, i, cursorFactory.reference) + .object); + + static final _openOrCreateDatabase1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>("Context__openOrCreateDatabase1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String string, int i, android.database.sqlite.SQLiteDatabase$CursorFactory cursorFactory, android.database.DatabaseErrorHandler databaseErrorHandler) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject openOrCreateDatabase1(jni.JString string, int i, + jni.JObject cursorFactory, jni.JObject databaseErrorHandler) => + const jni.JObjectType().fromRef(_openOrCreateDatabase1( + reference, + string.reference, + i, + cursorFactory.reference, + databaseErrorHandler.reference) + .object); + + static final _moveDatabaseFrom = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__moveDatabaseFrom") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract boolean moveDatabaseFrom(android.content.Context context, java.lang.String string) + bool moveDatabaseFrom(Context context, jni.JString string) => + _moveDatabaseFrom(reference, context.reference, string.reference).boolean; + + static final _deleteDatabase = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__deleteDatabase") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean deleteDatabase(java.lang.String string) + bool deleteDatabase(jni.JString string) => + _deleteDatabase(reference, string.reference).boolean; + + static final _getDatabasePath = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getDatabasePath") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.io.File getDatabasePath(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getDatabasePath(jni.JString string) => const jni.JObjectType() + .fromRef(_getDatabasePath(reference, string.reference).object); + + static final _databaseList = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__databaseList") + .asFunction)>(); + + /// from: public abstract java.lang.String[] databaseList() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray databaseList() => + const jni.JArrayType(jni.JStringType()) + .fromRef(_databaseList(reference).object); + + static final _getWallpaper = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getWallpaper") + .asFunction)>(); + + /// from: public abstract android.graphics.drawable.Drawable getWallpaper() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getWallpaper() => + const jni.JObjectType().fromRef(_getWallpaper(reference).object); + + static final _peekWallpaper = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__peekWallpaper") + .asFunction)>(); + + /// from: public abstract android.graphics.drawable.Drawable peekWallpaper() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject peekWallpaper() => + const jni.JObjectType().fromRef(_peekWallpaper(reference).object); + + static final _getWallpaperDesiredMinimumWidth = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Context__getWallpaperDesiredMinimumWidth") + .asFunction)>(); + + /// from: public abstract int getWallpaperDesiredMinimumWidth() + int getWallpaperDesiredMinimumWidth() => + _getWallpaperDesiredMinimumWidth(reference).integer; + + static final _getWallpaperDesiredMinimumHeight = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Context__getWallpaperDesiredMinimumHeight") + .asFunction)>(); + + /// from: public abstract int getWallpaperDesiredMinimumHeight() + int getWallpaperDesiredMinimumHeight() => + _getWallpaperDesiredMinimumHeight(reference).integer; + + static final _setWallpaper = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__setWallpaper") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void setWallpaper(android.graphics.Bitmap bitmap) + void setWallpaper(jni.JObject bitmap) => + _setWallpaper(reference, bitmap.reference).check(); + + static final _setWallpaper1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__setWallpaper1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void setWallpaper(java.io.InputStream inputStream) + void setWallpaper1(jni.JObject inputStream) => + _setWallpaper1(reference, inputStream.reference).check(); + + static final _clearWallpaper = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__clearWallpaper") + .asFunction)>(); + + /// from: public abstract void clearWallpaper() + void clearWallpaper() => _clearWallpaper(reference).check(); + + static final _startActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__startActivity") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void startActivity(android.content.Intent intent) + void startActivity(Intent intent) => + _startActivity(reference, intent.reference).check(); + + static final _startActivity1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__startActivity1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void startActivity(android.content.Intent intent, android.os.Bundle bundle) + void startActivity1(Intent intent, jni.JObject bundle) => + _startActivity1(reference, intent.reference, bundle.reference).check(); + + static final _startActivities = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__startActivities") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void startActivities(android.content.Intent[] intents) + void startActivities(jni.JArray intents) => + _startActivities(reference, intents.reference).check(); + + static final _startActivities1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__startActivities1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void startActivities(android.content.Intent[] intents, android.os.Bundle bundle) + void startActivities1(jni.JArray intents, jni.JObject bundle) => + _startActivities1(reference, intents.reference, bundle.reference).check(); + + static final _startIntentSender = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Context__startIntentSender") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, int)>(); + + /// from: public abstract void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2) + void startIntentSender( + jni.JObject intentSender, Intent intent, int i, int i1, int i2) => + _startIntentSender( + reference, intentSender.reference, intent.reference, i, i1, i2) + .check(); + + static final _startIntentSender1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>("Context__startIntentSender1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, int, ffi.Pointer)>(); + + /// from: public abstract void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2, android.os.Bundle bundle) + void startIntentSender1(jni.JObject intentSender, Intent intent, int i, + int i1, int i2, jni.JObject bundle) => + _startIntentSender1(reference, intentSender.reference, intent.reference, + i, i1, i2, bundle.reference) + .check(); + + static final _sendBroadcast = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__sendBroadcast") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void sendBroadcast(android.content.Intent intent) + void sendBroadcast(Intent intent) => + _sendBroadcast(reference, intent.reference).check(); + + static final _sendBroadcast1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__sendBroadcast1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendBroadcast(android.content.Intent intent, java.lang.String string) + void sendBroadcast1(Intent intent, jni.JString string) => + _sendBroadcast1(reference, intent.reference, string.reference).check(); + + static final _sendBroadcastWithMultiplePermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Context__sendBroadcastWithMultiplePermissions") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void sendBroadcastWithMultiplePermissions(android.content.Intent intent, java.lang.String[] strings) + void sendBroadcastWithMultiplePermissions( + Intent intent, jni.JArray strings) => + _sendBroadcastWithMultiplePermissions( + reference, intent.reference, strings.reference) + .check(); + + static final _sendOrderedBroadcast = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__sendOrderedBroadcast") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string) + void sendOrderedBroadcast(Intent intent, jni.JString string) => + _sendOrderedBroadcast(reference, intent.reference, string.reference) + .check(); + + static final _sendOrderedBroadcast1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>("Context__sendOrderedBroadcast1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string1, android.os.Bundle bundle) + void sendOrderedBroadcast1( + Intent intent, + jni.JString string, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string1, + jni.JObject bundle) => + _sendOrderedBroadcast1( + reference, + intent.reference, + string.reference, + broadcastReceiver.reference, + handler.reference, + i, + string1.reference, + bundle.reference) + .check(); + + static final _sendBroadcastAsUser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__sendBroadcastAsUser") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle) + void sendBroadcastAsUser(Intent intent, jni.JObject userHandle) => + _sendBroadcastAsUser(reference, intent.reference, userHandle.reference) + .check(); + + static final _sendBroadcastAsUser1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__sendBroadcastAsUser1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void sendBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, java.lang.String string) + void sendBroadcastAsUser1( + Intent intent, jni.JObject userHandle, jni.JString string) => + _sendBroadcastAsUser1(reference, intent.reference, userHandle.reference, + string.reference) + .check(); + + static final _sendOrderedBroadcastAsUser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>( + "Context__sendOrderedBroadcastAsUser") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendOrderedBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, java.lang.String string, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string1, android.os.Bundle bundle) + void sendOrderedBroadcastAsUser( + Intent intent, + jni.JObject userHandle, + jni.JString string, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string1, + jni.JObject bundle) => + _sendOrderedBroadcastAsUser( + reference, + intent.reference, + userHandle.reference, + string.reference, + broadcastReceiver.reference, + handler.reference, + i, + string1.reference, + bundle.reference) + .check(); + + static final _sendOrderedBroadcast2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>("Context__sendOrderedBroadcast2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string, java.lang.String string1, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string2, android.os.Bundle bundle) + void sendOrderedBroadcast2( + Intent intent, + jni.JString string, + jni.JString string1, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string2, + jni.JObject bundle) => + _sendOrderedBroadcast2( + reference, + intent.reference, + string.reference, + string1.reference, + broadcastReceiver.reference, + handler.reference, + i, + string2.reference, + bundle.reference) + .check(); + + static final _sendStickyBroadcast = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__sendStickyBroadcast") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void sendStickyBroadcast(android.content.Intent intent) + void sendStickyBroadcast(Intent intent) => + _sendStickyBroadcast(reference, intent.reference).check(); + + static final _sendStickyBroadcast1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__sendStickyBroadcast1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void sendStickyBroadcast(android.content.Intent intent, android.os.Bundle bundle) + void sendStickyBroadcast1(Intent intent, jni.JObject bundle) => + _sendStickyBroadcast1(reference, intent.reference, bundle.reference) + .check(); + + static final _sendStickyOrderedBroadcast = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>( + "Context__sendStickyOrderedBroadcast") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendStickyOrderedBroadcast(android.content.Intent intent, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string, android.os.Bundle bundle) + void sendStickyOrderedBroadcast(Intent intent, jni.JObject broadcastReceiver, + jni.JObject handler, int i, jni.JString string, jni.JObject bundle) => + _sendStickyOrderedBroadcast( + reference, + intent.reference, + broadcastReceiver.reference, + handler.reference, + i, + string.reference, + bundle.reference) + .check(); + + static final _removeStickyBroadcast = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__removeStickyBroadcast") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void removeStickyBroadcast(android.content.Intent intent) + void removeStickyBroadcast(Intent intent) => + _removeStickyBroadcast(reference, intent.reference).check(); + + static final _sendStickyBroadcastAsUser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__sendStickyBroadcastAsUser") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendStickyBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle) + void sendStickyBroadcastAsUser(Intent intent, jni.JObject userHandle) => + _sendStickyBroadcastAsUser( + reference, intent.reference, userHandle.reference) + .check(); + + static final _sendStickyOrderedBroadcastAsUser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>( + "Context__sendStickyOrderedBroadcastAsUser") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void sendStickyOrderedBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string, android.os.Bundle bundle) + void sendStickyOrderedBroadcastAsUser( + Intent intent, + jni.JObject userHandle, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string, + jni.JObject bundle) => + _sendStickyOrderedBroadcastAsUser( + reference, + intent.reference, + userHandle.reference, + broadcastReceiver.reference, + handler.reference, + i, + string.reference, + bundle.reference) + .check(); + + static final _removeStickyBroadcastAsUser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Context__removeStickyBroadcastAsUser") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void removeStickyBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle) + void removeStickyBroadcastAsUser(Intent intent, jni.JObject userHandle) => + _removeStickyBroadcastAsUser( + reference, intent.reference, userHandle.reference) + .check(); + + static final _registerReceiver = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__registerReceiver") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent registerReceiver( + jni.JObject broadcastReceiver, jni.JObject intentFilter) => + const $IntentType().fromRef(_registerReceiver( + reference, broadcastReceiver.reference, intentFilter.reference) + .object); + + static final _registerReceiver1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__registerReceiver1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent registerReceiver1( + jni.JObject broadcastReceiver, jni.JObject intentFilter, int i) => + const $IntentType().fromRef(_registerReceiver1( + reference, broadcastReceiver.reference, intentFilter.reference, i) + .object); + + static final _registerReceiver2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__registerReceiver2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, java.lang.String string, android.os.Handler handler) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent registerReceiver2(jni.JObject broadcastReceiver, + jni.JObject intentFilter, jni.JString string, jni.JObject handler) => + const $IntentType().fromRef(_registerReceiver2( + reference, + broadcastReceiver.reference, + intentFilter.reference, + string.reference, + handler.reference) + .object); + + static final _registerReceiver3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__registerReceiver3") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, java.lang.String string, android.os.Handler handler, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent registerReceiver3( + jni.JObject broadcastReceiver, + jni.JObject intentFilter, + jni.JString string, + jni.JObject handler, + int i) => + const $IntentType().fromRef(_registerReceiver3( + reference, + broadcastReceiver.reference, + intentFilter.reference, + string.reference, + handler.reference, + i) + .object); + + static final _unregisterReceiver = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__unregisterReceiver") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void unregisterReceiver(android.content.BroadcastReceiver broadcastReceiver) + void unregisterReceiver(jni.JObject broadcastReceiver) => + _unregisterReceiver(reference, broadcastReceiver.reference).check(); + + static final _startService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__startService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract android.content.ComponentName startService(android.content.Intent intent) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject startService(Intent intent) => const jni.JObjectType() + .fromRef(_startService(reference, intent.reference).object); + + static final _startForegroundService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__startForegroundService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract android.content.ComponentName startForegroundService(android.content.Intent intent) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject startForegroundService(Intent intent) => const jni.JObjectType() + .fromRef(_startForegroundService(reference, intent.reference).object); + + static final _stopService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__stopService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean stopService(android.content.Intent intent) + bool stopService(Intent intent) => + _stopService(reference, intent.reference).boolean; + + static final _bindService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__bindService") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public abstract boolean bindService(android.content.Intent intent, android.content.ServiceConnection serviceConnection, int i) + bool bindService(Intent intent, jni.JObject serviceConnection, int i) => + _bindService(reference, intent.reference, serviceConnection.reference, i) + .boolean; + + static final _bindService1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>("Context__bindService1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean bindService(android.content.Intent intent, int i, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection) + bool bindService1(Intent intent, int i, jni.JObject executor, + jni.JObject serviceConnection) => + _bindService1(reference, intent.reference, i, executor.reference, + serviceConnection.reference) + .boolean; + + static final _bindIsolatedService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__bindIsolatedService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public boolean bindIsolatedService(android.content.Intent intent, int i, java.lang.String string, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection) + bool bindIsolatedService(Intent intent, int i, jni.JString string, + jni.JObject executor, jni.JObject serviceConnection) => + _bindIsolatedService(reference, intent.reference, i, string.reference, + executor.reference, serviceConnection.reference) + .boolean; + + static final _bindServiceAsUser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("Context__bindServiceAsUser") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean bindServiceAsUser(android.content.Intent intent, android.content.ServiceConnection serviceConnection, int i, android.os.UserHandle userHandle) + bool bindServiceAsUser(Intent intent, jni.JObject serviceConnection, int i, + jni.JObject userHandle) => + _bindServiceAsUser(reference, intent.reference, + serviceConnection.reference, i, userHandle.reference) + .boolean; + + static final _updateServiceGroup = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32)>>("Context__updateServiceGroup") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int, int)>(); + + /// from: public void updateServiceGroup(android.content.ServiceConnection serviceConnection, int i, int i1) + void updateServiceGroup(jni.JObject serviceConnection, int i, int i1) => + _updateServiceGroup(reference, serviceConnection.reference, i, i1) + .check(); + + static final _unbindService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__unbindService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract void unbindService(android.content.ServiceConnection serviceConnection) + void unbindService(jni.JObject serviceConnection) => + _unbindService(reference, serviceConnection.reference).check(); + + static final _startInstrumentation = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__startInstrumentation") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean startInstrumentation(android.content.ComponentName componentName, java.lang.String string, android.os.Bundle bundle) + bool startInstrumentation( + jni.JObject componentName, jni.JString string, jni.JObject bundle) => + _startInstrumentation(reference, componentName.reference, + string.reference, bundle.reference) + .boolean; + + static final _getSystemService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getSystemService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.Object getSystemService(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSystemService(jni.JString string) => const jni.JObjectType() + .fromRef(_getSystemService(reference, string.reference).object); + + static final _getSystemService1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getSystemService1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final T getSystemService(java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + T getSystemService1( + jni.JObjType $T, jni.JObject class0) => + $T.fromRef(_getSystemService1(reference, class0.reference).object); + + static final _getSystemServiceName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__getSystemServiceName") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.String getSystemServiceName(java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getSystemServiceName(jni.JObject class0) => + const jni.JStringType() + .fromRef(_getSystemServiceName(reference, class0.reference).object); + + static final _checkPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32)>>("Context__checkPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int, int)>(); + + /// from: public abstract int checkPermission(java.lang.String string, int i, int i1) + int checkPermission(jni.JString string, int i, int i1) => + _checkPermission(reference, string.reference, i, i1).integer; + + static final _checkCallingPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__checkCallingPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract int checkCallingPermission(java.lang.String string) + int checkCallingPermission(jni.JString string) => + _checkCallingPermission(reference, string.reference).integer; + + static final _checkCallingOrSelfPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Context__checkCallingOrSelfPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract int checkCallingOrSelfPermission(java.lang.String string) + int checkCallingOrSelfPermission(jni.JString string) => + _checkCallingOrSelfPermission(reference, string.reference).integer; + + static final _checkSelfPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__checkSelfPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract int checkSelfPermission(java.lang.String string) + int checkSelfPermission(jni.JString string) => + _checkSelfPermission(reference, string.reference).integer; + + static final _enforcePermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>("Context__enforcePermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, int, ffi.Pointer)>(); + + /// from: public abstract void enforcePermission(java.lang.String string, int i, int i1, java.lang.String string1) + void enforcePermission( + jni.JString string, int i, int i1, jni.JString string1) => + _enforcePermission(reference, string.reference, i, i1, string1.reference) + .check(); + + static final _enforceCallingPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Context__enforceCallingPermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void enforceCallingPermission(java.lang.String string, java.lang.String string1) + void enforceCallingPermission(jni.JString string, jni.JString string1) => + _enforceCallingPermission(reference, string.reference, string1.reference) + .check(); + + static final _enforceCallingOrSelfPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Context__enforceCallingOrSelfPermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract void enforceCallingOrSelfPermission(java.lang.String string, java.lang.String string1) + void enforceCallingOrSelfPermission( + jni.JString string, jni.JString string1) => + _enforceCallingOrSelfPermission( + reference, string.reference, string1.reference) + .check(); + + static final _grantUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__grantUriPermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public abstract void grantUriPermission(java.lang.String string, android.net.Uri uri, int i) + void grantUriPermission(jni.JString string, jni.JObject uri, int i) => + _grantUriPermission(reference, string.reference, uri.reference, i) + .check(); + + static final _revokeUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__revokeUriPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract void revokeUriPermission(android.net.Uri uri, int i) + void revokeUriPermission(jni.JObject uri, int i) => + _revokeUriPermission(reference, uri.reference, i).check(); + + static final _revokeUriPermission1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__revokeUriPermission1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public abstract void revokeUriPermission(java.lang.String string, android.net.Uri uri, int i) + void revokeUriPermission1(jni.JString string, jni.JObject uri, int i) => + _revokeUriPermission1(reference, string.reference, uri.reference, i) + .check(); + + static final _checkUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Context__checkUriPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int, int, int)>(); + + /// from: public abstract int checkUriPermission(android.net.Uri uri, int i, int i1, int i2) + int checkUriPermission(jni.JObject uri, int i, int i1, int i2) => + _checkUriPermission(reference, uri.reference, i, i1, i2).integer; + + static final _checkUriPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Context__checkUriPermissions") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int, int, int)>(); + + /// from: public java.lang.Object[] checkUriPermissions(java.util.List list, int i, int i1, int i2) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray checkUriPermissions( + jni.JObject list, int i, int i1, int i2) => + const jni.JArrayType(jni.JIntType()).fromRef( + _checkUriPermissions(reference, list.reference, i, i1, i2).object); + + static final _checkCallingUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__checkCallingUriPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract int checkCallingUriPermission(android.net.Uri uri, int i) + int checkCallingUriPermission(jni.JObject uri, int i) => + _checkCallingUriPermission(reference, uri.reference, i).integer; + + static final _checkCallingUriPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__checkCallingUriPermissions") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public java.lang.Object[] checkCallingUriPermissions(java.util.List list, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray checkCallingUriPermissions(jni.JObject list, int i) => + const jni.JArrayType(jni.JIntType()).fromRef( + _checkCallingUriPermissions(reference, list.reference, i).object); + + static final _checkCallingOrSelfUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__checkCallingOrSelfUriPermission") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract int checkCallingOrSelfUriPermission(android.net.Uri uri, int i) + int checkCallingOrSelfUriPermission(jni.JObject uri, int i) => + _checkCallingOrSelfUriPermission(reference, uri.reference, i).integer; + + static final _checkCallingOrSelfUriPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__checkCallingOrSelfUriPermissions") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public java.lang.Object[] checkCallingOrSelfUriPermissions(java.util.List list, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray checkCallingOrSelfUriPermissions( + jni.JObject list, int i) => + const jni.JArrayType(jni.JIntType()).fromRef( + _checkCallingOrSelfUriPermissions(reference, list.reference, i) + .object); + + static final _checkUriPermission1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Context__checkUriPermission1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, int, int)>(); + + /// from: public abstract int checkUriPermission(android.net.Uri uri, java.lang.String string, java.lang.String string1, int i, int i1, int i2) + int checkUriPermission1(jni.JObject uri, jni.JString string, + jni.JString string1, int i, int i1, int i2) => + _checkUriPermission1(reference, uri.reference, string.reference, + string1.reference, i, i1, i2) + .integer; + + static final _enforceUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>("Context__enforceUriPermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, int, int, ffi.Pointer)>(); + + /// from: public abstract void enforceUriPermission(android.net.Uri uri, int i, int i1, int i2, java.lang.String string) + void enforceUriPermission( + jni.JObject uri, int i, int i1, int i2, jni.JString string) => + _enforceUriPermission( + reference, uri.reference, i, i1, i2, string.reference) + .check(); + + static final _enforceCallingUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "Context__enforceCallingUriPermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public abstract void enforceCallingUriPermission(android.net.Uri uri, int i, java.lang.String string) + void enforceCallingUriPermission( + jni.JObject uri, int i, jni.JString string) => + _enforceCallingUriPermission( + reference, uri.reference, i, string.reference) + .check(); + + static final _enforceCallingOrSelfUriPermission = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "Context__enforceCallingOrSelfUriPermission") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public abstract void enforceCallingOrSelfUriPermission(android.net.Uri uri, int i, java.lang.String string) + void enforceCallingOrSelfUriPermission( + jni.JObject uri, int i, jni.JString string) => + _enforceCallingOrSelfUriPermission( + reference, uri.reference, i, string.reference) + .check(); + + static final _enforceUriPermission1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>("Context__enforceUriPermission1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + int, + int, + ffi.Pointer)>(); + + /// from: public abstract void enforceUriPermission(android.net.Uri uri, java.lang.String string, java.lang.String string1, int i, int i1, int i2, java.lang.String string2) + void enforceUriPermission1(jni.JObject uri, jni.JString string, + jni.JString string1, int i, int i1, int i2, jni.JString string2) => + _enforceUriPermission1(reference, uri.reference, string.reference, + string1.reference, i, i1, i2, string2.reference) + .check(); + + static final _revokeSelfPermissionOnKill = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Context__revokeSelfPermissionOnKill") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void revokeSelfPermissionOnKill(java.lang.String string) + void revokeSelfPermissionOnKill(jni.JString string) => + _revokeSelfPermissionOnKill(reference, string.reference).check(); + + static final _revokeSelfPermissionsOnKill = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Context__revokeSelfPermissionsOnKill") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void revokeSelfPermissionsOnKill(java.util.Collection collection) + void revokeSelfPermissionsOnKill(jni.JObject collection) => + _revokeSelfPermissionsOnKill(reference, collection.reference).check(); + + static final _createPackageContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Context__createPackageContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public abstract android.content.Context createPackageContext(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createPackageContext(jni.JString string, int i) => + const $ContextType().fromRef( + _createPackageContext(reference, string.reference, i).object); + + static final _createContextForSplit = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__createContextForSplit") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract android.content.Context createContextForSplit(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createContextForSplit(jni.JString string) => const $ContextType() + .fromRef(_createContextForSplit(reference, string.reference).object); + + static final _createConfigurationContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Context__createConfigurationContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract android.content.Context createConfigurationContext(android.content.res.Configuration configuration) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createConfigurationContext(jni.JObject configuration) => + const $ContextType().fromRef( + _createConfigurationContext(reference, configuration.reference) + .object); + + static final _createDisplayContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__createDisplayContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract android.content.Context createDisplayContext(android.view.Display display) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createDisplayContext(jni.JObject display) => const $ContextType() + .fromRef(_createDisplayContext(reference, display.reference).object); + + static final _createWindowContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Context__createWindowContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public android.content.Context createWindowContext(int i, android.os.Bundle bundle) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createWindowContext(int i, jni.JObject bundle) => const $ContextType() + .fromRef(_createWindowContext(reference, i, bundle.reference).object); + + static final _createWindowContext1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("Context__createWindowContext1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public android.content.Context createWindowContext(android.view.Display display, int i, android.os.Bundle bundle) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createWindowContext1( + jni.JObject display, int i, jni.JObject bundle) => + const $ContextType().fromRef(_createWindowContext1( + reference, display.reference, i, bundle.reference) + .object); + + static final _createContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__createContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Context createContext(android.content.ContextParams contextParams) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createContext(jni.JObject contextParams) => const $ContextType() + .fromRef(_createContext(reference, contextParams.reference).object); + + static final _createAttributionContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Context__createAttributionContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Context createAttributionContext(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Context createAttributionContext(jni.JString string) => const $ContextType() + .fromRef(_createAttributionContext(reference, string.reference).object); + + static final _createDeviceProtectedStorageContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Context__createDeviceProtectedStorageContext") + .asFunction)>(); + + /// from: public abstract android.content.Context createDeviceProtectedStorageContext() + /// The returned object must be deleted after use, by calling the `delete` method. + Context createDeviceProtectedStorageContext() => const $ContextType() + .fromRef(_createDeviceProtectedStorageContext(reference).object); + + static final _getDisplay = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__getDisplay") + .asFunction)>(); + + /// from: public android.view.Display getDisplay() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getDisplay() => + const jni.JObjectType().fromRef(_getDisplay(reference).object); + + static final _isRestricted = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__isRestricted") + .asFunction)>(); + + /// from: public boolean isRestricted() + bool isRestricted() => _isRestricted(reference).boolean; + + static final _isDeviceProtectedStorage = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__isDeviceProtectedStorage") + .asFunction)>(); + + /// from: public abstract boolean isDeviceProtectedStorage() + bool isDeviceProtectedStorage() => + _isDeviceProtectedStorage(reference).boolean; + + static final _isUiContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Context__isUiContext") + .asFunction)>(); + + /// from: public boolean isUiContext() + bool isUiContext() => _isUiContext(reference).boolean; +} + +class $ContextType extends jni.JObjType { + const $ContextType(); + + @override + String get signature => r"Landroid/content/Context;"; + + @override + Context fromRef(jni.JObjectPtr ref) => Context.fromRef(ref); +} + +extension $ContextArray on jni.JArray { + Context operator [](int index) { + return (elementType as $ContextType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, Context value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: android.content.Intent +class Intent extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + Intent.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $IntentType(); + + /// from: static public final java.lang.String ACTION_AIRPLANE_MODE_CHANGED + static const ACTION_AIRPLANE_MODE_CHANGED = + "android.intent.action.AIRPLANE_MODE"; + + /// from: static public final java.lang.String ACTION_ALL_APPS + static const ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; + + /// from: static public final java.lang.String ACTION_ANSWER + static const ACTION_ANSWER = "android.intent.action.ANSWER"; + + /// from: static public final java.lang.String ACTION_APPLICATION_LOCALE_CHANGED + static const ACTION_APPLICATION_LOCALE_CHANGED = + "android.intent.action.APPLICATION_LOCALE_CHANGED"; + + /// from: static public final java.lang.String ACTION_APPLICATION_PREFERENCES + static const ACTION_APPLICATION_PREFERENCES = + "android.intent.action.APPLICATION_PREFERENCES"; + + /// from: static public final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED + static const ACTION_APPLICATION_RESTRICTIONS_CHANGED = + "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"; + + /// from: static public final java.lang.String ACTION_APP_ERROR + static const ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; + + /// from: static public final java.lang.String ACTION_ASSIST + static const ACTION_ASSIST = "android.intent.action.ASSIST"; + + /// from: static public final java.lang.String ACTION_ATTACH_DATA + static const ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA"; + + /// from: static public final java.lang.String ACTION_AUTO_REVOKE_PERMISSIONS + static const ACTION_AUTO_REVOKE_PERMISSIONS = + "android.intent.action.AUTO_REVOKE_PERMISSIONS"; + + /// from: static public final java.lang.String ACTION_BATTERY_CHANGED + static const ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED"; + + /// from: static public final java.lang.String ACTION_BATTERY_LOW + static const ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW"; + + /// from: static public final java.lang.String ACTION_BATTERY_OKAY + static const ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY"; + + /// from: static public final java.lang.String ACTION_BOOT_COMPLETED + static const ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; + + /// from: static public final java.lang.String ACTION_BUG_REPORT + static const ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT"; + + /// from: static public final java.lang.String ACTION_CALL + static const ACTION_CALL = "android.intent.action.CALL"; + + /// from: static public final java.lang.String ACTION_CALL_BUTTON + static const ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON"; + + /// from: static public final java.lang.String ACTION_CAMERA_BUTTON + static const ACTION_CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON"; + + /// from: static public final java.lang.String ACTION_CARRIER_SETUP + static const ACTION_CARRIER_SETUP = "android.intent.action.CARRIER_SETUP"; + + /// from: static public final java.lang.String ACTION_CHOOSER + static const ACTION_CHOOSER = "android.intent.action.CHOOSER"; + + /// from: static public final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS + static const ACTION_CLOSE_SYSTEM_DIALOGS = + "android.intent.action.CLOSE_SYSTEM_DIALOGS"; + + /// from: static public final java.lang.String ACTION_CONFIGURATION_CHANGED + static const ACTION_CONFIGURATION_CHANGED = + "android.intent.action.CONFIGURATION_CHANGED"; + + /// from: static public final java.lang.String ACTION_CREATE_DOCUMENT + static const ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT"; + + /// from: static public final java.lang.String ACTION_CREATE_REMINDER + static const ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER"; + + /// from: static public final java.lang.String ACTION_CREATE_SHORTCUT + static const ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT"; + + /// from: static public final java.lang.String ACTION_DATE_CHANGED + static const ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED"; + + /// from: static public final java.lang.String ACTION_DEFAULT + static const ACTION_DEFAULT = "android.intent.action.VIEW"; + + /// from: static public final java.lang.String ACTION_DEFINE + static const ACTION_DEFINE = "android.intent.action.DEFINE"; + + /// from: static public final java.lang.String ACTION_DELETE + static const ACTION_DELETE = "android.intent.action.DELETE"; + + /// from: static public final java.lang.String ACTION_DEVICE_STORAGE_LOW + static const ACTION_DEVICE_STORAGE_LOW = + "android.intent.action.DEVICE_STORAGE_LOW"; + + /// from: static public final java.lang.String ACTION_DEVICE_STORAGE_OK + static const ACTION_DEVICE_STORAGE_OK = + "android.intent.action.DEVICE_STORAGE_OK"; + + /// from: static public final java.lang.String ACTION_DIAL + static const ACTION_DIAL = "android.intent.action.DIAL"; + + /// from: static public final java.lang.String ACTION_DOCK_EVENT + static const ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT"; + + /// from: static public final java.lang.String ACTION_DREAMING_STARTED + static const ACTION_DREAMING_STARTED = + "android.intent.action.DREAMING_STARTED"; + + /// from: static public final java.lang.String ACTION_DREAMING_STOPPED + static const ACTION_DREAMING_STOPPED = + "android.intent.action.DREAMING_STOPPED"; + + /// from: static public final java.lang.String ACTION_EDIT + static const ACTION_EDIT = "android.intent.action.EDIT"; + + /// from: static public final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE + static const ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = + "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"; + + /// from: static public final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE + static const ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = + "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"; + + /// from: static public final java.lang.String ACTION_FACTORY_TEST + static const ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST"; + + /// from: static public final java.lang.String ACTION_GET_CONTENT + static const ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT"; + + /// from: static public final java.lang.String ACTION_GET_RESTRICTION_ENTRIES + static const ACTION_GET_RESTRICTION_ENTRIES = + "android.intent.action.GET_RESTRICTION_ENTRIES"; + + /// from: static public final java.lang.String ACTION_GTALK_SERVICE_CONNECTED + static const ACTION_GTALK_SERVICE_CONNECTED = + "android.intent.action.GTALK_CONNECTED"; + + /// from: static public final java.lang.String ACTION_GTALK_SERVICE_DISCONNECTED + static const ACTION_GTALK_SERVICE_DISCONNECTED = + "android.intent.action.GTALK_DISCONNECTED"; + + /// from: static public final java.lang.String ACTION_HEADSET_PLUG + static const ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG"; + + /// from: static public final java.lang.String ACTION_INPUT_METHOD_CHANGED + static const ACTION_INPUT_METHOD_CHANGED = + "android.intent.action.INPUT_METHOD_CHANGED"; + + /// from: static public final java.lang.String ACTION_INSERT + static const ACTION_INSERT = "android.intent.action.INSERT"; + + /// from: static public final java.lang.String ACTION_INSERT_OR_EDIT + static const ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT"; + + /// from: static public final java.lang.String ACTION_INSTALL_FAILURE + static const ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE"; + + /// from: static public final java.lang.String ACTION_INSTALL_PACKAGE + static const ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE"; + + /// from: static public final java.lang.String ACTION_LOCALE_CHANGED + static const ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED"; + + /// from: static public final java.lang.String ACTION_LOCKED_BOOT_COMPLETED + static const ACTION_LOCKED_BOOT_COMPLETED = + "android.intent.action.LOCKED_BOOT_COMPLETED"; + + /// from: static public final java.lang.String ACTION_MAIN + static const ACTION_MAIN = "android.intent.action.MAIN"; + + /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_ADDED + static const ACTION_MANAGED_PROFILE_ADDED = + "android.intent.action.MANAGED_PROFILE_ADDED"; + + /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_AVAILABLE + static const ACTION_MANAGED_PROFILE_AVAILABLE = + "android.intent.action.MANAGED_PROFILE_AVAILABLE"; + + /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_REMOVED + static const ACTION_MANAGED_PROFILE_REMOVED = + "android.intent.action.MANAGED_PROFILE_REMOVED"; + + /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_UNAVAILABLE + static const ACTION_MANAGED_PROFILE_UNAVAILABLE = + "android.intent.action.MANAGED_PROFILE_UNAVAILABLE"; + + /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_UNLOCKED + static const ACTION_MANAGED_PROFILE_UNLOCKED = + "android.intent.action.MANAGED_PROFILE_UNLOCKED"; + + /// from: static public final java.lang.String ACTION_MANAGE_NETWORK_USAGE + static const ACTION_MANAGE_NETWORK_USAGE = + "android.intent.action.MANAGE_NETWORK_USAGE"; + + /// from: static public final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE + static const ACTION_MANAGE_PACKAGE_STORAGE = + "android.intent.action.MANAGE_PACKAGE_STORAGE"; + + /// from: static public final java.lang.String ACTION_MANAGE_UNUSED_APPS + static const ACTION_MANAGE_UNUSED_APPS = + "android.intent.action.MANAGE_UNUSED_APPS"; + + /// from: static public final java.lang.String ACTION_MEDIA_BAD_REMOVAL + static const ACTION_MEDIA_BAD_REMOVAL = + "android.intent.action.MEDIA_BAD_REMOVAL"; + + /// from: static public final java.lang.String ACTION_MEDIA_BUTTON + static const ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON"; + + /// from: static public final java.lang.String ACTION_MEDIA_CHECKING + static const ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING"; + + /// from: static public final java.lang.String ACTION_MEDIA_EJECT + static const ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT"; + + /// from: static public final java.lang.String ACTION_MEDIA_MOUNTED + static const ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED"; + + /// from: static public final java.lang.String ACTION_MEDIA_NOFS + static const ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS"; + + /// from: static public final java.lang.String ACTION_MEDIA_REMOVED + static const ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED"; + + /// from: static public final java.lang.String ACTION_MEDIA_SCANNER_FINISHED + static const ACTION_MEDIA_SCANNER_FINISHED = + "android.intent.action.MEDIA_SCANNER_FINISHED"; + + /// from: static public final java.lang.String ACTION_MEDIA_SCANNER_SCAN_FILE + static const ACTION_MEDIA_SCANNER_SCAN_FILE = + "android.intent.action.MEDIA_SCANNER_SCAN_FILE"; + + /// from: static public final java.lang.String ACTION_MEDIA_SCANNER_STARTED + static const ACTION_MEDIA_SCANNER_STARTED = + "android.intent.action.MEDIA_SCANNER_STARTED"; + + /// from: static public final java.lang.String ACTION_MEDIA_SHARED + static const ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED"; + + /// from: static public final java.lang.String ACTION_MEDIA_UNMOUNTABLE + static const ACTION_MEDIA_UNMOUNTABLE = + "android.intent.action.MEDIA_UNMOUNTABLE"; + + /// from: static public final java.lang.String ACTION_MEDIA_UNMOUNTED + static const ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; + + /// from: static public final java.lang.String ACTION_MY_PACKAGE_REPLACED + static const ACTION_MY_PACKAGE_REPLACED = + "android.intent.action.MY_PACKAGE_REPLACED"; + + /// from: static public final java.lang.String ACTION_MY_PACKAGE_SUSPENDED + static const ACTION_MY_PACKAGE_SUSPENDED = + "android.intent.action.MY_PACKAGE_SUSPENDED"; + + /// from: static public final java.lang.String ACTION_MY_PACKAGE_UNSUSPENDED + static const ACTION_MY_PACKAGE_UNSUSPENDED = + "android.intent.action.MY_PACKAGE_UNSUSPENDED"; + + /// from: static public final java.lang.String ACTION_NEW_OUTGOING_CALL + static const ACTION_NEW_OUTGOING_CALL = + "android.intent.action.NEW_OUTGOING_CALL"; + + /// from: static public final java.lang.String ACTION_OPEN_DOCUMENT + static const ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; + + /// from: static public final java.lang.String ACTION_OPEN_DOCUMENT_TREE + static const ACTION_OPEN_DOCUMENT_TREE = + "android.intent.action.OPEN_DOCUMENT_TREE"; + + /// from: static public final java.lang.String ACTION_PACKAGES_SUSPENDED + static const ACTION_PACKAGES_SUSPENDED = + "android.intent.action.PACKAGES_SUSPENDED"; + + /// from: static public final java.lang.String ACTION_PACKAGES_UNSUSPENDED + static const ACTION_PACKAGES_UNSUSPENDED = + "android.intent.action.PACKAGES_UNSUSPENDED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_ADDED + static const ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_CHANGED + static const ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_DATA_CLEARED + static const ACTION_PACKAGE_DATA_CLEARED = + "android.intent.action.PACKAGE_DATA_CLEARED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_FIRST_LAUNCH + static const ACTION_PACKAGE_FIRST_LAUNCH = + "android.intent.action.PACKAGE_FIRST_LAUNCH"; + + /// from: static public final java.lang.String ACTION_PACKAGE_FULLY_REMOVED + static const ACTION_PACKAGE_FULLY_REMOVED = + "android.intent.action.PACKAGE_FULLY_REMOVED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_INSTALL + static const ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; + + /// from: static public final java.lang.String ACTION_PACKAGE_NEEDS_VERIFICATION + static const ACTION_PACKAGE_NEEDS_VERIFICATION = + "android.intent.action.PACKAGE_NEEDS_VERIFICATION"; + + /// from: static public final java.lang.String ACTION_PACKAGE_REMOVED + static const ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_REPLACED + static const ACTION_PACKAGE_REPLACED = + "android.intent.action.PACKAGE_REPLACED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_RESTARTED + static const ACTION_PACKAGE_RESTARTED = + "android.intent.action.PACKAGE_RESTARTED"; + + /// from: static public final java.lang.String ACTION_PACKAGE_VERIFIED + static const ACTION_PACKAGE_VERIFIED = + "android.intent.action.PACKAGE_VERIFIED"; + + /// from: static public final java.lang.String ACTION_PASTE + static const ACTION_PASTE = "android.intent.action.PASTE"; + + /// from: static public final java.lang.String ACTION_PICK + static const ACTION_PICK = "android.intent.action.PICK"; + + /// from: static public final java.lang.String ACTION_PICK_ACTIVITY + static const ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY"; + + /// from: static public final java.lang.String ACTION_POWER_CONNECTED + static const ACTION_POWER_CONNECTED = + "android.intent.action.ACTION_POWER_CONNECTED"; + + /// from: static public final java.lang.String ACTION_POWER_DISCONNECTED + static const ACTION_POWER_DISCONNECTED = + "android.intent.action.ACTION_POWER_DISCONNECTED"; + + /// from: static public final java.lang.String ACTION_POWER_USAGE_SUMMARY + static const ACTION_POWER_USAGE_SUMMARY = + "android.intent.action.POWER_USAGE_SUMMARY"; + + /// from: static public final java.lang.String ACTION_PROCESS_TEXT + static const ACTION_PROCESS_TEXT = "android.intent.action.PROCESS_TEXT"; + + /// from: static public final java.lang.String ACTION_PROFILE_ACCESSIBLE + static const ACTION_PROFILE_ACCESSIBLE = + "android.intent.action.PROFILE_ACCESSIBLE"; + + /// from: static public final java.lang.String ACTION_PROFILE_INACCESSIBLE + static const ACTION_PROFILE_INACCESSIBLE = + "android.intent.action.PROFILE_INACCESSIBLE"; + + /// from: static public final java.lang.String ACTION_PROVIDER_CHANGED + static const ACTION_PROVIDER_CHANGED = + "android.intent.action.PROVIDER_CHANGED"; + + /// from: static public final java.lang.String ACTION_QUICK_CLOCK + static const ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK"; + + /// from: static public final java.lang.String ACTION_QUICK_VIEW + static const ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW"; + + /// from: static public final java.lang.String ACTION_REBOOT + static const ACTION_REBOOT = "android.intent.action.REBOOT"; + + /// from: static public final java.lang.String ACTION_RUN + static const ACTION_RUN = "android.intent.action.RUN"; + + /// from: static public final java.lang.String ACTION_SAFETY_CENTER + static const ACTION_SAFETY_CENTER = "android.intent.action.SAFETY_CENTER"; + + /// from: static public final java.lang.String ACTION_SCREEN_OFF + static const ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF"; + + /// from: static public final java.lang.String ACTION_SCREEN_ON + static const ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON"; + + /// from: static public final java.lang.String ACTION_SEARCH + static const ACTION_SEARCH = "android.intent.action.SEARCH"; + + /// from: static public final java.lang.String ACTION_SEARCH_LONG_PRESS + static const ACTION_SEARCH_LONG_PRESS = + "android.intent.action.SEARCH_LONG_PRESS"; + + /// from: static public final java.lang.String ACTION_SEND + static const ACTION_SEND = "android.intent.action.SEND"; + + /// from: static public final java.lang.String ACTION_SENDTO + static const ACTION_SENDTO = "android.intent.action.SENDTO"; + + /// from: static public final java.lang.String ACTION_SEND_MULTIPLE + static const ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE"; + + /// from: static public final java.lang.String ACTION_SET_WALLPAPER + static const ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER"; + + /// from: static public final java.lang.String ACTION_SHOW_APP_INFO + static const ACTION_SHOW_APP_INFO = "android.intent.action.SHOW_APP_INFO"; + + /// from: static public final java.lang.String ACTION_SHOW_WORK_APPS + static const ACTION_SHOW_WORK_APPS = "android.intent.action.SHOW_WORK_APPS"; + + /// from: static public final java.lang.String ACTION_SHUTDOWN + static const ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN"; + + /// from: static public final java.lang.String ACTION_SYNC + static const ACTION_SYNC = "android.intent.action.SYNC"; + + /// from: static public final java.lang.String ACTION_SYSTEM_TUTORIAL + static const ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL"; + + /// from: static public final java.lang.String ACTION_TIMEZONE_CHANGED + static const ACTION_TIMEZONE_CHANGED = + "android.intent.action.TIMEZONE_CHANGED"; + + /// from: static public final java.lang.String ACTION_TIME_CHANGED + static const ACTION_TIME_CHANGED = "android.intent.action.TIME_SET"; + + /// from: static public final java.lang.String ACTION_TIME_TICK + static const ACTION_TIME_TICK = "android.intent.action.TIME_TICK"; + + /// from: static public final java.lang.String ACTION_TRANSLATE + static const ACTION_TRANSLATE = "android.intent.action.TRANSLATE"; + + /// from: static public final java.lang.String ACTION_UID_REMOVED + static const ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED"; + + /// from: static public final java.lang.String ACTION_UMS_CONNECTED + static const ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED"; + + /// from: static public final java.lang.String ACTION_UMS_DISCONNECTED + static const ACTION_UMS_DISCONNECTED = + "android.intent.action.UMS_DISCONNECTED"; + + /// from: static public final java.lang.String ACTION_UNINSTALL_PACKAGE + static const ACTION_UNINSTALL_PACKAGE = + "android.intent.action.UNINSTALL_PACKAGE"; + + /// from: static public final java.lang.String ACTION_USER_BACKGROUND + static const ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND"; + + /// from: static public final java.lang.String ACTION_USER_FOREGROUND + static const ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND"; + + /// from: static public final java.lang.String ACTION_USER_INITIALIZE + static const ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE"; + + /// from: static public final java.lang.String ACTION_USER_PRESENT + static const ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; + + /// from: static public final java.lang.String ACTION_USER_UNLOCKED + static const ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED"; + + /// from: static public final java.lang.String ACTION_VIEW + static const ACTION_VIEW = "android.intent.action.VIEW"; + + /// from: static public final java.lang.String ACTION_VIEW_LOCUS + static const ACTION_VIEW_LOCUS = "android.intent.action.VIEW_LOCUS"; + + /// from: static public final java.lang.String ACTION_VIEW_PERMISSION_USAGE + static const ACTION_VIEW_PERMISSION_USAGE = + "android.intent.action.VIEW_PERMISSION_USAGE"; + + /// from: static public final java.lang.String ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD + static const ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD = + "android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD"; + + /// from: static public final java.lang.String ACTION_VOICE_COMMAND + static const ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; + + /// from: static public final java.lang.String ACTION_WALLPAPER_CHANGED + static const ACTION_WALLPAPER_CHANGED = + "android.intent.action.WALLPAPER_CHANGED"; + + /// from: static public final java.lang.String ACTION_WEB_SEARCH + static const ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; + + /// from: static public final java.lang.String CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET + static const CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET = + "android.intent.category.ACCESSIBILITY_SHORTCUT_TARGET"; + + /// from: static public final java.lang.String CATEGORY_ALTERNATIVE + static const CATEGORY_ALTERNATIVE = "android.intent.category.ALTERNATIVE"; + + /// from: static public final java.lang.String CATEGORY_APP_BROWSER + static const CATEGORY_APP_BROWSER = "android.intent.category.APP_BROWSER"; + + /// from: static public final java.lang.String CATEGORY_APP_CALCULATOR + static const CATEGORY_APP_CALCULATOR = + "android.intent.category.APP_CALCULATOR"; + + /// from: static public final java.lang.String CATEGORY_APP_CALENDAR + static const CATEGORY_APP_CALENDAR = "android.intent.category.APP_CALENDAR"; + + /// from: static public final java.lang.String CATEGORY_APP_CONTACTS + static const CATEGORY_APP_CONTACTS = "android.intent.category.APP_CONTACTS"; + + /// from: static public final java.lang.String CATEGORY_APP_EMAIL + static const CATEGORY_APP_EMAIL = "android.intent.category.APP_EMAIL"; + + /// from: static public final java.lang.String CATEGORY_APP_FILES + static const CATEGORY_APP_FILES = "android.intent.category.APP_FILES"; + + /// from: static public final java.lang.String CATEGORY_APP_FITNESS + static const CATEGORY_APP_FITNESS = "android.intent.category.APP_FITNESS"; + + /// from: static public final java.lang.String CATEGORY_APP_GALLERY + static const CATEGORY_APP_GALLERY = "android.intent.category.APP_GALLERY"; + + /// from: static public final java.lang.String CATEGORY_APP_MAPS + static const CATEGORY_APP_MAPS = "android.intent.category.APP_MAPS"; + + /// from: static public final java.lang.String CATEGORY_APP_MARKET + static const CATEGORY_APP_MARKET = "android.intent.category.APP_MARKET"; + + /// from: static public final java.lang.String CATEGORY_APP_MESSAGING + static const CATEGORY_APP_MESSAGING = "android.intent.category.APP_MESSAGING"; + + /// from: static public final java.lang.String CATEGORY_APP_MUSIC + static const CATEGORY_APP_MUSIC = "android.intent.category.APP_MUSIC"; + + /// from: static public final java.lang.String CATEGORY_APP_WEATHER + static const CATEGORY_APP_WEATHER = "android.intent.category.APP_WEATHER"; + + /// from: static public final java.lang.String CATEGORY_BROWSABLE + static const CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE"; + + /// from: static public final java.lang.String CATEGORY_CAR_DOCK + static const CATEGORY_CAR_DOCK = "android.intent.category.CAR_DOCK"; + + /// from: static public final java.lang.String CATEGORY_CAR_MODE + static const CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE"; + + /// from: static public final java.lang.String CATEGORY_DEFAULT + static const CATEGORY_DEFAULT = "android.intent.category.DEFAULT"; + + /// from: static public final java.lang.String CATEGORY_DESK_DOCK + static const CATEGORY_DESK_DOCK = "android.intent.category.DESK_DOCK"; + + /// from: static public final java.lang.String CATEGORY_DEVELOPMENT_PREFERENCE + static const CATEGORY_DEVELOPMENT_PREFERENCE = + "android.intent.category.DEVELOPMENT_PREFERENCE"; + + /// from: static public final java.lang.String CATEGORY_EMBED + static const CATEGORY_EMBED = "android.intent.category.EMBED"; + + /// from: static public final java.lang.String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST + static const CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = + "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"; + + /// from: static public final java.lang.String CATEGORY_HE_DESK_DOCK + static const CATEGORY_HE_DESK_DOCK = "android.intent.category.HE_DESK_DOCK"; + + /// from: static public final java.lang.String CATEGORY_HOME + static const CATEGORY_HOME = "android.intent.category.HOME"; + + /// from: static public final java.lang.String CATEGORY_INFO + static const CATEGORY_INFO = "android.intent.category.INFO"; + + /// from: static public final java.lang.String CATEGORY_LAUNCHER + static const CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER"; + + /// from: static public final java.lang.String CATEGORY_LEANBACK_LAUNCHER + static const CATEGORY_LEANBACK_LAUNCHER = + "android.intent.category.LEANBACK_LAUNCHER"; + + /// from: static public final java.lang.String CATEGORY_LE_DESK_DOCK + static const CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK"; + + /// from: static public final java.lang.String CATEGORY_MONKEY + static const CATEGORY_MONKEY = "android.intent.category.MONKEY"; + + /// from: static public final java.lang.String CATEGORY_OPENABLE + static const CATEGORY_OPENABLE = "android.intent.category.OPENABLE"; + + /// from: static public final java.lang.String CATEGORY_PREFERENCE + static const CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE"; + + /// from: static public final java.lang.String CATEGORY_SAMPLE_CODE + static const CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE"; + + /// from: static public final java.lang.String CATEGORY_SECONDARY_HOME + static const CATEGORY_SECONDARY_HOME = + "android.intent.category.SECONDARY_HOME"; + + /// from: static public final java.lang.String CATEGORY_SELECTED_ALTERNATIVE + static const CATEGORY_SELECTED_ALTERNATIVE = + "android.intent.category.SELECTED_ALTERNATIVE"; + + /// from: static public final java.lang.String CATEGORY_TAB + static const CATEGORY_TAB = "android.intent.category.TAB"; + + /// from: static public final java.lang.String CATEGORY_TEST + static const CATEGORY_TEST = "android.intent.category.TEST"; + + /// from: static public final java.lang.String CATEGORY_TYPED_OPENABLE + static const CATEGORY_TYPED_OPENABLE = + "android.intent.category.TYPED_OPENABLE"; + + /// from: static public final java.lang.String CATEGORY_UNIT_TEST + static const CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; + + /// from: static public final java.lang.String CATEGORY_VOICE + static const CATEGORY_VOICE = "android.intent.category.VOICE"; + + /// from: static public final java.lang.String CATEGORY_VR_HOME + static const CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; + + static final _get_CREATOR = + jniLookup>( + "get_Intent__CREATOR") + .asFunction(); + + /// from: static public final android.os.Parcelable$Creator CREATOR + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JObject get CREATOR => + const jni.JObjectType().fromRef(_get_CREATOR().object); + + /// from: static public final java.lang.String EXTRA_ALARM_COUNT + static const EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; + + /// from: static public final java.lang.String EXTRA_ALLOW_MULTIPLE + static const EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; + + /// from: static public final java.lang.String EXTRA_ALLOW_REPLACE + static const EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE"; + + /// from: static public final java.lang.String EXTRA_ALTERNATE_INTENTS + static const EXTRA_ALTERNATE_INTENTS = + "android.intent.extra.ALTERNATE_INTENTS"; + + /// from: static public final java.lang.String EXTRA_ASSIST_CONTEXT + static const EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT"; + + /// from: static public final java.lang.String EXTRA_ASSIST_INPUT_DEVICE_ID + static const EXTRA_ASSIST_INPUT_DEVICE_ID = + "android.intent.extra.ASSIST_INPUT_DEVICE_ID"; + + /// from: static public final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD + static const EXTRA_ASSIST_INPUT_HINT_KEYBOARD = + "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD"; + + /// from: static public final java.lang.String EXTRA_ASSIST_PACKAGE + static const EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE"; + + /// from: static public final java.lang.String EXTRA_ASSIST_UID + static const EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID"; + + /// from: static public final java.lang.String EXTRA_ATTRIBUTION_TAGS + static const EXTRA_ATTRIBUTION_TAGS = "android.intent.extra.ATTRIBUTION_TAGS"; + + /// from: static public final java.lang.String EXTRA_AUTO_LAUNCH_SINGLE_CHOICE + static const EXTRA_AUTO_LAUNCH_SINGLE_CHOICE = + "android.intent.extra.AUTO_LAUNCH_SINGLE_CHOICE"; + + /// from: static public final java.lang.String EXTRA_BCC + static const EXTRA_BCC = "android.intent.extra.BCC"; + + /// from: static public final java.lang.String EXTRA_BUG_REPORT + static const EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT"; + + /// from: static public final java.lang.String EXTRA_CC + static const EXTRA_CC = "android.intent.extra.CC"; + + /// from: static public final java.lang.String EXTRA_CHANGED_COMPONENT_NAME + static const EXTRA_CHANGED_COMPONENT_NAME = + "android.intent.extra.changed_component_name"; + + /// from: static public final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST + static const EXTRA_CHANGED_COMPONENT_NAME_LIST = + "android.intent.extra.changed_component_name_list"; + + /// from: static public final java.lang.String EXTRA_CHANGED_PACKAGE_LIST + static const EXTRA_CHANGED_PACKAGE_LIST = + "android.intent.extra.changed_package_list"; + + /// from: static public final java.lang.String EXTRA_CHANGED_UID_LIST + static const EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list"; + + /// from: static public final java.lang.String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER + static const EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = + "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER"; + + /// from: static public final java.lang.String EXTRA_CHOOSER_TARGETS + static const EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS"; + + /// from: static public final java.lang.String EXTRA_CHOSEN_COMPONENT + static const EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT"; + + /// from: static public final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER + static const EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = + "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER"; + + /// from: static public final java.lang.String EXTRA_COMPONENT_NAME + static const EXTRA_COMPONENT_NAME = "android.intent.extra.COMPONENT_NAME"; + + /// from: static public final java.lang.String EXTRA_CONTENT_ANNOTATIONS + static const EXTRA_CONTENT_ANNOTATIONS = + "android.intent.extra.CONTENT_ANNOTATIONS"; + + /// from: static public final java.lang.String EXTRA_CONTENT_QUERY + static const EXTRA_CONTENT_QUERY = "android.intent.extra.CONTENT_QUERY"; + + /// from: static public final java.lang.String EXTRA_DATA_REMOVED + static const EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED"; + + /// from: static public final java.lang.String EXTRA_DOCK_STATE + static const EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE"; + + /// from: static public final int EXTRA_DOCK_STATE_CAR + static const EXTRA_DOCK_STATE_CAR = 2; + + /// from: static public final int EXTRA_DOCK_STATE_DESK + static const EXTRA_DOCK_STATE_DESK = 1; + + /// from: static public final int EXTRA_DOCK_STATE_HE_DESK + static const EXTRA_DOCK_STATE_HE_DESK = 4; + + /// from: static public final int EXTRA_DOCK_STATE_LE_DESK + static const EXTRA_DOCK_STATE_LE_DESK = 3; + + /// from: static public final int EXTRA_DOCK_STATE_UNDOCKED + static const EXTRA_DOCK_STATE_UNDOCKED = 0; + + /// from: static public final java.lang.String EXTRA_DONT_KILL_APP + static const EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; + + /// from: static public final java.lang.String EXTRA_DURATION_MILLIS + static const EXTRA_DURATION_MILLIS = "android.intent.extra.DURATION_MILLIS"; + + /// from: static public final java.lang.String EXTRA_EMAIL + static const EXTRA_EMAIL = "android.intent.extra.EMAIL"; + + /// from: static public final java.lang.String EXTRA_END_TIME + static const EXTRA_END_TIME = "android.intent.extra.END_TIME"; + + /// from: static public final java.lang.String EXTRA_EXCLUDE_COMPONENTS + static const EXTRA_EXCLUDE_COMPONENTS = + "android.intent.extra.EXCLUDE_COMPONENTS"; + + /// from: static public final java.lang.String EXTRA_FROM_STORAGE + static const EXTRA_FROM_STORAGE = "android.intent.extra.FROM_STORAGE"; + + /// from: static public final java.lang.String EXTRA_HTML_TEXT + static const EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; + + /// from: static public final java.lang.String EXTRA_INDEX + static const EXTRA_INDEX = "android.intent.extra.INDEX"; + + /// from: static public final java.lang.String EXTRA_INITIAL_INTENTS + static const EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; + + /// from: static public final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME + static const EXTRA_INSTALLER_PACKAGE_NAME = + "android.intent.extra.INSTALLER_PACKAGE_NAME"; + + /// from: static public final java.lang.String EXTRA_INTENT + static const EXTRA_INTENT = "android.intent.extra.INTENT"; + + /// from: static public final java.lang.String EXTRA_KEY_EVENT + static const EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT"; + + /// from: static public final java.lang.String EXTRA_LOCALE_LIST + static const EXTRA_LOCALE_LIST = "android.intent.extra.LOCALE_LIST"; + + /// from: static public final java.lang.String EXTRA_LOCAL_ONLY + static const EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY"; + + /// from: static public final java.lang.String EXTRA_LOCUS_ID + static const EXTRA_LOCUS_ID = "android.intent.extra.LOCUS_ID"; + + /// from: static public final java.lang.String EXTRA_MIME_TYPES + static const EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES"; + + /// from: static public final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE + static const EXTRA_NOT_UNKNOWN_SOURCE = + "android.intent.extra.NOT_UNKNOWN_SOURCE"; + + /// from: static public final java.lang.String EXTRA_ORIGINATING_URI + static const EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI"; + + /// from: static public final java.lang.String EXTRA_PACKAGE_NAME + static const EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME"; + + /// from: static public final java.lang.String EXTRA_PERMISSION_GROUP_NAME + static const EXTRA_PERMISSION_GROUP_NAME = + "android.intent.extra.PERMISSION_GROUP_NAME"; + + /// from: static public final java.lang.String EXTRA_PHONE_NUMBER + static const EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; + + /// from: static public final java.lang.String EXTRA_PROCESS_TEXT + static const EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; + + /// from: static public final java.lang.String EXTRA_PROCESS_TEXT_READONLY + static const EXTRA_PROCESS_TEXT_READONLY = + "android.intent.extra.PROCESS_TEXT_READONLY"; + + /// from: static public final java.lang.String EXTRA_QUICK_VIEW_FEATURES + static const EXTRA_QUICK_VIEW_FEATURES = + "android.intent.extra.QUICK_VIEW_FEATURES"; + + /// from: static public final java.lang.String EXTRA_QUIET_MODE + static const EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE"; + + /// from: static public final java.lang.String EXTRA_REFERRER + static const EXTRA_REFERRER = "android.intent.extra.REFERRER"; + + /// from: static public final java.lang.String EXTRA_REFERRER_NAME + static const EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; + + /// from: static public final java.lang.String EXTRA_REMOTE_INTENT_TOKEN + static const EXTRA_REMOTE_INTENT_TOKEN = + "android.intent.extra.remote_intent_token"; + + /// from: static public final java.lang.String EXTRA_REPLACEMENT_EXTRAS + static const EXTRA_REPLACEMENT_EXTRAS = + "android.intent.extra.REPLACEMENT_EXTRAS"; + + /// from: static public final java.lang.String EXTRA_REPLACING + static const EXTRA_REPLACING = "android.intent.extra.REPLACING"; + + /// from: static public final java.lang.String EXTRA_RESTRICTIONS_BUNDLE + static const EXTRA_RESTRICTIONS_BUNDLE = + "android.intent.extra.restrictions_bundle"; + + /// from: static public final java.lang.String EXTRA_RESTRICTIONS_INTENT + static const EXTRA_RESTRICTIONS_INTENT = + "android.intent.extra.restrictions_intent"; + + /// from: static public final java.lang.String EXTRA_RESTRICTIONS_LIST + static const EXTRA_RESTRICTIONS_LIST = + "android.intent.extra.restrictions_list"; + + /// from: static public final java.lang.String EXTRA_RESULT_RECEIVER + static const EXTRA_RESULT_RECEIVER = "android.intent.extra.RESULT_RECEIVER"; + + /// from: static public final java.lang.String EXTRA_RETURN_RESULT + static const EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT"; + + /// from: static public final java.lang.String EXTRA_SHORTCUT_ICON + static const EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON"; + + /// from: static public final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE + static const EXTRA_SHORTCUT_ICON_RESOURCE = + "android.intent.extra.shortcut.ICON_RESOURCE"; + + /// from: static public final java.lang.String EXTRA_SHORTCUT_ID + static const EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID"; + + /// from: static public final java.lang.String EXTRA_SHORTCUT_INTENT + static const EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT"; + + /// from: static public final java.lang.String EXTRA_SHORTCUT_NAME + static const EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME"; + + /// from: static public final java.lang.String EXTRA_SHUTDOWN_USERSPACE_ONLY + static const EXTRA_SHUTDOWN_USERSPACE_ONLY = + "android.intent.extra.SHUTDOWN_USERSPACE_ONLY"; + + /// from: static public final java.lang.String EXTRA_SPLIT_NAME + static const EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME"; + + /// from: static public final java.lang.String EXTRA_START_TIME + static const EXTRA_START_TIME = "android.intent.extra.START_TIME"; + + /// from: static public final java.lang.String EXTRA_STREAM + static const EXTRA_STREAM = "android.intent.extra.STREAM"; + + /// from: static public final java.lang.String EXTRA_SUBJECT + static const EXTRA_SUBJECT = "android.intent.extra.SUBJECT"; + + /// from: static public final java.lang.String EXTRA_SUSPENDED_PACKAGE_EXTRAS + static const EXTRA_SUSPENDED_PACKAGE_EXTRAS = + "android.intent.extra.SUSPENDED_PACKAGE_EXTRAS"; + + /// from: static public final java.lang.String EXTRA_TEMPLATE + static const EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE"; + + /// from: static public final java.lang.String EXTRA_TEXT + static const EXTRA_TEXT = "android.intent.extra.TEXT"; + + /// from: static public final java.lang.String EXTRA_TIME + static const EXTRA_TIME = "android.intent.extra.TIME"; + + /// from: static public final java.lang.String EXTRA_TIMEZONE + static const EXTRA_TIMEZONE = "time-zone"; + + /// from: static public final java.lang.String EXTRA_TITLE + static const EXTRA_TITLE = "android.intent.extra.TITLE"; + + /// from: static public final java.lang.String EXTRA_UID + static const EXTRA_UID = "android.intent.extra.UID"; + + /// from: static public final java.lang.String EXTRA_USER + static const EXTRA_USER = "android.intent.extra.USER"; + + /// from: static public final java.lang.String EXTRA_USER_INITIATED + static const EXTRA_USER_INITIATED = "android.intent.extra.USER_INITIATED"; + + /// from: static public final int FILL_IN_ACTION + static const FILL_IN_ACTION = 1; + + /// from: static public final int FILL_IN_CATEGORIES + static const FILL_IN_CATEGORIES = 4; + + /// from: static public final int FILL_IN_CLIP_DATA + static const FILL_IN_CLIP_DATA = 128; + + /// from: static public final int FILL_IN_COMPONENT + static const FILL_IN_COMPONENT = 8; + + /// from: static public final int FILL_IN_DATA + static const FILL_IN_DATA = 2; + + /// from: static public final int FILL_IN_IDENTIFIER + static const FILL_IN_IDENTIFIER = 256; + + /// from: static public final int FILL_IN_PACKAGE + static const FILL_IN_PACKAGE = 16; + + /// from: static public final int FILL_IN_SELECTOR + static const FILL_IN_SELECTOR = 64; + + /// from: static public final int FILL_IN_SOURCE_BOUNDS + static const FILL_IN_SOURCE_BOUNDS = 32; + + /// from: static public final int FLAG_ACTIVITY_BROUGHT_TO_FRONT + static const FLAG_ACTIVITY_BROUGHT_TO_FRONT = 4194304; + + /// from: static public final int FLAG_ACTIVITY_CLEAR_TASK + static const FLAG_ACTIVITY_CLEAR_TASK = 32768; + + /// from: static public final int FLAG_ACTIVITY_CLEAR_TOP + static const FLAG_ACTIVITY_CLEAR_TOP = 67108864; + + /// from: static public final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET + static const FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288; + + /// from: static public final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS + static const FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 8388608; + + /// from: static public final int FLAG_ACTIVITY_FORWARD_RESULT + static const FLAG_ACTIVITY_FORWARD_RESULT = 33554432; + + /// from: static public final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY + static const FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576; + + /// from: static public final int FLAG_ACTIVITY_LAUNCH_ADJACENT + static const FLAG_ACTIVITY_LAUNCH_ADJACENT = 4096; + + /// from: static public final int FLAG_ACTIVITY_MATCH_EXTERNAL + static const FLAG_ACTIVITY_MATCH_EXTERNAL = 2048; + + /// from: static public final int FLAG_ACTIVITY_MULTIPLE_TASK + static const FLAG_ACTIVITY_MULTIPLE_TASK = 134217728; + + /// from: static public final int FLAG_ACTIVITY_NEW_DOCUMENT + static const FLAG_ACTIVITY_NEW_DOCUMENT = 524288; + + /// from: static public final int FLAG_ACTIVITY_NEW_TASK + static const FLAG_ACTIVITY_NEW_TASK = 268435456; + + /// from: static public final int FLAG_ACTIVITY_NO_ANIMATION + static const FLAG_ACTIVITY_NO_ANIMATION = 65536; + + /// from: static public final int FLAG_ACTIVITY_NO_HISTORY + static const FLAG_ACTIVITY_NO_HISTORY = 1073741824; + + /// from: static public final int FLAG_ACTIVITY_NO_USER_ACTION + static const FLAG_ACTIVITY_NO_USER_ACTION = 262144; + + /// from: static public final int FLAG_ACTIVITY_PREVIOUS_IS_TOP + static const FLAG_ACTIVITY_PREVIOUS_IS_TOP = 16777216; + + /// from: static public final int FLAG_ACTIVITY_REORDER_TO_FRONT + static const FLAG_ACTIVITY_REORDER_TO_FRONT = 131072; + + /// from: static public final int FLAG_ACTIVITY_REQUIRE_DEFAULT + static const FLAG_ACTIVITY_REQUIRE_DEFAULT = 512; + + /// from: static public final int FLAG_ACTIVITY_REQUIRE_NON_BROWSER + static const FLAG_ACTIVITY_REQUIRE_NON_BROWSER = 1024; + + /// from: static public final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED + static const FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 2097152; + + /// from: static public final int FLAG_ACTIVITY_RETAIN_IN_RECENTS + static const FLAG_ACTIVITY_RETAIN_IN_RECENTS = 8192; + + /// from: static public final int FLAG_ACTIVITY_SINGLE_TOP + static const FLAG_ACTIVITY_SINGLE_TOP = 536870912; + + /// from: static public final int FLAG_ACTIVITY_TASK_ON_HOME + static const FLAG_ACTIVITY_TASK_ON_HOME = 16384; + + /// from: static public final int FLAG_DEBUG_LOG_RESOLUTION + static const FLAG_DEBUG_LOG_RESOLUTION = 8; + + /// from: static public final int FLAG_DIRECT_BOOT_AUTO + static const FLAG_DIRECT_BOOT_AUTO = 256; + + /// from: static public final int FLAG_EXCLUDE_STOPPED_PACKAGES + static const FLAG_EXCLUDE_STOPPED_PACKAGES = 16; + + /// from: static public final int FLAG_FROM_BACKGROUND + static const FLAG_FROM_BACKGROUND = 4; + + /// from: static public final int FLAG_GRANT_PERSISTABLE_URI_PERMISSION + static const FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 64; + + /// from: static public final int FLAG_GRANT_PREFIX_URI_PERMISSION + static const FLAG_GRANT_PREFIX_URI_PERMISSION = 128; + + /// from: static public final int FLAG_GRANT_READ_URI_PERMISSION + static const FLAG_GRANT_READ_URI_PERMISSION = 1; + + /// from: static public final int FLAG_GRANT_WRITE_URI_PERMISSION + static const FLAG_GRANT_WRITE_URI_PERMISSION = 2; + + /// from: static public final int FLAG_INCLUDE_STOPPED_PACKAGES + static const FLAG_INCLUDE_STOPPED_PACKAGES = 32; + + /// from: static public final int FLAG_RECEIVER_FOREGROUND + static const FLAG_RECEIVER_FOREGROUND = 268435456; + + /// from: static public final int FLAG_RECEIVER_NO_ABORT + static const FLAG_RECEIVER_NO_ABORT = 134217728; + + /// from: static public final int FLAG_RECEIVER_REGISTERED_ONLY + static const FLAG_RECEIVER_REGISTERED_ONLY = 1073741824; + + /// from: static public final int FLAG_RECEIVER_REPLACE_PENDING + static const FLAG_RECEIVER_REPLACE_PENDING = 536870912; + + /// from: static public final int FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS + static const FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS = 2097152; + + /// from: static public final java.lang.String METADATA_DOCK_HOME + static const METADATA_DOCK_HOME = "android.dock_home"; + + /// from: static public final int URI_ALLOW_UNSAFE + static const URI_ALLOW_UNSAFE = 4; + + /// from: static public final int URI_ANDROID_APP_SCHEME + static const URI_ANDROID_APP_SCHEME = 2; + + /// from: static public final int URI_INTENT_SCHEME + static const URI_INTENT_SCHEME = 1; + + static final _ctor = + jniLookup>("Intent__ctor") + .asFunction(); + + /// from: public void () + Intent() : super.fromRef(_ctor().object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Intent__ctor1") + .asFunction)>(); + + /// from: public void (android.content.Intent intent) + Intent.ctor1(Intent intent) : super.fromRef(_ctor1(intent.reference).object); + + static final _ctor2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Intent__ctor2") + .asFunction)>(); + + /// from: public void (java.lang.String string) + Intent.ctor2(jni.JString string) + : super.fromRef(_ctor2(string.reference).object); + + static final _ctor3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__ctor3") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (java.lang.String string, android.net.Uri uri) + Intent.ctor3(jni.JString string, jni.JObject uri) + : super.fromRef(_ctor3(string.reference, uri.reference).object); + + static final _ctor4 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__ctor4") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (android.content.Context context, java.lang.Class class) + Intent.ctor4(Context context, jni.JObject class0) + : super.fromRef(_ctor4(context.reference, class0.reference).object); + + static final _ctor5 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__ctor5") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (java.lang.String string, android.net.Uri uri, android.content.Context context, java.lang.Class class) + Intent.ctor5( + jni.JString string, jni.JObject uri, Context context, jni.JObject class0) + : super.fromRef(_ctor5(string.reference, uri.reference, context.reference, + class0.reference) + .object); + + static final _createChooser = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__createChooser") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public android.content.Intent createChooser(android.content.Intent intent, java.lang.CharSequence charSequence) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent createChooser(Intent intent, jni.JObject charSequence) => + const $IntentType().fromRef( + _createChooser(intent.reference, charSequence.reference).object); + + static final _createChooser1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__createChooser1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public android.content.Intent createChooser(android.content.Intent intent, java.lang.CharSequence charSequence, android.content.IntentSender intentSender) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent createChooser1( + Intent intent, jni.JObject charSequence, jni.JObject intentSender) => + const $IntentType().fromRef(_createChooser1( + intent.reference, charSequence.reference, intentSender.reference) + .object); + + static final _clone = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Intent__clone") + .asFunction)>(); + + /// from: public java.lang.Object clone() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject clone() => + const jni.JObjectType().fromRef(_clone(reference).object); + + static final _cloneFilter = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__cloneFilter") + .asFunction)>(); + + /// from: public android.content.Intent cloneFilter() + /// The returned object must be deleted after use, by calling the `delete` method. + Intent cloneFilter() => + const $IntentType().fromRef(_cloneFilter(reference).object); + + static final _makeMainActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__makeMainActivity") + .asFunction)>(); + + /// from: static public android.content.Intent makeMainActivity(android.content.ComponentName componentName) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent makeMainActivity(jni.JObject componentName) => + const $IntentType() + .fromRef(_makeMainActivity(componentName.reference).object); + + static final _makeMainSelectorActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__makeMainSelectorActivity") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public android.content.Intent makeMainSelectorActivity(java.lang.String string, java.lang.String string1) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent makeMainSelectorActivity( + jni.JString string, jni.JString string1) => + const $IntentType().fromRef( + _makeMainSelectorActivity(string.reference, string1.reference) + .object); + + static final _makeRestartActivityTask = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__makeRestartActivityTask") + .asFunction)>(); + + /// from: static public android.content.Intent makeRestartActivityTask(android.content.ComponentName componentName) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent makeRestartActivityTask(jni.JObject componentName) => + const $IntentType() + .fromRef(_makeRestartActivityTask(componentName.reference).object); + + static final _getIntent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getIntent") + .asFunction)>(); + + /// from: static public android.content.Intent getIntent(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent getIntent(jni.JString string) => + const $IntentType().fromRef(_getIntent(string.reference).object); + + static final _parseUri = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Intent__parseUri") + .asFunction, int)>(); + + /// from: static public android.content.Intent parseUri(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent parseUri(jni.JString string, int i) => + const $IntentType().fromRef(_parseUri(string.reference, i).object); + + static final _getIntentOld = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getIntentOld") + .asFunction)>(); + + /// from: static public android.content.Intent getIntentOld(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent getIntentOld(jni.JString string) => + const $IntentType().fromRef(_getIntentOld(string.reference).object); + + static final _getAction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getAction") + .asFunction)>(); + + /// from: public java.lang.String getAction() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getAction() => + const jni.JStringType().fromRef(_getAction(reference).object); + + static final _getData = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Intent__getData") + .asFunction)>(); + + /// from: public android.net.Uri getData() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getData() => + const jni.JObjectType().fromRef(_getData(reference).object); + + static final _getDataString = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getDataString") + .asFunction)>(); + + /// from: public java.lang.String getDataString() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getDataString() => + const jni.JStringType().fromRef(_getDataString(reference).object); + + static final _getScheme = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getScheme") + .asFunction)>(); + + /// from: public java.lang.String getScheme() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getScheme() => + const jni.JStringType().fromRef(_getScheme(reference).object); + + static final _getType = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Intent__getType") + .asFunction)>(); + + /// from: public java.lang.String getType() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getType() => + const jni.JStringType().fromRef(_getType(reference).object); + + static final _resolveType = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__resolveType") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.String resolveType(android.content.Context context) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString resolveType(Context context) => const jni.JStringType() + .fromRef(_resolveType(reference, context.reference).object); + + static final _resolveType1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__resolveType1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.String resolveType(android.content.ContentResolver contentResolver) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString resolveType1(jni.JObject contentResolver) => + const jni.JStringType() + .fromRef(_resolveType1(reference, contentResolver.reference).object); + + static final _resolveTypeIfNeeded = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__resolveTypeIfNeeded") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.String resolveTypeIfNeeded(android.content.ContentResolver contentResolver) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString resolveTypeIfNeeded(jni.JObject contentResolver) => + const jni.JStringType().fromRef( + _resolveTypeIfNeeded(reference, contentResolver.reference).object); + + static final _getIdentifier = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getIdentifier") + .asFunction)>(); + + /// from: public java.lang.String getIdentifier() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getIdentifier() => + const jni.JStringType().fromRef(_getIdentifier(reference).object); + + static final _hasCategory = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__hasCategory") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean hasCategory(java.lang.String string) + bool hasCategory(jni.JString string) => + _hasCategory(reference, string.reference).boolean; + + static final _getCategories = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getCategories") + .asFunction)>(); + + /// from: public java.util.Set getCategories() + /// The returned object must be deleted after use, by calling the `delete` method. + Set getCategories() => const $SetType(jni.JStringType()) + .fromRef(_getCategories(reference).object); + + static final _getSelector = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getSelector") + .asFunction)>(); + + /// from: public android.content.Intent getSelector() + /// The returned object must be deleted after use, by calling the `delete` method. + Intent getSelector() => + const $IntentType().fromRef(_getSelector(reference).object); + + static final _getClipData = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getClipData") + .asFunction)>(); + + /// from: public android.content.ClipData getClipData() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getClipData() => + const jni.JObjectType().fromRef(_getClipData(reference).object); + + static final _setExtrasClassLoader = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setExtrasClassLoader") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setExtrasClassLoader(java.lang.ClassLoader classLoader) + void setExtrasClassLoader(jni.JObject classLoader) => + _setExtrasClassLoader(reference, classLoader.reference).check(); + + static final _hasExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__hasExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean hasExtra(java.lang.String string) + bool hasExtra(jni.JString string) => + _hasExtra(reference, string.reference).boolean; + + static final _hasFileDescriptors = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__hasFileDescriptors") + .asFunction)>(); + + /// from: public boolean hasFileDescriptors() + bool hasFileDescriptors() => _hasFileDescriptors(reference).boolean; + + static final _getBooleanExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Uint8)>>("Intent__getBooleanExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public boolean getBooleanExtra(java.lang.String string, boolean z) + bool getBooleanExtra(jni.JString string, bool z) => + _getBooleanExtra(reference, string.reference, z ? 1 : 0).boolean; + + static final _getByteExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int8)>>("Intent__getByteExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public byte getByteExtra(java.lang.String string, byte b) + int getByteExtra(jni.JString string, int b) => + _getByteExtra(reference, string.reference, b).byte; + + static final _getShortExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int16)>>("Intent__getShortExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public short getShortExtra(java.lang.String string, short s) + int getShortExtra(jni.JString string, int s) => + _getShortExtra(reference, string.reference, s).short; + + static final _getCharExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Uint16)>>("Intent__getCharExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public char getCharExtra(java.lang.String string, char c) + int getCharExtra(jni.JString string, int c) => + _getCharExtra(reference, string.reference, c).char; + + static final _getIntExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>("Intent__getIntExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public int getIntExtra(java.lang.String string, int i) + int getIntExtra(jni.JString string, int i) => + _getIntExtra(reference, string.reference, i).integer; + + static final _getLongExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int64)>>("Intent__getLongExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public long getLongExtra(java.lang.String string, long j) + int getLongExtra(jni.JString string, int j) => + _getLongExtra(reference, string.reference, j).long; + + static final _getFloatExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Float)>>("Intent__getFloatExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, double)>(); + + /// from: public float getFloatExtra(java.lang.String string, float f) + double getFloatExtra(jni.JString string, double f) => + _getFloatExtra(reference, string.reference, f).float; + + static final _getDoubleExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Double)>>("Intent__getDoubleExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, double)>(); + + /// from: public double getDoubleExtra(java.lang.String string, double d) + double getDoubleExtra(jni.JString string, double d) => + _getDoubleExtra(reference, string.reference, d).doubleFloat; + + static final _getStringExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getStringExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.String getStringExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getStringExtra(jni.JString string) => const jni.JStringType() + .fromRef(_getStringExtra(reference, string.reference).object); + + static final _getCharSequenceExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getCharSequenceExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.CharSequence getCharSequenceExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getCharSequenceExtra(jni.JString string) => + const jni.JObjectType() + .fromRef(_getCharSequenceExtra(reference, string.reference).object); + + static final _getParcelableExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getParcelableExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public T getParcelableExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + T getParcelableExtra( + jni.JObjType $T, jni.JString string) => + $T.fromRef(_getParcelableExtra(reference, string.reference).object); + + static final _getParcelableExtra1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__getParcelableExtra1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public T getParcelableExtra(java.lang.String string, java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + T getParcelableExtra1( + jni.JObjType $T, jni.JString string, jni.JObject class0) => + $T.fromRef( + _getParcelableExtra1(reference, string.reference, class0.reference) + .object); + + static final _getParcelableArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getParcelableArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.os.Parcelable[] getParcelableArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getParcelableArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JObjectType()).fromRef( + _getParcelableArrayExtra(reference, string.reference).object); + + static final _getParcelableArrayExtra1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__getParcelableArrayExtra1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public java.lang.Object[] getParcelableArrayExtra(java.lang.String string, java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getParcelableArrayExtra1( + jni.JObjType $T, jni.JString string, jni.JObject class0) => + jni.JArrayType($T).fromRef(_getParcelableArrayExtra1( + reference, string.reference, class0.reference) + .object); + + static final _getParcelableArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Intent__getParcelableArrayListExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.util.ArrayList getParcelableArrayListExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getParcelableArrayListExtra( + jni.JObjType $T, jni.JString string) => + const jni.JObjectType().fromRef( + _getParcelableArrayListExtra(reference, string.reference).object); + + static final _getParcelableArrayListExtra1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Intent__getParcelableArrayListExtra1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public java.util.ArrayList getParcelableArrayListExtra(java.lang.String string, java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getParcelableArrayListExtra1( + jni.JObjType $T, jni.JString string, jni.JObject class0) => + const jni.JObjectType().fromRef(_getParcelableArrayListExtra1( + reference, string.reference, class0.reference) + .object); + + static final _getSerializableExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getSerializableExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.io.Serializable getSerializableExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSerializableExtra(jni.JString string) => + const jni.JObjectType() + .fromRef(_getSerializableExtra(reference, string.reference).object); + + static final _getSerializableExtra1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__getSerializableExtra1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public T getSerializableExtra(java.lang.String string, java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + T getSerializableExtra1( + jni.JObjType $T, jni.JString string, jni.JObject class0) => + $T.fromRef( + _getSerializableExtra1(reference, string.reference, class0.reference) + .object); + + static final _getIntegerArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getIntegerArrayListExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.util.ArrayList getIntegerArrayListExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getIntegerArrayListExtra(jni.JString string) => + const jni.JObjectType().fromRef( + _getIntegerArrayListExtra(reference, string.reference).object); + + static final _getStringArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getStringArrayListExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.util.ArrayList getStringArrayListExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getStringArrayListExtra(jni.JString string) => + const jni.JObjectType().fromRef( + _getStringArrayListExtra(reference, string.reference).object); + + static final _getCharSequenceArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Intent__getCharSequenceArrayListExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.util.ArrayList getCharSequenceArrayListExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getCharSequenceArrayListExtra(jni.JString string) => + const jni.JObjectType().fromRef( + _getCharSequenceArrayListExtra(reference, string.reference).object); + + static final _getBooleanArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getBooleanArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean[] getBooleanArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getBooleanArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JBooleanType()) + .fromRef(_getBooleanArrayExtra(reference, string.reference).object); + + static final _getByteArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getByteArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public byte[] getByteArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getByteArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JByteType()) + .fromRef(_getByteArrayExtra(reference, string.reference).object); + + static final _getShortArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getShortArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public short[] getShortArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getShortArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JShortType()) + .fromRef(_getShortArrayExtra(reference, string.reference).object); + + static final _getCharArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getCharArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public char[] getCharArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getCharArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JCharType()) + .fromRef(_getCharArrayExtra(reference, string.reference).object); + + static final _getIntArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getIntArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public int[] getIntArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getIntArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JIntType()) + .fromRef(_getIntArrayExtra(reference, string.reference).object); + + static final _getLongArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getLongArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public long[] getLongArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getLongArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JLongType()) + .fromRef(_getLongArrayExtra(reference, string.reference).object); + + static final _getFloatArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getFloatArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public float[] getFloatArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getFloatArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JFloatType()) + .fromRef(_getFloatArrayExtra(reference, string.reference).object); + + static final _getDoubleArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getDoubleArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public double[] getDoubleArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getDoubleArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JDoubleType()) + .fromRef(_getDoubleArrayExtra(reference, string.reference).object); + + static final _getStringArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getStringArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.String[] getStringArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getStringArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JStringType()) + .fromRef(_getStringArrayExtra(reference, string.reference).object); + + static final _getCharSequenceArrayExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getCharSequenceArrayExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.CharSequence[] getCharSequenceArrayExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray getCharSequenceArrayExtra(jni.JString string) => + const jni.JArrayType(jni.JObjectType()).fromRef( + _getCharSequenceArrayExtra(reference, string.reference).object); + + static final _getBundleExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__getBundleExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.os.Bundle getBundleExtra(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getBundleExtra(jni.JString string) => const jni.JObjectType() + .fromRef(_getBundleExtra(reference, string.reference).object); + + static final _getExtras = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getExtras") + .asFunction)>(); + + /// from: public android.os.Bundle getExtras() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getExtras() => + const jni.JObjectType().fromRef(_getExtras(reference).object); + + static final _getFlags = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getFlags") + .asFunction)>(); + + /// from: public int getFlags() + int getFlags() => _getFlags(reference).integer; + + static final _getPackage = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getPackage") + .asFunction)>(); + + /// from: public java.lang.String getPackage() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getPackage() => + const jni.JStringType().fromRef(_getPackage(reference).object); + + static final _getComponent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getComponent") + .asFunction)>(); + + /// from: public android.content.ComponentName getComponent() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getComponent() => + const jni.JObjectType().fromRef(_getComponent(reference).object); + + static final _getSourceBounds = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__getSourceBounds") + .asFunction)>(); + + /// from: public android.graphics.Rect getSourceBounds() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSourceBounds() => + const jni.JObjectType().fromRef(_getSourceBounds(reference).object); + + static final _resolveActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__resolveActivity") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.ComponentName resolveActivity(android.content.pm.PackageManager packageManager) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject resolveActivity(jni.JObject packageManager) => + const jni.JObjectType().fromRef( + _resolveActivity(reference, packageManager.reference).object); + + static final _resolveActivityInfo = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Intent__resolveActivityInfo") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.pm.ActivityInfo resolveActivityInfo(android.content.pm.PackageManager packageManager, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject resolveActivityInfo(jni.JObject packageManager, int i) => + const jni.JObjectType().fromRef( + _resolveActivityInfo(reference, packageManager.reference, i).object); + + static final _setAction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setAction") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setAction(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setAction(jni.JString string) => const $IntentType() + .fromRef(_setAction(reference, string.reference).object); + + static final _setData = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setData") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setData(android.net.Uri uri) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setData(jni.JObject uri) => + const $IntentType().fromRef(_setData(reference, uri.reference).object); + + static final _setDataAndNormalize = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setDataAndNormalize") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setDataAndNormalize(android.net.Uri uri) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setDataAndNormalize(jni.JObject uri) => const $IntentType() + .fromRef(_setDataAndNormalize(reference, uri.reference).object); + + static final _setType = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setType") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setType(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setType(jni.JString string) => + const $IntentType().fromRef(_setType(reference, string.reference).object); + + static final _setTypeAndNormalize = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setTypeAndNormalize") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setTypeAndNormalize(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setTypeAndNormalize(jni.JString string) => const $IntentType() + .fromRef(_setTypeAndNormalize(reference, string.reference).object); + + static final _setDataAndType = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__setDataAndType") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent setDataAndType(android.net.Uri uri, java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setDataAndType(jni.JObject uri, jni.JString string) => + const $IntentType().fromRef( + _setDataAndType(reference, uri.reference, string.reference).object); + + static final _setDataAndTypeAndNormalize = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__setDataAndTypeAndNormalize") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent setDataAndTypeAndNormalize(android.net.Uri uri, java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setDataAndTypeAndNormalize(jni.JObject uri, jni.JString string) => + const $IntentType().fromRef(_setDataAndTypeAndNormalize( + reference, uri.reference, string.reference) + .object); + + static final _setIdentifier = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setIdentifier") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setIdentifier(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setIdentifier(jni.JString string) => const $IntentType() + .fromRef(_setIdentifier(reference, string.reference).object); + + static final _addCategory = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__addCategory") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent addCategory(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent addCategory(jni.JString string) => const $IntentType() + .fromRef(_addCategory(reference, string.reference).object); + + static final _removeCategory = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__removeCategory") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void removeCategory(java.lang.String string) + void removeCategory(jni.JString string) => + _removeCategory(reference, string.reference).check(); + + static final _setSelector = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setSelector") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setSelector(android.content.Intent intent) + void setSelector(Intent intent) => + _setSelector(reference, intent.reference).check(); + + static final _setClipData = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setClipData") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setClipData(android.content.ClipData clipData) + void setClipData(jni.JObject clipData) => + _setClipData(reference, clipData.reference).check(); + + static final _putExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Uint8)>>("Intent__putExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, boolean z) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra(jni.JString string, bool z) => const $IntentType() + .fromRef(_putExtra(reference, string.reference, z ? 1 : 0).object); + + static final _putExtra1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int8)>>("Intent__putExtra1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, byte b) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra1(jni.JString string, int b) => const $IntentType() + .fromRef(_putExtra1(reference, string.reference, b).object); + + static final _putExtra2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Uint16)>>("Intent__putExtra2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, char c) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra2(jni.JString string, int c) => const $IntentType() + .fromRef(_putExtra2(reference, string.reference, c).object); + + static final _putExtra3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int16)>>("Intent__putExtra3") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, short s) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra3(jni.JString string, int s) => const $IntentType() + .fromRef(_putExtra3(reference, string.reference, s).object); + + static final _putExtra4 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>("Intent__putExtra4") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra4(jni.JString string, int i) => const $IntentType() + .fromRef(_putExtra4(reference, string.reference, i).object); + + static final _putExtra5 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int64)>>("Intent__putExtra5") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra5(jni.JString string, int j) => const $IntentType() + .fromRef(_putExtra5(reference, string.reference, j).object); + + static final _putExtra6 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Float)>>("Intent__putExtra6") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, double)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, float f) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra6(jni.JString string, double f) => const $IntentType() + .fromRef(_putExtra6(reference, string.reference, f).object); + + static final _putExtra7 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Double)>>("Intent__putExtra7") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, double)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, double d) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra7(jni.JString string, double d) => const $IntentType() + .fromRef(_putExtra7(reference, string.reference, d).object); + + static final _putExtra8 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra8") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.String string1) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra8(jni.JString string, jni.JString string1) => + const $IntentType().fromRef( + _putExtra8(reference, string.reference, string1.reference).object); + + static final _putExtra9 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra9") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.CharSequence charSequence) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra9(jni.JString string, jni.JObject charSequence) => + const $IntentType().fromRef( + _putExtra9(reference, string.reference, charSequence.reference) + .object); + + static final _putExtra10 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra10") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, android.os.Parcelable parcelable) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra10(jni.JString string, jni.JObject parcelable) => + const $IntentType().fromRef( + _putExtra10(reference, string.reference, parcelable.reference) + .object); + + static final _putExtra11 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra11") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, android.os.Parcelable[] parcelables) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra11(jni.JString string, jni.JArray parcelables) => + const $IntentType().fromRef( + _putExtra11(reference, string.reference, parcelables.reference) + .object); + + static final _putParcelableArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Intent__putParcelableArrayListExtra") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putParcelableArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putParcelableArrayListExtra( + jni.JString string, jni.JObject arrayList) => + const $IntentType().fromRef(_putParcelableArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + + static final _putIntegerArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putIntegerArrayListExtra") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putIntegerArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putIntegerArrayListExtra(jni.JString string, jni.JObject arrayList) => + const $IntentType().fromRef(_putIntegerArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + + static final _putStringArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putStringArrayListExtra") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putStringArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putStringArrayListExtra(jni.JString string, jni.JObject arrayList) => + const $IntentType().fromRef(_putStringArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + + static final _putCharSequenceArrayListExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Intent__putCharSequenceArrayListExtra") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putCharSequenceArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putCharSequenceArrayListExtra( + jni.JString string, jni.JObject arrayList) => + const $IntentType().fromRef(_putCharSequenceArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + + static final _putExtra12 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra12") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, java.io.Serializable serializable) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra12(jni.JString string, jni.JObject serializable) => + const $IntentType().fromRef( + _putExtra12(reference, string.reference, serializable.reference) + .object); + + static final _putExtra13 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra13") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, boolean[] zs) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra13(jni.JString string, jni.JArray zs) => + const $IntentType().fromRef( + _putExtra13(reference, string.reference, zs.reference).object); + + static final _putExtra14 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra14") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, byte[] bs) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra14(jni.JString string, jni.JArray bs) => + const $IntentType().fromRef( + _putExtra14(reference, string.reference, bs.reference).object); + + static final _putExtra15 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra15") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, short[] ss) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra15(jni.JString string, jni.JArray ss) => + const $IntentType().fromRef( + _putExtra15(reference, string.reference, ss.reference).object); + + static final _putExtra16 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra16") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, char[] cs) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra16(jni.JString string, jni.JArray cs) => + const $IntentType().fromRef( + _putExtra16(reference, string.reference, cs.reference).object); + + static final _putExtra17 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra17") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, int[] is) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra17(jni.JString string, jni.JArray is0) => + const $IntentType().fromRef( + _putExtra17(reference, string.reference, is0.reference).object); + + static final _putExtra18 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra18") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, long[] js) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra18(jni.JString string, jni.JArray js) => + const $IntentType().fromRef( + _putExtra18(reference, string.reference, js.reference).object); + + static final _putExtra19 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra19") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, float[] fs) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra19(jni.JString string, jni.JArray fs) => + const $IntentType().fromRef( + _putExtra19(reference, string.reference, fs.reference).object); + + static final _putExtra20 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra20") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, double[] ds) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra20(jni.JString string, jni.JArray ds) => + const $IntentType().fromRef( + _putExtra20(reference, string.reference, ds.reference).object); + + static final _putExtra21 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra21") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.String[] strings) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra21(jni.JString string, jni.JArray strings) => + const $IntentType().fromRef( + _putExtra21(reference, string.reference, strings.reference).object); + + static final _putExtra22 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra22") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.CharSequence[] charSequences) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra22( + jni.JString string, jni.JArray charSequences) => + const $IntentType().fromRef( + _putExtra22(reference, string.reference, charSequences.reference) + .object); + + static final _putExtra23 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__putExtra23") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent putExtra(java.lang.String string, android.os.Bundle bundle) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtra23(jni.JString string, jni.JObject bundle) => + const $IntentType().fromRef( + _putExtra23(reference, string.reference, bundle.reference).object); + + static final _putExtras = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__putExtras") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent putExtras(android.content.Intent intent) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtras(Intent intent) => const $IntentType() + .fromRef(_putExtras(reference, intent.reference).object); + + static final _putExtras1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__putExtras1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent putExtras(android.os.Bundle bundle) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent putExtras1(jni.JObject bundle) => const $IntentType() + .fromRef(_putExtras1(reference, bundle.reference).object); + + static final _replaceExtras = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__replaceExtras") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent replaceExtras(android.content.Intent intent) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent replaceExtras(Intent intent) => const $IntentType() + .fromRef(_replaceExtras(reference, intent.reference).object); + + static final _replaceExtras1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__replaceExtras1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent replaceExtras(android.os.Bundle bundle) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent replaceExtras1(jni.JObject bundle) => const $IntentType() + .fromRef(_replaceExtras1(reference, bundle.reference).object); + + static final _removeExtra = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__removeExtra") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void removeExtra(java.lang.String string) + void removeExtra(jni.JString string) => + _removeExtra(reference, string.reference).check(); + + static final _setFlags = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Intent__setFlags") + .asFunction, int)>(); + + /// from: public android.content.Intent setFlags(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setFlags(int i) => + const $IntentType().fromRef(_setFlags(reference, i).object); + + static final _addFlags = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Intent__addFlags") + .asFunction, int)>(); + + /// from: public android.content.Intent addFlags(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent addFlags(int i) => + const $IntentType().fromRef(_addFlags(reference, i).object); + + static final _removeFlags = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Intent__removeFlags") + .asFunction, int)>(); + + /// from: public void removeFlags(int i) + void removeFlags(int i) => _removeFlags(reference, i).check(); + + static final _setPackage = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setPackage") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setPackage(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setPackage(jni.JString string) => const $IntentType() + .fromRef(_setPackage(reference, string.reference).object); + + static final _setComponent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setComponent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.content.Intent setComponent(android.content.ComponentName componentName) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setComponent(jni.JObject componentName) => const $IntentType() + .fromRef(_setComponent(reference, componentName.reference).object); + + static final _setClassName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__setClassName") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent setClassName(android.content.Context context, java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setClassName(Context context, jni.JString string) => + const $IntentType().fromRef( + _setClassName(reference, context.reference, string.reference).object); + + static final _setClassName1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__setClassName1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent setClassName(java.lang.String string, java.lang.String string1) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setClassName1(jni.JString string, jni.JString string1) => + const $IntentType().fromRef( + _setClassName1(reference, string.reference, string1.reference) + .object); + + static final _setClass = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__setClass") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.content.Intent setClass(android.content.Context context, java.lang.Class class) + /// The returned object must be deleted after use, by calling the `delete` method. + Intent setClass(Context context, jni.JObject class0) => + const $IntentType().fromRef( + _setClass(reference, context.reference, class0.reference).object); + + static final _setSourceBounds = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__setSourceBounds") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setSourceBounds(android.graphics.Rect rect) + void setSourceBounds(jni.JObject rect) => + _setSourceBounds(reference, rect.reference).check(); + + static final _fillIn = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>("Intent__fillIn") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public int fillIn(android.content.Intent intent, int i) + int fillIn(Intent intent, int i) => + _fillIn(reference, intent.reference, i).integer; + + static final _filterEquals = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__filterEquals") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean filterEquals(android.content.Intent intent) + bool filterEquals(Intent intent) => + _filterEquals(reference, intent.reference).boolean; + + static final _filterHashCode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__filterHashCode") + .asFunction)>(); + + /// from: public int filterHashCode() + int filterHashCode() => _filterHashCode(reference).integer; + + static final _toString1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__toString1") + .asFunction)>(); + + /// from: public java.lang.String toString() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString toString1() => + const jni.JStringType().fromRef(_toString1(reference).object); + + static final _toURI = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Intent__toURI") + .asFunction)>(); + + /// from: public java.lang.String toURI() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString toURI() => + const jni.JStringType().fromRef(_toURI(reference).object); + + static final _toUri = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Intent__toUri") + .asFunction, int)>(); + + /// from: public java.lang.String toUri(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString toUri(int i) => + const jni.JStringType().fromRef(_toUri(reference, i).object); + + static final _describeContents = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__describeContents") + .asFunction)>(); + + /// from: public int describeContents() + int describeContents() => _describeContents(reference).integer; + + static final _writeToParcel = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>("Intent__writeToParcel") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public void writeToParcel(android.os.Parcel parcel, int i) + void writeToParcel(jni.JObject parcel, int i) => + _writeToParcel(reference, parcel.reference, i).check(); + + static final _readFromParcel = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent__readFromParcel") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void readFromParcel(android.os.Parcel parcel) + void readFromParcel(jni.JObject parcel) => + _readFromParcel(reference, parcel.reference).check(); + + static final _parseIntent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Intent__parseIntent") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public android.content.Intent parseIntent(android.content.res.Resources resources, org.xmlpull.v1.XmlPullParser xmlPullParser, android.util.AttributeSet attributeSet) + /// The returned object must be deleted after use, by calling the `delete` method. + static Intent parseIntent(jni.JObject resources, jni.JObject xmlPullParser, + jni.JObject attributeSet) => + const $IntentType().fromRef(_parseIntent(resources.reference, + xmlPullParser.reference, attributeSet.reference) + .object); + + static final _normalizeMimeType = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Intent__normalizeMimeType") + .asFunction)>(); + + /// from: static public java.lang.String normalizeMimeType(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString normalizeMimeType(jni.JString string) => + const jni.JStringType() + .fromRef(_normalizeMimeType(string.reference).object); +} + +class $IntentType extends jni.JObjType { + const $IntentType(); + + @override + String get signature => r"Landroid/content/Intent;"; + + @override + Intent fromRef(jni.JObjectPtr ref) => Intent.fromRef(ref); +} + +extension $IntentArray on jni.JArray { + Intent operator [](int index) { + return (elementType as $IntentType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, Intent value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: android.app.Activity +class Activity extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + Activity.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $ActivityType(); + + /// from: static public final int DEFAULT_KEYS_DIALER + static const DEFAULT_KEYS_DIALER = 1; + + /// from: static public final int DEFAULT_KEYS_DISABLE + static const DEFAULT_KEYS_DISABLE = 0; + + /// from: static public final int DEFAULT_KEYS_SEARCH_GLOBAL + static const DEFAULT_KEYS_SEARCH_GLOBAL = 4; + + /// from: static public final int DEFAULT_KEYS_SEARCH_LOCAL + static const DEFAULT_KEYS_SEARCH_LOCAL = 3; + + /// from: static public final int DEFAULT_KEYS_SHORTCUT + static const DEFAULT_KEYS_SHORTCUT = 2; + + static final _get_FOCUSED_STATE_SET = + jniLookup>( + "get_Activity__FOCUSED_STATE_SET") + .asFunction(); + + /// from: static protected final int[] FOCUSED_STATE_SET + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JArray get FOCUSED_STATE_SET => + const jni.JArrayType(jni.JIntType()) + .fromRef(_get_FOCUSED_STATE_SET().object); + + /// from: static public final int RESULT_CANCELED + static const RESULT_CANCELED = 0; + + /// from: static public final int RESULT_FIRST_USER + static const RESULT_FIRST_USER = 1; + + /// from: static public final int RESULT_OK + static const RESULT_OK = -1; + + static final _ctor = + jniLookup>("Activity__ctor") + .asFunction(); + + /// from: public void () + Activity() : super.fromRef(_ctor().object); + + static final _getIntent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getIntent") + .asFunction)>(); + + /// from: public android.content.Intent getIntent() + /// The returned object must be deleted after use, by calling the `delete` method. + Intent getIntent() => + const $IntentType().fromRef(_getIntent(reference).object); + + static final _setIntent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__setIntent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setIntent(android.content.Intent intent) + void setIntent(Intent intent) => + _setIntent(reference, intent.reference).check(); + + static final _setLocusContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__setLocusContext") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void setLocusContext(android.content.LocusId locusId, android.os.Bundle bundle) + void setLocusContext(jni.JObject locusId, jni.JObject bundle) => + _setLocusContext(reference, locusId.reference, bundle.reference).check(); + + static final _getApplication = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getApplication") + .asFunction)>(); + + /// from: public final android.app.Application getApplication() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getApplication() => + const jni.JObjectType().fromRef(_getApplication(reference).object); + + static final _isChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isChild") + .asFunction)>(); + + /// from: public final boolean isChild() + bool isChild() => _isChild(reference).boolean; + + static final _getParent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getParent") + .asFunction)>(); + + /// from: public final android.app.Activity getParent() + /// The returned object must be deleted after use, by calling the `delete` method. + Activity getParent() => + const $ActivityType().fromRef(_getParent(reference).object); + + static final _getWindowManager = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getWindowManager") + .asFunction)>(); + + /// from: public android.view.WindowManager getWindowManager() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getWindowManager() => + const jni.JObjectType().fromRef(_getWindowManager(reference).object); + + static final _getWindow = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getWindow") + .asFunction)>(); + + /// from: public android.view.Window getWindow() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getWindow() => + const jni.JObjectType().fromRef(_getWindow(reference).object); + + static final _getLoaderManager = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getLoaderManager") + .asFunction)>(); + + /// from: public android.app.LoaderManager getLoaderManager() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getLoaderManager() => + const jni.JObjectType().fromRef(_getLoaderManager(reference).object); + + static final _getCurrentFocus = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getCurrentFocus") + .asFunction)>(); + + /// from: public android.view.View getCurrentFocus() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getCurrentFocus() => + const jni.JObjectType().fromRef(_getCurrentFocus(reference).object); + + static final _attachBaseContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__attachBaseContext") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void attachBaseContext(android.content.Context context) + void attachBaseContext(Context context) => + _attachBaseContext(reference, context.reference).check(); + + static final _registerActivityLifecycleCallbacks = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__registerActivityLifecycleCallbacks") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void registerActivityLifecycleCallbacks(android.app.Application$ActivityLifecycleCallbacks activityLifecycleCallbacks) + void registerActivityLifecycleCallbacks( + jni.JObject activityLifecycleCallbacks) => + _registerActivityLifecycleCallbacks( + reference, activityLifecycleCallbacks.reference) + .check(); + + static final _unregisterActivityLifecycleCallbacks = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__unregisterActivityLifecycleCallbacks") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void unregisterActivityLifecycleCallbacks(android.app.Application$ActivityLifecycleCallbacks activityLifecycleCallbacks) + void unregisterActivityLifecycleCallbacks( + jni.JObject activityLifecycleCallbacks) => + _unregisterActivityLifecycleCallbacks( + reference, activityLifecycleCallbacks.reference) + .check(); + + static final _registerComponentCallbacks = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__registerComponentCallbacks") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void registerComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) + void registerComponentCallbacks(jni.JObject componentCallbacks) => + _registerComponentCallbacks(reference, componentCallbacks.reference) + .check(); + + static final _unregisterComponentCallbacks = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__unregisterComponentCallbacks") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void unregisterComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) + void unregisterComponentCallbacks(jni.JObject componentCallbacks) => + _unregisterComponentCallbacks(reference, componentCallbacks.reference) + .check(); + + static final _onCreate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onCreate") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void onCreate(android.os.Bundle bundle) + void onCreate(jni.JObject bundle) => + _onCreate(reference, bundle.reference).check(); + + static final _getSplashScreen = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getSplashScreen") + .asFunction)>(); + + /// from: public final android.window.SplashScreen getSplashScreen() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSplashScreen() => + const jni.JObjectType().fromRef(_getSplashScreen(reference).object); + + static final _onCreate1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onCreate1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void onCreate(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) + void onCreate1(jni.JObject bundle, jni.JObject persistableBundle) => + _onCreate1(reference, bundle.reference, persistableBundle.reference) + .check(); + + static final _onRestoreInstanceState = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onRestoreInstanceState") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void onRestoreInstanceState(android.os.Bundle bundle) + void onRestoreInstanceState(jni.JObject bundle) => + _onRestoreInstanceState(reference, bundle.reference).check(); + + static final _onRestoreInstanceState1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onRestoreInstanceState1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void onRestoreInstanceState(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) + void onRestoreInstanceState1( + jni.JObject bundle, jni.JObject persistableBundle) => + _onRestoreInstanceState1( + reference, bundle.reference, persistableBundle.reference) + .check(); + + static final _onPostCreate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onPostCreate") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void onPostCreate(android.os.Bundle bundle) + void onPostCreate(jni.JObject bundle) => + _onPostCreate(reference, bundle.reference).check(); + + static final _onPostCreate1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onPostCreate1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void onPostCreate(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) + void onPostCreate1(jni.JObject bundle, jni.JObject persistableBundle) => + _onPostCreate1(reference, bundle.reference, persistableBundle.reference) + .check(); + + static final _onStart = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onStart") + .asFunction)>(); + + /// from: protected void onStart() + void onStart() => _onStart(reference).check(); + + static final _onRestart = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onRestart") + .asFunction)>(); + + /// from: protected void onRestart() + void onRestart() => _onRestart(reference).check(); + + static final _onStateNotSaved = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onStateNotSaved") + .asFunction)>(); + + /// from: public void onStateNotSaved() + void onStateNotSaved() => _onStateNotSaved(reference).check(); + + static final _onResume = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onResume") + .asFunction)>(); + + /// from: protected void onResume() + void onResume() => _onResume(reference).check(); + + static final _onPostResume = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onPostResume") + .asFunction)>(); + + /// from: protected void onPostResume() + void onPostResume() => _onPostResume(reference).check(); + + static final _onTopResumedActivityChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__onTopResumedActivityChanged") + .asFunction, int)>(); + + /// from: public void onTopResumedActivityChanged(boolean z) + void onTopResumedActivityChanged(bool z) => + _onTopResumedActivityChanged(reference, z ? 1 : 0).check(); + + static final _isVoiceInteraction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isVoiceInteraction") + .asFunction)>(); + + /// from: public boolean isVoiceInteraction() + bool isVoiceInteraction() => _isVoiceInteraction(reference).boolean; + + static final _isVoiceInteractionRoot = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isVoiceInteractionRoot") + .asFunction)>(); + + /// from: public boolean isVoiceInteractionRoot() + bool isVoiceInteractionRoot() => _isVoiceInteractionRoot(reference).boolean; + + static final _getVoiceInteractor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getVoiceInteractor") + .asFunction)>(); + + /// from: public android.app.VoiceInteractor getVoiceInteractor() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getVoiceInteractor() => + const jni.JObjectType().fromRef(_getVoiceInteractor(reference).object); + + static final _isLocalVoiceInteractionSupported = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__isLocalVoiceInteractionSupported") + .asFunction)>(); + + /// from: public boolean isLocalVoiceInteractionSupported() + bool isLocalVoiceInteractionSupported() => + _isLocalVoiceInteractionSupported(reference).boolean; + + static final _startLocalVoiceInteraction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__startLocalVoiceInteraction") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void startLocalVoiceInteraction(android.os.Bundle bundle) + void startLocalVoiceInteraction(jni.JObject bundle) => + _startLocalVoiceInteraction(reference, bundle.reference).check(); + + static final _onLocalVoiceInteractionStarted = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__onLocalVoiceInteractionStarted") + .asFunction)>(); + + /// from: public void onLocalVoiceInteractionStarted() + void onLocalVoiceInteractionStarted() => + _onLocalVoiceInteractionStarted(reference).check(); + + static final _onLocalVoiceInteractionStopped = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__onLocalVoiceInteractionStopped") + .asFunction)>(); + + /// from: public void onLocalVoiceInteractionStopped() + void onLocalVoiceInteractionStopped() => + _onLocalVoiceInteractionStopped(reference).check(); + + static final _stopLocalVoiceInteraction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__stopLocalVoiceInteraction") + .asFunction)>(); + + /// from: public void stopLocalVoiceInteraction() + void stopLocalVoiceInteraction() => + _stopLocalVoiceInteraction(reference).check(); + + static final _onNewIntent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onNewIntent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void onNewIntent(android.content.Intent intent) + void onNewIntent(Intent intent) => + _onNewIntent(reference, intent.reference).check(); + + static final _onSaveInstanceState = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onSaveInstanceState") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void onSaveInstanceState(android.os.Bundle bundle) + void onSaveInstanceState(jni.JObject bundle) => + _onSaveInstanceState(reference, bundle.reference).check(); + + static final _onSaveInstanceState1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onSaveInstanceState1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void onSaveInstanceState(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) + void onSaveInstanceState1( + jni.JObject bundle, jni.JObject persistableBundle) => + _onSaveInstanceState1( + reference, bundle.reference, persistableBundle.reference) + .check(); + + static final _onPause = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onPause") + .asFunction)>(); + + /// from: protected void onPause() + void onPause() => _onPause(reference).check(); + + static final _onUserLeaveHint = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onUserLeaveHint") + .asFunction)>(); + + /// from: protected void onUserLeaveHint() + void onUserLeaveHint() => _onUserLeaveHint(reference).check(); + + static final _onCreateThumbnail = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onCreateThumbnail") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public boolean onCreateThumbnail(android.graphics.Bitmap bitmap, android.graphics.Canvas canvas) + bool onCreateThumbnail(jni.JObject bitmap, jni.JObject canvas) => + _onCreateThumbnail(reference, bitmap.reference, canvas.reference).boolean; + + static final _onCreateDescription = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onCreateDescription") + .asFunction)>(); + + /// from: public java.lang.CharSequence onCreateDescription() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onCreateDescription() => + const jni.JObjectType().fromRef(_onCreateDescription(reference).object); + + static final _onProvideAssistData = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onProvideAssistData") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onProvideAssistData(android.os.Bundle bundle) + void onProvideAssistData(jni.JObject bundle) => + _onProvideAssistData(reference, bundle.reference).check(); + + static final _onProvideAssistContent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onProvideAssistContent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onProvideAssistContent(android.app.assist.AssistContent assistContent) + void onProvideAssistContent(jni.JObject assistContent) => + _onProvideAssistContent(reference, assistContent.reference).check(); + + static final _onGetDirectActions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onGetDirectActions") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void onGetDirectActions(android.os.CancellationSignal cancellationSignal, java.util.function.Consumer consumer) + void onGetDirectActions( + jni.JObject cancellationSignal, jni.JObject consumer) => + _onGetDirectActions( + reference, cancellationSignal.reference, consumer.reference) + .check(); + + static final _onPerformDirectAction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onPerformDirectAction") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void onPerformDirectAction(java.lang.String string, android.os.Bundle bundle, android.os.CancellationSignal cancellationSignal, java.util.function.Consumer consumer) + void onPerformDirectAction(jni.JString string, jni.JObject bundle, + jni.JObject cancellationSignal, jni.JObject consumer) => + _onPerformDirectAction(reference, string.reference, bundle.reference, + cancellationSignal.reference, consumer.reference) + .check(); + + static final _requestShowKeyboardShortcuts = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__requestShowKeyboardShortcuts") + .asFunction)>(); + + /// from: public final void requestShowKeyboardShortcuts() + void requestShowKeyboardShortcuts() => + _requestShowKeyboardShortcuts(reference).check(); + + static final _dismissKeyboardShortcutsHelper = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__dismissKeyboardShortcutsHelper") + .asFunction)>(); + + /// from: public final void dismissKeyboardShortcutsHelper() + void dismissKeyboardShortcutsHelper() => + _dismissKeyboardShortcutsHelper(reference).check(); + + static final _onProvideKeyboardShortcuts = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__onProvideKeyboardShortcuts") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public void onProvideKeyboardShortcuts(java.util.List list, android.view.Menu menu, int i) + void onProvideKeyboardShortcuts(jni.JObject list, jni.JObject menu, int i) => + _onProvideKeyboardShortcuts(reference, list.reference, menu.reference, i) + .check(); + + static final _showAssist = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__showAssist") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean showAssist(android.os.Bundle bundle) + bool showAssist(jni.JObject bundle) => + _showAssist(reference, bundle.reference).boolean; + + static final _onStop = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onStop") + .asFunction)>(); + + /// from: protected void onStop() + void onStop() => _onStop(reference).check(); + + static final _onDestroy = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onDestroy") + .asFunction)>(); + + /// from: protected void onDestroy() + void onDestroy() => _onDestroy(reference).check(); + + static final _reportFullyDrawn = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__reportFullyDrawn") + .asFunction)>(); + + /// from: public void reportFullyDrawn() + void reportFullyDrawn() => _reportFullyDrawn(reference).check(); + + static final _onMultiWindowModeChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Uint8, + ffi.Pointer)>>("Activity__onMultiWindowModeChanged") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void onMultiWindowModeChanged(boolean z, android.content.res.Configuration configuration) + void onMultiWindowModeChanged(bool z, jni.JObject configuration) => + _onMultiWindowModeChanged(reference, z ? 1 : 0, configuration.reference) + .check(); + + static final _onMultiWindowModeChanged1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__onMultiWindowModeChanged1") + .asFunction, int)>(); + + /// from: public void onMultiWindowModeChanged(boolean z) + void onMultiWindowModeChanged1(bool z) => + _onMultiWindowModeChanged1(reference, z ? 1 : 0).check(); + + static final _isInMultiWindowMode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isInMultiWindowMode") + .asFunction)>(); + + /// from: public boolean isInMultiWindowMode() + bool isInMultiWindowMode() => _isInMultiWindowMode(reference).boolean; + + static final _onPictureInPictureModeChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Uint8, + ffi.Pointer)>>( + "Activity__onPictureInPictureModeChanged") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void onPictureInPictureModeChanged(boolean z, android.content.res.Configuration configuration) + void onPictureInPictureModeChanged(bool z, jni.JObject configuration) => + _onPictureInPictureModeChanged( + reference, z ? 1 : 0, configuration.reference) + .check(); + + static final _onPictureInPictureUiStateChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__onPictureInPictureUiStateChanged") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onPictureInPictureUiStateChanged(android.app.PictureInPictureUiState pictureInPictureUiState) + void onPictureInPictureUiStateChanged(jni.JObject pictureInPictureUiState) => + _onPictureInPictureUiStateChanged( + reference, pictureInPictureUiState.reference) + .check(); + + static final _onPictureInPictureModeChanged1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__onPictureInPictureModeChanged1") + .asFunction, int)>(); + + /// from: public void onPictureInPictureModeChanged(boolean z) + void onPictureInPictureModeChanged1(bool z) => + _onPictureInPictureModeChanged1(reference, z ? 1 : 0).check(); + + static final _isInPictureInPictureMode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isInPictureInPictureMode") + .asFunction)>(); + + /// from: public boolean isInPictureInPictureMode() + bool isInPictureInPictureMode() => + _isInPictureInPictureMode(reference).boolean; + + static final _enterPictureInPictureMode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__enterPictureInPictureMode") + .asFunction)>(); + + /// from: public void enterPictureInPictureMode() + void enterPictureInPictureMode() => + _enterPictureInPictureMode(reference).check(); + + static final _enterPictureInPictureMode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__enterPictureInPictureMode1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean enterPictureInPictureMode(android.app.PictureInPictureParams pictureInPictureParams) + bool enterPictureInPictureMode1(jni.JObject pictureInPictureParams) => + _enterPictureInPictureMode1(reference, pictureInPictureParams.reference) + .boolean; + + static final _setPictureInPictureParams = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__setPictureInPictureParams") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setPictureInPictureParams(android.app.PictureInPictureParams pictureInPictureParams) + void setPictureInPictureParams(jni.JObject pictureInPictureParams) => + _setPictureInPictureParams(reference, pictureInPictureParams.reference) + .check(); + + static final _getMaxNumPictureInPictureActions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__getMaxNumPictureInPictureActions") + .asFunction)>(); + + /// from: public int getMaxNumPictureInPictureActions() + int getMaxNumPictureInPictureActions() => + _getMaxNumPictureInPictureActions(reference).integer; + + static final _onPictureInPictureRequested = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__onPictureInPictureRequested") + .asFunction)>(); + + /// from: public boolean onPictureInPictureRequested() + bool onPictureInPictureRequested() => + _onPictureInPictureRequested(reference).boolean; + + static final _setShouldDockBigOverlays = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setShouldDockBigOverlays") + .asFunction, int)>(); + + /// from: public void setShouldDockBigOverlays(boolean z) + void setShouldDockBigOverlays(bool z) => + _setShouldDockBigOverlays(reference, z ? 1 : 0).check(); + + static final _shouldDockBigOverlays = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__shouldDockBigOverlays") + .asFunction)>(); + + /// from: public boolean shouldDockBigOverlays() + bool shouldDockBigOverlays() => _shouldDockBigOverlays(reference).boolean; + + static final _onConfigurationChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onConfigurationChanged") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onConfigurationChanged(android.content.res.Configuration configuration) + void onConfigurationChanged(jni.JObject configuration) => + _onConfigurationChanged(reference, configuration.reference).check(); + + static final _getChangingConfigurations = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__getChangingConfigurations") + .asFunction)>(); + + /// from: public int getChangingConfigurations() + int getChangingConfigurations() => + _getChangingConfigurations(reference).integer; + + static final _getLastNonConfigurationInstance = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__getLastNonConfigurationInstance") + .asFunction)>(); + + /// from: public java.lang.Object getLastNonConfigurationInstance() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getLastNonConfigurationInstance() => const jni.JObjectType() + .fromRef(_getLastNonConfigurationInstance(reference).object); + + static final _onRetainNonConfigurationInstance = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__onRetainNonConfigurationInstance") + .asFunction)>(); + + /// from: public java.lang.Object onRetainNonConfigurationInstance() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onRetainNonConfigurationInstance() => const jni.JObjectType() + .fromRef(_onRetainNonConfigurationInstance(reference).object); + + static final _onLowMemory = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onLowMemory") + .asFunction)>(); + + /// from: public void onLowMemory() + void onLowMemory() => _onLowMemory(reference).check(); + + static final _onTrimMemory = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__onTrimMemory") + .asFunction, int)>(); + + /// from: public void onTrimMemory(int i) + void onTrimMemory(int i) => _onTrimMemory(reference, i).check(); + + static final _getFragmentManager = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getFragmentManager") + .asFunction)>(); + + /// from: public android.app.FragmentManager getFragmentManager() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getFragmentManager() => + const jni.JObjectType().fromRef(_getFragmentManager(reference).object); + + static final _onAttachFragment = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onAttachFragment") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onAttachFragment(android.app.Fragment fragment) + void onAttachFragment(jni.JObject fragment) => + _onAttachFragment(reference, fragment.reference).check(); + + static final _managedQuery = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__managedQuery") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public final android.database.Cursor managedQuery(android.net.Uri uri, java.lang.String[] strings, java.lang.String string, java.lang.String[] strings1, java.lang.String string1) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject managedQuery( + jni.JObject uri, + jni.JArray strings, + jni.JString string, + jni.JArray strings1, + jni.JString string1) => + const jni.JObjectType().fromRef(_managedQuery( + reference, + uri.reference, + strings.reference, + string.reference, + strings1.reference, + string1.reference) + .object); + + static final _startManagingCursor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__startManagingCursor") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void startManagingCursor(android.database.Cursor cursor) + void startManagingCursor(jni.JObject cursor) => + _startManagingCursor(reference, cursor.reference).check(); + + static final _stopManagingCursor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__stopManagingCursor") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void stopManagingCursor(android.database.Cursor cursor) + void stopManagingCursor(jni.JObject cursor) => + _stopManagingCursor(reference, cursor.reference).check(); + + static final _findViewById = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__findViewById") + .asFunction, int)>(); + + /// from: public T findViewById(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + T findViewById(jni.JObjType $T, int i) => + $T.fromRef(_findViewById(reference, i).object); + + static final _requireViewById = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__requireViewById") + .asFunction, int)>(); + + /// from: public final T requireViewById(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + T requireViewById(jni.JObjType $T, int i) => + $T.fromRef(_requireViewById(reference, i).object); + + static final _getActionBar = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getActionBar") + .asFunction)>(); + + /// from: public android.app.ActionBar getActionBar() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getActionBar() => + const jni.JObjectType().fromRef(_getActionBar(reference).object); + + static final _setActionBar = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__setActionBar") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setActionBar(android.widget.Toolbar toolbar) + void setActionBar(jni.JObject toolbar) => + _setActionBar(reference, toolbar.reference).check(); + + static final _setContentView = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__setContentView") + .asFunction, int)>(); + + /// from: public void setContentView(int i) + void setContentView(int i) => _setContentView(reference, i).check(); + + static final _setContentView1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__setContentView1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setContentView(android.view.View view) + void setContentView1(jni.JObject view) => + _setContentView1(reference, view.reference).check(); + + static final _setContentView2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__setContentView2") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void setContentView(android.view.View view, android.view.ViewGroup$LayoutParams layoutParams) + void setContentView2(jni.JObject view, jni.JObject layoutParams) => + _setContentView2(reference, view.reference, layoutParams.reference) + .check(); + + static final _addContentView = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__addContentView") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void addContentView(android.view.View view, android.view.ViewGroup$LayoutParams layoutParams) + void addContentView(jni.JObject view, jni.JObject layoutParams) => + _addContentView(reference, view.reference, layoutParams.reference) + .check(); + + static final _getContentTransitionManager = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__getContentTransitionManager") + .asFunction)>(); + + /// from: public android.transition.TransitionManager getContentTransitionManager() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getContentTransitionManager() => const jni.JObjectType() + .fromRef(_getContentTransitionManager(reference).object); + + static final _setContentTransitionManager = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__setContentTransitionManager") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setContentTransitionManager(android.transition.TransitionManager transitionManager) + void setContentTransitionManager(jni.JObject transitionManager) => + _setContentTransitionManager(reference, transitionManager.reference) + .check(); + + static final _getContentScene = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getContentScene") + .asFunction)>(); + + /// from: public android.transition.Scene getContentScene() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getContentScene() => + const jni.JObjectType().fromRef(_getContentScene(reference).object); + + static final _setFinishOnTouchOutside = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setFinishOnTouchOutside") + .asFunction, int)>(); + + /// from: public void setFinishOnTouchOutside(boolean z) + void setFinishOnTouchOutside(bool z) => + _setFinishOnTouchOutside(reference, z ? 1 : 0).check(); + + static final _setDefaultKeyMode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__setDefaultKeyMode") + .asFunction, int)>(); + + /// from: public final void setDefaultKeyMode(int i) + void setDefaultKeyMode(int i) => _setDefaultKeyMode(reference, i).check(); + + static final _onKeyDown = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onKeyDown") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onKeyDown(int i, android.view.KeyEvent keyEvent) + bool onKeyDown(int i, jni.JObject keyEvent) => + _onKeyDown(reference, i, keyEvent.reference).boolean; + + static final _onKeyLongPress = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onKeyLongPress") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onKeyLongPress(int i, android.view.KeyEvent keyEvent) + bool onKeyLongPress(int i, jni.JObject keyEvent) => + _onKeyLongPress(reference, i, keyEvent.reference).boolean; + + static final _onKeyUp = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onKeyUp") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onKeyUp(int i, android.view.KeyEvent keyEvent) + bool onKeyUp(int i, jni.JObject keyEvent) => + _onKeyUp(reference, i, keyEvent.reference).boolean; + + static final _onKeyMultiple = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Int32, ffi.Pointer)>>("Activity__onKeyMultiple") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, int, ffi.Pointer)>(); + + /// from: public boolean onKeyMultiple(int i, int i1, android.view.KeyEvent keyEvent) + bool onKeyMultiple(int i, int i1, jni.JObject keyEvent) => + _onKeyMultiple(reference, i, i1, keyEvent.reference).boolean; + + static final _onBackPressed = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onBackPressed") + .asFunction)>(); + + /// from: public void onBackPressed() + void onBackPressed() => _onBackPressed(reference).check(); + + static final _onKeyShortcut = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onKeyShortcut") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onKeyShortcut(int i, android.view.KeyEvent keyEvent) + bool onKeyShortcut(int i, jni.JObject keyEvent) => + _onKeyShortcut(reference, i, keyEvent.reference).boolean; + + static final _onTouchEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onTouchEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onTouchEvent(android.view.MotionEvent motionEvent) + bool onTouchEvent(jni.JObject motionEvent) => + _onTouchEvent(reference, motionEvent.reference).boolean; + + static final _onTrackballEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onTrackballEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onTrackballEvent(android.view.MotionEvent motionEvent) + bool onTrackballEvent(jni.JObject motionEvent) => + _onTrackballEvent(reference, motionEvent.reference).boolean; + + static final _onGenericMotionEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onGenericMotionEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onGenericMotionEvent(android.view.MotionEvent motionEvent) + bool onGenericMotionEvent(jni.JObject motionEvent) => + _onGenericMotionEvent(reference, motionEvent.reference).boolean; + + static final _onUserInteraction = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onUserInteraction") + .asFunction)>(); + + /// from: public void onUserInteraction() + void onUserInteraction() => _onUserInteraction(reference).check(); + + static final _onWindowAttributesChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__onWindowAttributesChanged") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onWindowAttributesChanged(android.view.WindowManager$LayoutParams layoutParams) + void onWindowAttributesChanged(jni.JObject layoutParams) => + _onWindowAttributesChanged(reference, layoutParams.reference).check(); + + static final _onContentChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onContentChanged") + .asFunction)>(); + + /// from: public void onContentChanged() + void onContentChanged() => _onContentChanged(reference).check(); + + static final _onWindowFocusChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__onWindowFocusChanged") + .asFunction, int)>(); + + /// from: public void onWindowFocusChanged(boolean z) + void onWindowFocusChanged(bool z) => + _onWindowFocusChanged(reference, z ? 1 : 0).check(); + + static final _onAttachedToWindow = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onAttachedToWindow") + .asFunction)>(); + + /// from: public void onAttachedToWindow() + void onAttachedToWindow() => _onAttachedToWindow(reference).check(); + + static final _onDetachedFromWindow = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onDetachedFromWindow") + .asFunction)>(); + + /// from: public void onDetachedFromWindow() + void onDetachedFromWindow() => _onDetachedFromWindow(reference).check(); + + static final _hasWindowFocus = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__hasWindowFocus") + .asFunction)>(); + + /// from: public boolean hasWindowFocus() + bool hasWindowFocus() => _hasWindowFocus(reference).boolean; + + static final _dispatchKeyEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__dispatchKeyEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean dispatchKeyEvent(android.view.KeyEvent keyEvent) + bool dispatchKeyEvent(jni.JObject keyEvent) => + _dispatchKeyEvent(reference, keyEvent.reference).boolean; + + static final _dispatchKeyShortcutEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__dispatchKeyShortcutEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean dispatchKeyShortcutEvent(android.view.KeyEvent keyEvent) + bool dispatchKeyShortcutEvent(jni.JObject keyEvent) => + _dispatchKeyShortcutEvent(reference, keyEvent.reference).boolean; + + static final _dispatchTouchEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__dispatchTouchEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean dispatchTouchEvent(android.view.MotionEvent motionEvent) + bool dispatchTouchEvent(jni.JObject motionEvent) => + _dispatchTouchEvent(reference, motionEvent.reference).boolean; + + static final _dispatchTrackballEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__dispatchTrackballEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean dispatchTrackballEvent(android.view.MotionEvent motionEvent) + bool dispatchTrackballEvent(jni.JObject motionEvent) => + _dispatchTrackballEvent(reference, motionEvent.reference).boolean; + + static final _dispatchGenericMotionEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__dispatchGenericMotionEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean dispatchGenericMotionEvent(android.view.MotionEvent motionEvent) + bool dispatchGenericMotionEvent(jni.JObject motionEvent) => + _dispatchGenericMotionEvent(reference, motionEvent.reference).boolean; + + static final _dispatchPopulateAccessibilityEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__dispatchPopulateAccessibilityEvent") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent accessibilityEvent) + bool dispatchPopulateAccessibilityEvent(jni.JObject accessibilityEvent) => + _dispatchPopulateAccessibilityEvent( + reference, accessibilityEvent.reference) + .boolean; + + static final _onCreatePanelView = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__onCreatePanelView") + .asFunction, int)>(); + + /// from: public android.view.View onCreatePanelView(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onCreatePanelView(int i) => + const jni.JObjectType().fromRef(_onCreatePanelView(reference, i).object); + + static final _onCreatePanelMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onCreatePanelMenu") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onCreatePanelMenu(int i, android.view.Menu menu) + bool onCreatePanelMenu(int i, jni.JObject menu) => + _onCreatePanelMenu(reference, i, menu.reference).boolean; + + static final _onPreparePanel = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>("Activity__onPreparePanel") + .asFunction< + jni.JniResult Function(ffi.Pointer, int, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onPreparePanel(int i, android.view.View view, android.view.Menu menu) + bool onPreparePanel(int i, jni.JObject view, jni.JObject menu) => + _onPreparePanel(reference, i, view.reference, menu.reference).boolean; + + static final _onMenuOpened = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onMenuOpened") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onMenuOpened(int i, android.view.Menu menu) + bool onMenuOpened(int i, jni.JObject menu) => + _onMenuOpened(reference, i, menu.reference).boolean; + + static final _onMenuItemSelected = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onMenuItemSelected") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public boolean onMenuItemSelected(int i, android.view.MenuItem menuItem) + bool onMenuItemSelected(int i, jni.JObject menuItem) => + _onMenuItemSelected(reference, i, menuItem.reference).boolean; + + static final _onPanelClosed = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onPanelClosed") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void onPanelClosed(int i, android.view.Menu menu) + void onPanelClosed(int i, jni.JObject menu) => + _onPanelClosed(reference, i, menu.reference).check(); + + static final _invalidateOptionsMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__invalidateOptionsMenu") + .asFunction)>(); + + /// from: public void invalidateOptionsMenu() + void invalidateOptionsMenu() => _invalidateOptionsMenu(reference).check(); + + static final _onCreateOptionsMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onCreateOptionsMenu") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onCreateOptionsMenu(android.view.Menu menu) + bool onCreateOptionsMenu(jni.JObject menu) => + _onCreateOptionsMenu(reference, menu.reference).boolean; + + static final _onPrepareOptionsMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onPrepareOptionsMenu") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onPrepareOptionsMenu(android.view.Menu menu) + bool onPrepareOptionsMenu(jni.JObject menu) => + _onPrepareOptionsMenu(reference, menu.reference).boolean; + + static final _onOptionsItemSelected = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onOptionsItemSelected") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onOptionsItemSelected(android.view.MenuItem menuItem) + bool onOptionsItemSelected(jni.JObject menuItem) => + _onOptionsItemSelected(reference, menuItem.reference).boolean; + + static final _onNavigateUp = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onNavigateUp") + .asFunction)>(); + + /// from: public boolean onNavigateUp() + bool onNavigateUp() => _onNavigateUp(reference).boolean; + + static final _onNavigateUpFromChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onNavigateUpFromChild") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onNavigateUpFromChild(android.app.Activity activity) + bool onNavigateUpFromChild(Activity activity) => + _onNavigateUpFromChild(reference, activity.reference).boolean; + + static final _onCreateNavigateUpTaskStack = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__onCreateNavigateUpTaskStack") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder taskStackBuilder) + void onCreateNavigateUpTaskStack(jni.JObject taskStackBuilder) => + _onCreateNavigateUpTaskStack(reference, taskStackBuilder.reference) + .check(); + + static final _onPrepareNavigateUpTaskStack = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__onPrepareNavigateUpTaskStack") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder taskStackBuilder) + void onPrepareNavigateUpTaskStack(jni.JObject taskStackBuilder) => + _onPrepareNavigateUpTaskStack(reference, taskStackBuilder.reference) + .check(); + + static final _onOptionsMenuClosed = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onOptionsMenuClosed") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onOptionsMenuClosed(android.view.Menu menu) + void onOptionsMenuClosed(jni.JObject menu) => + _onOptionsMenuClosed(reference, menu.reference).check(); + + static final _openOptionsMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__openOptionsMenu") + .asFunction)>(); + + /// from: public void openOptionsMenu() + void openOptionsMenu() => _openOptionsMenu(reference).check(); + + static final _closeOptionsMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__closeOptionsMenu") + .asFunction)>(); + + /// from: public void closeOptionsMenu() + void closeOptionsMenu() => _closeOptionsMenu(reference).check(); + + static final _onCreateContextMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onCreateContextMenu") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onCreateContextMenu(android.view.ContextMenu contextMenu, android.view.View view, android.view.ContextMenu$ContextMenuInfo contextMenuInfo) + void onCreateContextMenu(jni.JObject contextMenu, jni.JObject view, + jni.JObject contextMenuInfo) => + _onCreateContextMenu(reference, contextMenu.reference, view.reference, + contextMenuInfo.reference) + .check(); + + static final _registerForContextMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__registerForContextMenu") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void registerForContextMenu(android.view.View view) + void registerForContextMenu(jni.JObject view) => + _registerForContextMenu(reference, view.reference).check(); + + static final _unregisterForContextMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__unregisterForContextMenu") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void unregisterForContextMenu(android.view.View view) + void unregisterForContextMenu(jni.JObject view) => + _unregisterForContextMenu(reference, view.reference).check(); + + static final _openContextMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__openContextMenu") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void openContextMenu(android.view.View view) + void openContextMenu(jni.JObject view) => + _openContextMenu(reference, view.reference).check(); + + static final _closeContextMenu = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__closeContextMenu") + .asFunction)>(); + + /// from: public void closeContextMenu() + void closeContextMenu() => _closeContextMenu(reference).check(); + + static final _onContextItemSelected = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onContextItemSelected") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onContextItemSelected(android.view.MenuItem menuItem) + bool onContextItemSelected(jni.JObject menuItem) => + _onContextItemSelected(reference, menuItem.reference).boolean; + + static final _onContextMenuClosed = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onContextMenuClosed") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onContextMenuClosed(android.view.Menu menu) + void onContextMenuClosed(jni.JObject menu) => + _onContextMenuClosed(reference, menu.reference).check(); + + static final _onCreateDialog = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__onCreateDialog") + .asFunction, int)>(); + + /// from: protected android.app.Dialog onCreateDialog(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onCreateDialog(int i) => + const jni.JObjectType().fromRef(_onCreateDialog(reference, i).object); + + static final _onCreateDialog1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onCreateDialog1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: protected android.app.Dialog onCreateDialog(int i, android.os.Bundle bundle) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onCreateDialog1(int i, jni.JObject bundle) => + const jni.JObjectType() + .fromRef(_onCreateDialog1(reference, i, bundle.reference).object); + + static final _onPrepareDialog = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onPrepareDialog") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: protected void onPrepareDialog(int i, android.app.Dialog dialog) + void onPrepareDialog(int i, jni.JObject dialog) => + _onPrepareDialog(reference, i, dialog.reference).check(); + + static final _onPrepareDialog1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>("Activity__onPrepareDialog1") + .asFunction< + jni.JniResult Function(ffi.Pointer, int, + ffi.Pointer, ffi.Pointer)>(); + + /// from: protected void onPrepareDialog(int i, android.app.Dialog dialog, android.os.Bundle bundle) + void onPrepareDialog1(int i, jni.JObject dialog, jni.JObject bundle) => + _onPrepareDialog1(reference, i, dialog.reference, bundle.reference) + .check(); + + static final _showDialog = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__showDialog") + .asFunction, int)>(); + + /// from: public final void showDialog(int i) + void showDialog(int i) => _showDialog(reference, i).check(); + + static final _showDialog1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__showDialog1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public final boolean showDialog(int i, android.os.Bundle bundle) + bool showDialog1(int i, jni.JObject bundle) => + _showDialog1(reference, i, bundle.reference).boolean; + + static final _dismissDialog = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__dismissDialog") + .asFunction, int)>(); + + /// from: public final void dismissDialog(int i) + void dismissDialog(int i) => _dismissDialog(reference, i).check(); + + static final _removeDialog = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__removeDialog") + .asFunction, int)>(); + + /// from: public final void removeDialog(int i) + void removeDialog(int i) => _removeDialog(reference, i).check(); + + static final _onSearchRequested = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onSearchRequested") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean onSearchRequested(android.view.SearchEvent searchEvent) + bool onSearchRequested(jni.JObject searchEvent) => + _onSearchRequested(reference, searchEvent.reference).boolean; + + static final _onSearchRequested1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onSearchRequested1") + .asFunction)>(); + + /// from: public boolean onSearchRequested() + bool onSearchRequested1() => _onSearchRequested1(reference).boolean; + + static final _getSearchEvent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getSearchEvent") + .asFunction)>(); + + /// from: public final android.view.SearchEvent getSearchEvent() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSearchEvent() => + const jni.JObjectType().fromRef(_getSearchEvent(reference).object); + + static final _startSearch = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Pointer, + ffi.Uint8)>>("Activity__startSearch") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer, int)>(); + + /// from: public void startSearch(java.lang.String string, boolean z, android.os.Bundle bundle, boolean z1) + void startSearch(jni.JString string, bool z, jni.JObject bundle, bool z1) => + _startSearch(reference, string.reference, z ? 1 : 0, bundle.reference, + z1 ? 1 : 0) + .check(); + + static final _triggerSearch = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__triggerSearch") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void triggerSearch(java.lang.String string, android.os.Bundle bundle) + void triggerSearch(jni.JString string, jni.JObject bundle) => + _triggerSearch(reference, string.reference, bundle.reference).check(); + + static final _takeKeyEvents = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Uint8)>>("Activity__takeKeyEvents") + .asFunction, int)>(); + + /// from: public void takeKeyEvents(boolean z) + void takeKeyEvents(bool z) => _takeKeyEvents(reference, z ? 1 : 0).check(); + + static final _requestWindowFeature = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__requestWindowFeature") + .asFunction, int)>(); + + /// from: public final boolean requestWindowFeature(int i) + bool requestWindowFeature(int i) => + _requestWindowFeature(reference, i).boolean; + + static final _setFeatureDrawableResource = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Int32)>>("Activity__setFeatureDrawableResource") + .asFunction, int, int)>(); + + /// from: public final void setFeatureDrawableResource(int i, int i1) + void setFeatureDrawableResource(int i, int i1) => + _setFeatureDrawableResource(reference, i, i1).check(); + + static final _setFeatureDrawableUri = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__setFeatureDrawableUri") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public final void setFeatureDrawableUri(int i, android.net.Uri uri) + void setFeatureDrawableUri(int i, jni.JObject uri) => + _setFeatureDrawableUri(reference, i, uri.reference).check(); + + static final _setFeatureDrawable = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__setFeatureDrawable") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public final void setFeatureDrawable(int i, android.graphics.drawable.Drawable drawable) + void setFeatureDrawable(int i, jni.JObject drawable) => + _setFeatureDrawable(reference, i, drawable.reference).check(); + + static final _setFeatureDrawableAlpha = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Int32)>>("Activity__setFeatureDrawableAlpha") + .asFunction, int, int)>(); + + /// from: public final void setFeatureDrawableAlpha(int i, int i1) + void setFeatureDrawableAlpha(int i, int i1) => + _setFeatureDrawableAlpha(reference, i, i1).check(); + + static final _getLayoutInflater = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getLayoutInflater") + .asFunction)>(); + + /// from: public android.view.LayoutInflater getLayoutInflater() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getLayoutInflater() => + const jni.JObjectType().fromRef(_getLayoutInflater(reference).object); + + static final _getMenuInflater = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getMenuInflater") + .asFunction)>(); + + /// from: public android.view.MenuInflater getMenuInflater() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getMenuInflater() => + const jni.JObjectType().fromRef(_getMenuInflater(reference).object); + + static final _setTheme = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__setTheme") + .asFunction, int)>(); + + /// from: public void setTheme(int i) + void setTheme(int i) => _setTheme(reference, i).check(); + + static final _onApplyThemeResource = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Uint8)>>("Activity__onApplyThemeResource") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int, int)>(); + + /// from: protected void onApplyThemeResource(android.content.res.Resources$Theme theme, int i, boolean z) + void onApplyThemeResource(jni.JObject theme, int i, bool z) => + _onApplyThemeResource(reference, theme.reference, i, z ? 1 : 0).check(); + + static final _requestPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__requestPermissions") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public final void requestPermissions(java.lang.String[] strings, int i) + void requestPermissions(jni.JArray strings, int i) => + _requestPermissions(reference, strings.reference, i).check(); + + static final _onRequestPermissionsResult = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer, ffi.Pointer)>>( + "Activity__onRequestPermissionsResult") + .asFunction< + jni.JniResult Function(ffi.Pointer, int, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onRequestPermissionsResult(int i, java.lang.String[] strings, int[] is) + void onRequestPermissionsResult( + int i, jni.JArray strings, jni.JArray is0) => + _onRequestPermissionsResult( + reference, i, strings.reference, is0.reference) + .check(); + + static final _shouldShowRequestPermissionRationale = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__shouldShowRequestPermissionRationale") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean shouldShowRequestPermissionRationale(java.lang.String string) + bool shouldShowRequestPermissionRationale(jni.JString string) => + _shouldShowRequestPermissionRationale(reference, string.reference) + .boolean; + + static final _startActivityForResult = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__startActivityForResult") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public void startActivityForResult(android.content.Intent intent, int i) + void startActivityForResult(Intent intent, int i) => + _startActivityForResult(reference, intent.reference, i).check(); + + static final _startActivityForResult1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("Activity__startActivityForResult1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public void startActivityForResult(android.content.Intent intent, int i, android.os.Bundle bundle) + void startActivityForResult1(Intent intent, int i, jni.JObject bundle) => + _startActivityForResult1(reference, intent.reference, i, bundle.reference) + .check(); + + static final _isActivityTransitionRunning = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__isActivityTransitionRunning") + .asFunction)>(); + + /// from: public boolean isActivityTransitionRunning() + bool isActivityTransitionRunning() => + _isActivityTransitionRunning(reference).boolean; + + static final _startIntentSenderForResult = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Activity__startIntentSenderForResult") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer, int, int, int)>(); + + /// from: public void startIntentSenderForResult(android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3) + void startIntentSenderForResult(jni.JObject intentSender, int i, + Intent intent, int i1, int i2, int i3) => + _startIntentSenderForResult(reference, intentSender.reference, i, + intent.reference, i1, i2, i3) + .check(); + + static final _startIntentSenderForResult1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>( + "Activity__startIntentSenderForResult1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + int, + int, + int, + ffi.Pointer)>(); + + /// from: public void startIntentSenderForResult(android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3, android.os.Bundle bundle) + void startIntentSenderForResult1(jni.JObject intentSender, int i, + Intent intent, int i1, int i2, int i3, jni.JObject bundle) => + _startIntentSenderForResult1(reference, intentSender.reference, i, + intent.reference, i1, i2, i3, bundle.reference) + .check(); + + static final _startActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__startActivity") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void startActivity(android.content.Intent intent) + void startActivity(Intent intent) => + _startActivity(reference, intent.reference).check(); + + static final _startActivity1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__startActivity1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void startActivity(android.content.Intent intent, android.os.Bundle bundle) + void startActivity1(Intent intent, jni.JObject bundle) => + _startActivity1(reference, intent.reference, bundle.reference).check(); + + static final _startActivities = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__startActivities") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void startActivities(android.content.Intent[] intents) + void startActivities(jni.JArray intents) => + _startActivities(reference, intents.reference).check(); + + static final _startActivities1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__startActivities1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void startActivities(android.content.Intent[] intents, android.os.Bundle bundle) + void startActivities1(jni.JArray intents, jni.JObject bundle) => + _startActivities1(reference, intents.reference, bundle.reference).check(); + + static final _startIntentSender = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Activity__startIntentSender") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, int)>(); + + /// from: public void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2) + void startIntentSender( + jni.JObject intentSender, Intent intent, int i, int i1, int i2) => + _startIntentSender( + reference, intentSender.reference, intent.reference, i, i1, i2) + .check(); + + static final _startIntentSender1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>("Activity__startIntentSender1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, int, ffi.Pointer)>(); + + /// from: public void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2, android.os.Bundle bundle) + void startIntentSender1(jni.JObject intentSender, Intent intent, int i, + int i1, int i2, jni.JObject bundle) => + _startIntentSender1(reference, intentSender.reference, intent.reference, + i, i1, i2, bundle.reference) + .check(); + + static final _startActivityIfNeeded = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__startActivityIfNeeded") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public boolean startActivityIfNeeded(android.content.Intent intent, int i) + bool startActivityIfNeeded(Intent intent, int i) => + _startActivityIfNeeded(reference, intent.reference, i).boolean; + + static final _startActivityIfNeeded1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("Activity__startActivityIfNeeded1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public boolean startActivityIfNeeded(android.content.Intent intent, int i, android.os.Bundle bundle) + bool startActivityIfNeeded1(Intent intent, int i, jni.JObject bundle) => + _startActivityIfNeeded1(reference, intent.reference, i, bundle.reference) + .boolean; + + static final _startNextMatchingActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__startNextMatchingActivity") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean startNextMatchingActivity(android.content.Intent intent) + bool startNextMatchingActivity(Intent intent) => + _startNextMatchingActivity(reference, intent.reference).boolean; + + static final _startNextMatchingActivity1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "Activity__startNextMatchingActivity1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public boolean startNextMatchingActivity(android.content.Intent intent, android.os.Bundle bundle) + bool startNextMatchingActivity1(Intent intent, jni.JObject bundle) => + _startNextMatchingActivity1(reference, intent.reference, bundle.reference) + .boolean; + + static final _startActivityFromChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__startActivityFromChild") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public void startActivityFromChild(android.app.Activity activity, android.content.Intent intent, int i) + void startActivityFromChild(Activity activity, Intent intent, int i) => + _startActivityFromChild( + reference, activity.reference, intent.reference, i) + .check(); + + static final _startActivityFromChild1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("Activity__startActivityFromChild1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void startActivityFromChild(android.app.Activity activity, android.content.Intent intent, int i, android.os.Bundle bundle) + void startActivityFromChild1( + Activity activity, Intent intent, int i, jni.JObject bundle) => + _startActivityFromChild1(reference, activity.reference, intent.reference, + i, bundle.reference) + .check(); + + static final _startActivityFromFragment = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__startActivityFromFragment") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + /// from: public void startActivityFromFragment(android.app.Fragment fragment, android.content.Intent intent, int i) + void startActivityFromFragment(jni.JObject fragment, Intent intent, int i) => + _startActivityFromFragment( + reference, fragment.reference, intent.reference, i) + .check(); + + static final _startActivityFromFragment1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "Activity__startActivityFromFragment1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void startActivityFromFragment(android.app.Fragment fragment, android.content.Intent intent, int i, android.os.Bundle bundle) + void startActivityFromFragment1( + jni.JObject fragment, Intent intent, int i, jni.JObject bundle) => + _startActivityFromFragment1(reference, fragment.reference, + intent.reference, i, bundle.reference) + .check(); + + static final _startIntentSenderFromChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Activity__startIntentSenderFromChild") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + int, + int, + int)>(); + + /// from: public void startIntentSenderFromChild(android.app.Activity activity, android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3) + void startIntentSenderFromChild(Activity activity, jni.JObject intentSender, + int i, Intent intent, int i1, int i2, int i3) => + _startIntentSenderFromChild(reference, activity.reference, + intentSender.reference, i, intent.reference, i1, i2, i3) + .check(); + + static final _startIntentSenderFromChild1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>( + "Activity__startIntentSenderFromChild1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + int, + int, + int, + ffi.Pointer)>(); + + /// from: public void startIntentSenderFromChild(android.app.Activity activity, android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3, android.os.Bundle bundle) + void startIntentSenderFromChild1(Activity activity, jni.JObject intentSender, + int i, Intent intent, int i1, int i2, int i3, jni.JObject bundle) => + _startIntentSenderFromChild1( + reference, + activity.reference, + intentSender.reference, + i, + intent.reference, + i1, + i2, + i3, + bundle.reference) + .check(); + + static final _overridePendingTransition = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Int32)>>("Activity__overridePendingTransition") + .asFunction, int, int)>(); + + /// from: public void overridePendingTransition(int i, int i1) + void overridePendingTransition(int i, int i1) => + _overridePendingTransition(reference, i, i1).check(); + + static final _overridePendingTransition1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Int32)>>("Activity__overridePendingTransition1") + .asFunction< + jni.JniResult Function(ffi.Pointer, int, int, int)>(); + + /// from: public void overridePendingTransition(int i, int i1, int i2) + void overridePendingTransition1(int i, int i1, int i2) => + _overridePendingTransition1(reference, i, i1, i2).check(); + + static final _setResult = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__setResult") + .asFunction, int)>(); + + /// from: public final void setResult(int i) + void setResult(int i) => _setResult(reference, i).check(); + + static final _setResult1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__setResult1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public final void setResult(int i, android.content.Intent intent) + void setResult1(int i, Intent intent) => + _setResult1(reference, i, intent.reference).check(); + + static final _getReferrer = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getReferrer") + .asFunction)>(); + + /// from: public android.net.Uri getReferrer() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getReferrer() => + const jni.JObjectType().fromRef(_getReferrer(reference).object); + + static final _onProvideReferrer = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onProvideReferrer") + .asFunction)>(); + + /// from: public android.net.Uri onProvideReferrer() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onProvideReferrer() => + const jni.JObjectType().fromRef(_onProvideReferrer(reference).object); + + static final _getCallingPackage = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getCallingPackage") + .asFunction)>(); + + /// from: public java.lang.String getCallingPackage() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getCallingPackage() => + const jni.JStringType().fromRef(_getCallingPackage(reference).object); + + static final _getCallingActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getCallingActivity") + .asFunction)>(); + + /// from: public android.content.ComponentName getCallingActivity() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getCallingActivity() => + const jni.JObjectType().fromRef(_getCallingActivity(reference).object); + + static final _setVisible = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Uint8)>>("Activity__setVisible") + .asFunction, int)>(); + + /// from: public void setVisible(boolean z) + void setVisible(bool z) => _setVisible(reference, z ? 1 : 0).check(); + + static final _isFinishing = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isFinishing") + .asFunction)>(); + + /// from: public boolean isFinishing() + bool isFinishing() => _isFinishing(reference).boolean; + + static final _isDestroyed = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isDestroyed") + .asFunction)>(); + + /// from: public boolean isDestroyed() + bool isDestroyed() => _isDestroyed(reference).boolean; + + static final _isChangingConfigurations = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isChangingConfigurations") + .asFunction)>(); + + /// from: public boolean isChangingConfigurations() + bool isChangingConfigurations() => + _isChangingConfigurations(reference).boolean; + + static final _recreate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__recreate") + .asFunction)>(); + + /// from: public void recreate() + void recreate() => _recreate(reference).check(); + + static final _finish = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__finish") + .asFunction)>(); + + /// from: public void finish() + void finish() => _finish(reference).check(); + + static final _finishAffinity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__finishAffinity") + .asFunction)>(); + + /// from: public void finishAffinity() + void finishAffinity() => _finishAffinity(reference).check(); + + static final _finishFromChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__finishFromChild") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void finishFromChild(android.app.Activity activity) + void finishFromChild(Activity activity) => + _finishFromChild(reference, activity.reference).check(); + + static final _finishAfterTransition = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__finishAfterTransition") + .asFunction)>(); + + /// from: public void finishAfterTransition() + void finishAfterTransition() => _finishAfterTransition(reference).check(); + + static final _finishActivity = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__finishActivity") + .asFunction, int)>(); + + /// from: public void finishActivity(int i) + void finishActivity(int i) => _finishActivity(reference, i).check(); + + static final _finishActivityFromChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__finishActivityFromChild") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public void finishActivityFromChild(android.app.Activity activity, int i) + void finishActivityFromChild(Activity activity, int i) => + _finishActivityFromChild(reference, activity.reference, i).check(); + + static final _finishAndRemoveTask = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__finishAndRemoveTask") + .asFunction)>(); + + /// from: public void finishAndRemoveTask() + void finishAndRemoveTask() => _finishAndRemoveTask(reference).check(); + + static final _releaseInstance = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__releaseInstance") + .asFunction)>(); + + /// from: public boolean releaseInstance() + bool releaseInstance() => _releaseInstance(reference).boolean; + + static final _onActivityResult = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>("Activity__onActivityResult") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, int, ffi.Pointer)>(); + + /// from: protected void onActivityResult(int i, int i1, android.content.Intent intent) + void onActivityResult(int i, int i1, Intent intent) => + _onActivityResult(reference, i, i1, intent.reference).check(); + + static final _onActivityReenter = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Pointer)>>("Activity__onActivityReenter") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void onActivityReenter(int i, android.content.Intent intent) + void onActivityReenter(int i, Intent intent) => + _onActivityReenter(reference, i, intent.reference).check(); + + static final _createPendingResult = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Int32)>>("Activity__createPendingResult") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer, int)>(); + + /// from: public android.app.PendingIntent createPendingResult(int i, android.content.Intent intent, int i1) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject createPendingResult(int i, Intent intent, int i1) => + const jni.JObjectType().fromRef( + _createPendingResult(reference, i, intent.reference, i1).object); + + static final _setRequestedOrientation = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__setRequestedOrientation") + .asFunction, int)>(); + + /// from: public void setRequestedOrientation(int i) + void setRequestedOrientation(int i) => + _setRequestedOrientation(reference, i).check(); + + static final _getRequestedOrientation = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getRequestedOrientation") + .asFunction)>(); + + /// from: public int getRequestedOrientation() + int getRequestedOrientation() => _getRequestedOrientation(reference).integer; + + static final _getTaskId = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getTaskId") + .asFunction)>(); + + /// from: public int getTaskId() + int getTaskId() => _getTaskId(reference).integer; + + static final _isTaskRoot = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isTaskRoot") + .asFunction)>(); + + /// from: public boolean isTaskRoot() + bool isTaskRoot() => _isTaskRoot(reference).boolean; + + static final _moveTaskToBack = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__moveTaskToBack") + .asFunction, int)>(); + + /// from: public boolean moveTaskToBack(boolean z) + bool moveTaskToBack(bool z) => _moveTaskToBack(reference, z ? 1 : 0).boolean; + + static final _getLocalClassName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getLocalClassName") + .asFunction)>(); + + /// from: public java.lang.String getLocalClassName() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString getLocalClassName() => + const jni.JStringType().fromRef(_getLocalClassName(reference).object); + + static final _getComponentName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getComponentName") + .asFunction)>(); + + /// from: public android.content.ComponentName getComponentName() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getComponentName() => + const jni.JObjectType().fromRef(_getComponentName(reference).object); + + static final _getPreferences = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__getPreferences") + .asFunction, int)>(); + + /// from: public android.content.SharedPreferences getPreferences(int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getPreferences(int i) => + const jni.JObjectType().fromRef(_getPreferences(reference, i).object); + + static final _isLaunchedFromBubble = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isLaunchedFromBubble") + .asFunction)>(); + + /// from: public boolean isLaunchedFromBubble() + bool isLaunchedFromBubble() => _isLaunchedFromBubble(reference).boolean; + + static final _getSystemService = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__getSystemService") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.lang.Object getSystemService(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getSystemService(jni.JString string) => const jni.JObjectType() + .fromRef(_getSystemService(reference, string.reference).object); + + static final _setTitle = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__setTitle") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setTitle(java.lang.CharSequence charSequence) + void setTitle(jni.JObject charSequence) => + _setTitle(reference, charSequence.reference).check(); + + static final _setTitle1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__setTitle1") + .asFunction, int)>(); + + /// from: public void setTitle(int i) + void setTitle1(int i) => _setTitle1(reference, i).check(); + + static final _setTitleColor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__setTitleColor") + .asFunction, int)>(); + + /// from: public void setTitleColor(int i) + void setTitleColor(int i) => _setTitleColor(reference, i).check(); + + static final _getTitle = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getTitle") + .asFunction)>(); + + /// from: public final java.lang.CharSequence getTitle() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getTitle() => + const jni.JObjectType().fromRef(_getTitle(reference).object); + + static final _getTitleColor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getTitleColor") + .asFunction)>(); + + /// from: public final int getTitleColor() + int getTitleColor() => _getTitleColor(reference).integer; + + static final _onTitleChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__onTitleChanged") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: protected void onTitleChanged(java.lang.CharSequence charSequence, int i) + void onTitleChanged(jni.JObject charSequence, int i) => + _onTitleChanged(reference, charSequence.reference, i).check(); + + static final _onChildTitleChanged = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onChildTitleChanged") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: protected void onChildTitleChanged(android.app.Activity activity, java.lang.CharSequence charSequence) + void onChildTitleChanged(Activity activity, jni.JObject charSequence) => + _onChildTitleChanged( + reference, activity.reference, charSequence.reference) + .check(); + + static final _setTaskDescription = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__setTaskDescription") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setTaskDescription(android.app.ActivityManager$TaskDescription taskDescription) + void setTaskDescription(jni.JObject taskDescription) => + _setTaskDescription(reference, taskDescription.reference).check(); + + static final _setProgressBarVisibility = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setProgressBarVisibility") + .asFunction, int)>(); + + /// from: public final void setProgressBarVisibility(boolean z) + void setProgressBarVisibility(bool z) => + _setProgressBarVisibility(reference, z ? 1 : 0).check(); + + static final _setProgressBarIndeterminateVisibility = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Uint8)>>( + "Activity__setProgressBarIndeterminateVisibility") + .asFunction, int)>(); + + /// from: public final void setProgressBarIndeterminateVisibility(boolean z) + void setProgressBarIndeterminateVisibility(bool z) => + _setProgressBarIndeterminateVisibility(reference, z ? 1 : 0).check(); + + static final _setProgressBarIndeterminate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setProgressBarIndeterminate") + .asFunction, int)>(); + + /// from: public final void setProgressBarIndeterminate(boolean z) + void setProgressBarIndeterminate(bool z) => + _setProgressBarIndeterminate(reference, z ? 1 : 0).check(); + + static final _setProgress = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Activity__setProgress") + .asFunction, int)>(); + + /// from: public final void setProgress(int i) + void setProgress(int i) => _setProgress(reference, i).check(); + + static final _setSecondaryProgress = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__setSecondaryProgress") + .asFunction, int)>(); + + /// from: public final void setSecondaryProgress(int i) + void setSecondaryProgress(int i) => + _setSecondaryProgress(reference, i).check(); + + static final _setVolumeControlStream = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Activity__setVolumeControlStream") + .asFunction, int)>(); + + /// from: public final void setVolumeControlStream(int i) + void setVolumeControlStream(int i) => + _setVolumeControlStream(reference, i).check(); + + static final _getVolumeControlStream = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getVolumeControlStream") + .asFunction)>(); + + /// from: public final int getVolumeControlStream() + int getVolumeControlStream() => _getVolumeControlStream(reference).integer; + + static final _setMediaController = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__setMediaController") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final void setMediaController(android.media.session.MediaController mediaController) + void setMediaController(jni.JObject mediaController) => + _setMediaController(reference, mediaController.reference).check(); + + static final _getMediaController = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getMediaController") + .asFunction)>(); + + /// from: public final android.media.session.MediaController getMediaController() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getMediaController() => + const jni.JObjectType().fromRef(_getMediaController(reference).object); + + static final _runOnUiThread = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__runOnUiThread") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final void runOnUiThread(java.lang.Runnable runnable) + void runOnUiThread(jni.JObject runnable) => + _runOnUiThread(reference, runnable.reference).check(); + + static final _onCreateView = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onCreateView") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.view.View onCreateView(java.lang.String string, android.content.Context context, android.util.AttributeSet attributeSet) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onCreateView( + jni.JString string, Context context, jni.JObject attributeSet) => + const jni.JObjectType().fromRef(_onCreateView(reference, string.reference, + context.reference, attributeSet.reference) + .object); + + static final _onCreateView1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__onCreateView1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public android.view.View onCreateView(android.view.View view, java.lang.String string, android.content.Context context, android.util.AttributeSet attributeSet) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onCreateView1(jni.JObject view, jni.JString string, + Context context, jni.JObject attributeSet) => + const jni.JObjectType().fromRef(_onCreateView1(reference, view.reference, + string.reference, context.reference, attributeSet.reference) + .object); + + static final _dump = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__dump") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void dump(java.lang.String string, java.io.FileDescriptor fileDescriptor, java.io.PrintWriter printWriter, java.lang.String[] strings) + void dump(jni.JString string, jni.JObject fileDescriptor, + jni.JObject printWriter, jni.JArray strings) => + _dump(reference, string.reference, fileDescriptor.reference, + printWriter.reference, strings.reference) + .check(); + + static final _isImmersive = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__isImmersive") + .asFunction)>(); + + /// from: public boolean isImmersive() + bool isImmersive() => _isImmersive(reference).boolean; + + static final _setTranslucent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setTranslucent") + .asFunction, int)>(); + + /// from: public boolean setTranslucent(boolean z) + bool setTranslucent(bool z) => _setTranslucent(reference, z ? 1 : 0).boolean; + + static final _requestVisibleBehind = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__requestVisibleBehind") + .asFunction, int)>(); + + /// from: public boolean requestVisibleBehind(boolean z) + bool requestVisibleBehind(bool z) => + _requestVisibleBehind(reference, z ? 1 : 0).boolean; + + static final _onVisibleBehindCanceled = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onVisibleBehindCanceled") + .asFunction)>(); + + /// from: public void onVisibleBehindCanceled() + void onVisibleBehindCanceled() => _onVisibleBehindCanceled(reference).check(); + + static final _onEnterAnimationComplete = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__onEnterAnimationComplete") + .asFunction)>(); + + /// from: public void onEnterAnimationComplete() + void onEnterAnimationComplete() => + _onEnterAnimationComplete(reference).check(); + + static final _setImmersive = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Uint8)>>("Activity__setImmersive") + .asFunction, int)>(); + + /// from: public void setImmersive(boolean z) + void setImmersive(bool z) => _setImmersive(reference, z ? 1 : 0).check(); + + static final _setVrModeEnabled = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Uint8, + ffi.Pointer)>>("Activity__setVrModeEnabled") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void setVrModeEnabled(boolean z, android.content.ComponentName componentName) + void setVrModeEnabled(bool z, jni.JObject componentName) => + _setVrModeEnabled(reference, z ? 1 : 0, componentName.reference).check(); + + static final _startActionMode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__startActionMode") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.view.ActionMode startActionMode(android.view.ActionMode$Callback callback) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject startActionMode(jni.JObject callback) => const jni.JObjectType() + .fromRef(_startActionMode(reference, callback.reference).object); + + static final _startActionMode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__startActionMode1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.view.ActionMode startActionMode(android.view.ActionMode$Callback callback, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject startActionMode1(jni.JObject callback, int i) => + const jni.JObjectType() + .fromRef(_startActionMode1(reference, callback.reference, i).object); + + static final _onWindowStartingActionMode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__onWindowStartingActionMode") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode$Callback callback) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onWindowStartingActionMode(jni.JObject callback) => + const jni.JObjectType().fromRef( + _onWindowStartingActionMode(reference, callback.reference).object); + + static final _onWindowStartingActionMode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Activity__onWindowStartingActionMode1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode$Callback callback, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject onWindowStartingActionMode1(jni.JObject callback, int i) => + const jni.JObjectType().fromRef( + _onWindowStartingActionMode1(reference, callback.reference, i) + .object); + + static final _onActionModeStarted = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onActionModeStarted") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onActionModeStarted(android.view.ActionMode actionMode) + void onActionModeStarted(jni.JObject actionMode) => + _onActionModeStarted(reference, actionMode.reference).check(); + + static final _onActionModeFinished = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__onActionModeFinished") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void onActionModeFinished(android.view.ActionMode actionMode) + void onActionModeFinished(jni.JObject actionMode) => + _onActionModeFinished(reference, actionMode.reference).check(); + + static final _shouldUpRecreateTask = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__shouldUpRecreateTask") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean shouldUpRecreateTask(android.content.Intent intent) + bool shouldUpRecreateTask(Intent intent) => + _shouldUpRecreateTask(reference, intent.reference).boolean; + + static final _navigateUpTo = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Activity__navigateUpTo") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean navigateUpTo(android.content.Intent intent) + bool navigateUpTo(Intent intent) => + _navigateUpTo(reference, intent.reference).boolean; + + static final _navigateUpToFromChild = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Activity__navigateUpToFromChild") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public boolean navigateUpToFromChild(android.app.Activity activity, android.content.Intent intent) + bool navigateUpToFromChild(Activity activity, Intent intent) => + _navigateUpToFromChild(reference, activity.reference, intent.reference) + .boolean; + + static final _getParentActivityIntent = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__getParentActivityIntent") + .asFunction)>(); + + /// from: public android.content.Intent getParentActivityIntent() + /// The returned object must be deleted after use, by calling the `delete` method. + Intent getParentActivityIntent() => + const $IntentType().fromRef(_getParentActivityIntent(reference).object); + + static final _setEnterSharedElementCallback = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__setEnterSharedElementCallback") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setEnterSharedElementCallback(android.app.SharedElementCallback sharedElementCallback) + void setEnterSharedElementCallback(jni.JObject sharedElementCallback) => + _setEnterSharedElementCallback(reference, sharedElementCallback.reference) + .check(); + + static final _setExitSharedElementCallback = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__setExitSharedElementCallback") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void setExitSharedElementCallback(android.app.SharedElementCallback sharedElementCallback) + void setExitSharedElementCallback(jni.JObject sharedElementCallback) => + _setExitSharedElementCallback(reference, sharedElementCallback.reference) + .check(); + + static final _postponeEnterTransition = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__postponeEnterTransition") + .asFunction)>(); + + /// from: public void postponeEnterTransition() + void postponeEnterTransition() => _postponeEnterTransition(reference).check(); + + static final _startPostponedEnterTransition = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__startPostponedEnterTransition") + .asFunction)>(); + + /// from: public void startPostponedEnterTransition() + void startPostponedEnterTransition() => + _startPostponedEnterTransition(reference).check(); + + static final _requestDragAndDropPermissions = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "Activity__requestDragAndDropPermissions") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent dragEvent) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject requestDragAndDropPermissions(jni.JObject dragEvent) => + const jni.JObjectType().fromRef( + _requestDragAndDropPermissions(reference, dragEvent.reference) + .object); + + static final _startLockTask = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__startLockTask") + .asFunction)>(); + + /// from: public void startLockTask() + void startLockTask() => _startLockTask(reference).check(); + + static final _stopLockTask = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Activity__stopLockTask") + .asFunction)>(); + + /// from: public void stopLockTask() + void stopLockTask() => _stopLockTask(reference).check(); + + static final _showLockTaskEscapeMessage = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__showLockTaskEscapeMessage") + .asFunction)>(); + + /// from: public void showLockTaskEscapeMessage() + void showLockTaskEscapeMessage() => + _showLockTaskEscapeMessage(reference).check(); + + static final _setRecentsScreenshotEnabled = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setRecentsScreenshotEnabled") + .asFunction, int)>(); + + /// from: public void setRecentsScreenshotEnabled(boolean z) + void setRecentsScreenshotEnabled(bool z) => + _setRecentsScreenshotEnabled(reference, z ? 1 : 0).check(); + + static final _setShowWhenLocked = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setShowWhenLocked") + .asFunction, int)>(); + + /// from: public void setShowWhenLocked(boolean z) + void setShowWhenLocked(bool z) => + _setShowWhenLocked(reference, z ? 1 : 0).check(); + + static final _setInheritShowWhenLocked = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setInheritShowWhenLocked") + .asFunction, int)>(); + + /// from: public void setInheritShowWhenLocked(boolean z) + void setInheritShowWhenLocked(bool z) => + _setInheritShowWhenLocked(reference, z ? 1 : 0).check(); + + static final _setTurnScreenOn = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Uint8)>>("Activity__setTurnScreenOn") + .asFunction, int)>(); + + /// from: public void setTurnScreenOn(boolean z) + void setTurnScreenOn(bool z) => + _setTurnScreenOn(reference, z ? 1 : 0).check(); + + static final _getOnBackInvokedDispatcher = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>( + "Activity__getOnBackInvokedDispatcher") + .asFunction)>(); + + /// from: public android.window.OnBackInvokedDispatcher getOnBackInvokedDispatcher() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject getOnBackInvokedDispatcher() => const jni.JObjectType() + .fromRef(_getOnBackInvokedDispatcher(reference).object); +} + +class $ActivityType extends jni.JObjType { + const $ActivityType(); + + @override + String get signature => r"Landroid/app/Activity;"; + + @override + Activity fromRef(jni.JObjectPtr ref) => Activity.fromRef(ref); +} + +extension $ActivityArray on jni.JArray { + Activity operator [](int index) { + return (elementType as $ActivityType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, Activity value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: java.time.Instant +class Instant extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + Instant.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $InstantType(); + + static final _get_EPOCH = + jniLookup>( + "get_Instant__EPOCH") + .asFunction(); + + /// from: static public final java.time.Instant EPOCH + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant get EPOCH => const $InstantType().fromRef(_get_EPOCH().object); + + static final _get_MAX = + jniLookup>( + "get_Instant__MAX") + .asFunction(); + + /// from: static public final java.time.Instant MAX + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant get MAX => const $InstantType().fromRef(_get_MAX().object); + + static final _get_MIN = + jniLookup>( + "get_Instant__MIN") + .asFunction(); + + /// from: static public final java.time.Instant MIN + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant get MIN => const $InstantType().fromRef(_get_MIN().object); + + static final _now = + jniLookup>("Instant__now") + .asFunction(); + + /// from: static public java.time.Instant now() + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant now() => const $InstantType().fromRef(_now().object); + + static final _now1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Instant__now1") + .asFunction)>(); + + /// from: static public java.time.Instant now(java.time.Clock clock) + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant now1(jni.JObject clock) => + const $InstantType().fromRef(_now1(clock.reference).object); + + static final _ofEpochSecond = + jniLookup>( + "Instant__ofEpochSecond") + .asFunction(); + + /// from: static public java.time.Instant ofEpochSecond(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant ofEpochSecond(int j) => + const $InstantType().fromRef(_ofEpochSecond(j).object); + + static final _ofEpochSecond1 = jniLookup< + ffi.NativeFunction>( + "Instant__ofEpochSecond1") + .asFunction(); + + /// from: static public java.time.Instant ofEpochSecond(long j, long j1) + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant ofEpochSecond1(int j, int j1) => + const $InstantType().fromRef(_ofEpochSecond1(j, j1).object); + + static final _ofEpochMilli = + jniLookup>( + "Instant__ofEpochMilli") + .asFunction(); + + /// from: static public java.time.Instant ofEpochMilli(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant ofEpochMilli(int j) => + const $InstantType().fromRef(_ofEpochMilli(j).object); + + static final _from = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Instant__from") + .asFunction)>(); + + /// from: static public java.time.Instant from(java.time.temporal.TemporalAccessor temporalAccessor) + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant from(jni.JObject temporalAccessor) => + const $InstantType().fromRef(_from(temporalAccessor.reference).object); + + static final _parse = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Instant__parse") + .asFunction)>(); + + /// from: static public java.time.Instant parse(java.lang.CharSequence charSequence) + /// The returned object must be deleted after use, by calling the `delete` method. + static Instant parse(jni.JObject charSequence) => + const $InstantType().fromRef(_parse(charSequence.reference).object); + + static final _isSupported = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__isSupported") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean isSupported(java.time.temporal.TemporalField temporalField) + bool isSupported(jni.JObject temporalField) => + _isSupported(reference, temporalField.reference).boolean; + + static final _isSupported1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__isSupported1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean isSupported(java.time.temporal.TemporalUnit temporalUnit) + bool isSupported1(jni.JObject temporalUnit) => + _isSupported1(reference, temporalUnit.reference).boolean; + + static final _range = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__range") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.temporal.ValueRange range(java.time.temporal.TemporalField temporalField) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject range(jni.JObject temporalField) => const jni.JObjectType() + .fromRef(_range(reference, temporalField.reference).object); + + static final _get0 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__get0") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public int get(java.time.temporal.TemporalField temporalField) + int get0(jni.JObject temporalField) => + _get0(reference, temporalField.reference).integer; + + static final _getLong = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__getLong") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public long getLong(java.time.temporal.TemporalField temporalField) + int getLong(jni.JObject temporalField) => + _getLong(reference, temporalField.reference).long; + + static final _getEpochSecond = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Instant__getEpochSecond") + .asFunction)>(); + + /// from: public long getEpochSecond() + int getEpochSecond() => _getEpochSecond(reference).long; + + static final _getNano = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Instant__getNano") + .asFunction)>(); + + /// from: public int getNano() + int getNano() => _getNano(reference).integer; + + static final _with0 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__with0") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.Instant with(java.time.temporal.TemporalAdjuster temporalAdjuster) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant with0(jni.JObject temporalAdjuster) => const $InstantType() + .fromRef(_with0(reference, temporalAdjuster.reference).object); + + static final _with1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int64)>>("Instant__with1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public java.time.Instant with(java.time.temporal.TemporalField temporalField, long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant with1(jni.JObject temporalField, int j) => const $InstantType() + .fromRef(_with1(reference, temporalField.reference, j).object); + + static final _truncatedTo = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__truncatedTo") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit temporalUnit) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant truncatedTo(jni.JObject temporalUnit) => const $InstantType() + .fromRef(_truncatedTo(reference, temporalUnit.reference).object); + + static final _plus = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__plus") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.Instant plus(java.time.temporal.TemporalAmount temporalAmount) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant plus(jni.JObject temporalAmount) => const $InstantType() + .fromRef(_plus(reference, temporalAmount.reference).object); + + static final _plus1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int64, + ffi.Pointer)>>("Instant__plus1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public java.time.Instant plus(long j, java.time.temporal.TemporalUnit temporalUnit) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant plus1(int j, jni.JObject temporalUnit) => const $InstantType() + .fromRef(_plus1(reference, j, temporalUnit.reference).object); + + static final _plusSeconds = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Instant__plusSeconds") + .asFunction, int)>(); + + /// from: public java.time.Instant plusSeconds(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant plusSeconds(int j) => + const $InstantType().fromRef(_plusSeconds(reference, j).object); + + static final _plusMillis = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Instant__plusMillis") + .asFunction, int)>(); + + /// from: public java.time.Instant plusMillis(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant plusMillis(int j) => + const $InstantType().fromRef(_plusMillis(reference, j).object); + + static final _plusNanos = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Instant__plusNanos") + .asFunction, int)>(); + + /// from: public java.time.Instant plusNanos(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant plusNanos(int j) => + const $InstantType().fromRef(_plusNanos(reference, j).object); + + static final _minus = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__minus") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.Instant minus(java.time.temporal.TemporalAmount temporalAmount) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant minus(jni.JObject temporalAmount) => const $InstantType() + .fromRef(_minus(reference, temporalAmount.reference).object); + + static final _minus1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int64, + ffi.Pointer)>>("Instant__minus1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public java.time.Instant minus(long j, java.time.temporal.TemporalUnit temporalUnit) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant minus1(int j, jni.JObject temporalUnit) => const $InstantType() + .fromRef(_minus1(reference, j, temporalUnit.reference).object); + + static final _minusSeconds = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Instant__minusSeconds") + .asFunction, int)>(); + + /// from: public java.time.Instant minusSeconds(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant minusSeconds(int j) => + const $InstantType().fromRef(_minusSeconds(reference, j).object); + + static final _minusMillis = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Instant__minusMillis") + .asFunction, int)>(); + + /// from: public java.time.Instant minusMillis(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant minusMillis(int j) => + const $InstantType().fromRef(_minusMillis(reference, j).object); + + static final _minusNanos = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Instant__minusNanos") + .asFunction, int)>(); + + /// from: public java.time.Instant minusNanos(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + Instant minusNanos(int j) => + const $InstantType().fromRef(_minusNanos(reference, j).object); + + static final _query = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__query") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public R query(java.time.temporal.TemporalQuery temporalQuery) + /// The returned object must be deleted after use, by calling the `delete` method. + R query( + jni.JObjType $R, jni.JObject temporalQuery) => + $R.fromRef(_query(reference, temporalQuery.reference).object); + + static final _adjustInto = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__adjustInto") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal temporal) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject adjustInto(jni.JObject temporal) => const jni.JObjectType() + .fromRef(_adjustInto(reference, temporal.reference).object); + + static final _until = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Instant__until") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public long until(java.time.temporal.Temporal temporal, java.time.temporal.TemporalUnit temporalUnit) + int until(jni.JObject temporal, jni.JObject temporalUnit) => + _until(reference, temporal.reference, temporalUnit.reference).long; + + static final _atOffset = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__atOffset") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.OffsetDateTime atOffset(java.time.ZoneOffset zoneOffset) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject atOffset(jni.JObject zoneOffset) => const jni.JObjectType() + .fromRef(_atOffset(reference, zoneOffset.reference).object); + + static final _atZone = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__atZone") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.ZonedDateTime atZone(java.time.ZoneId zoneId) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject atZone(jni.JObject zoneId) => const jni.JObjectType() + .fromRef(_atZone(reference, zoneId.reference).object); + + static final _toEpochMilli = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Instant__toEpochMilli") + .asFunction)>(); + + /// from: public long toEpochMilli() + int toEpochMilli() => _toEpochMilli(reference).long; + + static final _compareTo = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__compareTo") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public int compareTo(java.time.Instant instant) + int compareTo(Instant instant) => + _compareTo(reference, instant.reference).integer; + + static final _isAfter = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__isAfter") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean isAfter(java.time.Instant instant) + bool isAfter(Instant instant) => + _isAfter(reference, instant.reference).boolean; + + static final _isBefore = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__isBefore") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean isBefore(java.time.Instant instant) + bool isBefore(Instant instant) => + _isBefore(reference, instant.reference).boolean; + + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean equals(java.lang.Object object) + bool equals1(jni.JObject object) => + _equals1(reference, object.reference).boolean; + + static final _hashCode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Instant__hashCode1") + .asFunction)>(); + + /// from: public int hashCode() + int hashCode1() => _hashCode1(reference).integer; + + static final _toString1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Instant__toString1") + .asFunction)>(); + + /// from: public java.lang.String toString() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString toString1() => + const jni.JStringType().fromRef(_toString1(reference).object); + + static final _minus2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int64, + ffi.Pointer)>>("Instant__minus2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public java.time.temporal.Temporal minus(long j, java.time.temporal.TemporalUnit temporalUnit) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject minus2(int j, jni.JObject temporalUnit) => const jni.JObjectType() + .fromRef(_minus2(reference, j, temporalUnit.reference).object); + + static final _minus3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__minus3") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.temporal.Temporal minus(java.time.temporal.TemporalAmount temporalAmount) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject minus3(jni.JObject temporalAmount) => const jni.JObjectType() + .fromRef(_minus3(reference, temporalAmount.reference).object); + + static final _plus2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int64, + ffi.Pointer)>>("Instant__plus2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public java.time.temporal.Temporal plus(long j, java.time.temporal.TemporalUnit temporalUnit) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject plus2(int j, jni.JObject temporalUnit) => const jni.JObjectType() + .fromRef(_plus2(reference, j, temporalUnit.reference).object); + + static final _plus3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__plus3") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.temporal.Temporal plus(java.time.temporal.TemporalAmount temporalAmount) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject plus3(jni.JObject temporalAmount) => const jni.JObjectType() + .fromRef(_plus3(reference, temporalAmount.reference).object); + + static final _with2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Int64)>>("Instant__with2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public java.time.temporal.Temporal with(java.time.temporal.TemporalField temporalField, long j) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject with2(jni.JObject temporalField, int j) => const jni.JObjectType() + .fromRef(_with2(reference, temporalField.reference, j).object); + + static final _with3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__with3") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public java.time.temporal.Temporal with(java.time.temporal.TemporalAdjuster temporalAdjuster) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject with3(jni.JObject temporalAdjuster) => const jni.JObjectType() + .fromRef(_with3(reference, temporalAdjuster.reference).object); + + static final _compareTo1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Instant__compareTo1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public int compareTo(java.lang.Object object) + int compareTo1(jni.JObject object) => + _compareTo1(reference, object.reference).integer; +} + +class $InstantType extends jni.JObjType { + const $InstantType(); + + @override + String get signature => r"Ljava/time/Instant;"; + + @override + Instant fromRef(jni.JObjectPtr ref) => Instant.fromRef(ref); +} + +extension $InstantArray on jni.JArray { + Instant operator [](int index) { + return (elementType as $InstantType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, Instant value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: java.lang.Long +class Long extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + Long.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $LongType(); + + /// from: static public final int BYTES + static const BYTES = 8; + + /// from: static public final long MAX_VALUE + static const MAX_VALUE = 9223372036854775807; + + /// from: static public final long MIN_VALUE + static const MIN_VALUE = -9223372036854775808; + + /// from: static public final int SIZE + static const SIZE = 64; + + static final _get_TYPE = + jniLookup>("get_Long__TYPE") + .asFunction(); + + /// from: static public final java.lang.Class TYPE + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JObject get TYPE => + const jni.JObjectType().fromRef(_get_TYPE().object); + + static final _ctor = + jniLookup>( + "Long__ctor") + .asFunction(); + + /// from: public void (long j) + Long(int j) : super.fromRef(_ctor(j).object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__ctor1") + .asFunction)>(); + + /// from: public void (java.lang.String string) + Long.ctor1(jni.JString string) + : super.fromRef(_ctor1(string.reference).object); + + static final _toString1 = jniLookup< + ffi.NativeFunction>( + "Long__toString1") + .asFunction(); + + /// from: static public java.lang.String toString(long j, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toString1(int j, int i) => + const jni.JStringType().fromRef(_toString1(j, i).object); + + static final _toUnsignedString = jniLookup< + ffi.NativeFunction>( + "Long__toUnsignedString") + .asFunction(); + + /// from: static public java.lang.String toUnsignedString(long j, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toUnsignedString(int j, int i) => + const jni.JStringType().fromRef(_toUnsignedString(j, i).object); + + static final _toHexString = + jniLookup>( + "Long__toHexString") + .asFunction(); + + /// from: static public java.lang.String toHexString(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toHexString(int j) => + const jni.JStringType().fromRef(_toHexString(j).object); + + static final _toOctalString = + jniLookup>( + "Long__toOctalString") + .asFunction(); + + /// from: static public java.lang.String toOctalString(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toOctalString(int j) => + const jni.JStringType().fromRef(_toOctalString(j).object); + + static final _toBinaryString = + jniLookup>( + "Long__toBinaryString") + .asFunction(); + + /// from: static public java.lang.String toBinaryString(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toBinaryString(int j) => + const jni.JStringType().fromRef(_toBinaryString(j).object); + + static final _toString2 = + jniLookup>( + "Long__toString2") + .asFunction(); + + /// from: static public java.lang.String toString(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toString2(int j) => + const jni.JStringType().fromRef(_toString2(j).object); + + static final _toUnsignedString1 = + jniLookup>( + "Long__toUnsignedString1") + .asFunction(); + + /// from: static public java.lang.String toUnsignedString(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JString toUnsignedString1(int j) => + const jni.JStringType().fromRef(_toUnsignedString1(j).object); + + static final _parseLong = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Long__parseLong") + .asFunction, int)>(); + + /// from: static public long parseLong(java.lang.String string, int i) + static int parseLong(jni.JString string, int i) => + _parseLong(string.reference, i).long; + + static final _parseLong1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Int32, ffi.Int32)>>("Long__parseLong1") + .asFunction< + jni.JniResult Function(ffi.Pointer, int, int, int)>(); + + /// from: static public long parseLong(java.lang.CharSequence charSequence, int i, int i1, int i2) + static int parseLong1(jni.JObject charSequence, int i, int i1, int i2) => + _parseLong1(charSequence.reference, i, i1, i2).long; + + static final _parseLong2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Long__parseLong2") + .asFunction)>(); + + /// from: static public long parseLong(java.lang.String string) + static int parseLong2(jni.JString string) => + _parseLong2(string.reference).long; + + static final _parseUnsignedLong = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Long__parseUnsignedLong") + .asFunction, int)>(); + + /// from: static public long parseUnsignedLong(java.lang.String string, int i) + static int parseUnsignedLong(jni.JString string, int i) => + _parseUnsignedLong(string.reference, i).long; + + static final _parseUnsignedLong1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, ffi.Int32, + ffi.Int32, ffi.Int32)>>("Long__parseUnsignedLong1") + .asFunction< + jni.JniResult Function(ffi.Pointer, int, int, int)>(); + + /// from: static public long parseUnsignedLong(java.lang.CharSequence charSequence, int i, int i1, int i2) + static int parseUnsignedLong1( + jni.JObject charSequence, int i, int i1, int i2) => + _parseUnsignedLong1(charSequence.reference, i, i1, i2).long; + + static final _parseUnsignedLong2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Long__parseUnsignedLong2") + .asFunction)>(); + + /// from: static public long parseUnsignedLong(java.lang.String string) + static int parseUnsignedLong2(jni.JString string) => + _parseUnsignedLong2(string.reference).long; + + static final _valueOf = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int32)>>("Long__valueOf") + .asFunction, int)>(); + + /// from: static public java.lang.Long valueOf(java.lang.String string, int i) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long valueOf(jni.JString string, int i) => + const $LongType().fromRef(_valueOf(string.reference, i).object); + + static final _valueOf1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__valueOf1") + .asFunction)>(); + + /// from: static public java.lang.Long valueOf(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long valueOf1(jni.JString string) => + const $LongType().fromRef(_valueOf1(string.reference).object); + + static final _valueOf2 = + jniLookup>( + "Long__valueOf2") + .asFunction(); + + /// from: static public java.lang.Long valueOf(long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long valueOf2(int j) => const $LongType().fromRef(_valueOf2(j).object); + + static final _decode = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__decode") + .asFunction)>(); + + /// from: static public java.lang.Long decode(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long decode(jni.JString string) => + const $LongType().fromRef(_decode(string.reference).object); + + static final _byteValue = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__byteValue") + .asFunction)>(); + + /// from: public byte byteValue() + int byteValue() => _byteValue(reference).byte; + + static final _shortValue = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Long__shortValue") + .asFunction)>(); + + /// from: public short shortValue() + int shortValue() => _shortValue(reference).short; + + static final _intValue = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__intValue") + .asFunction)>(); + + /// from: public int intValue() + int intValue() => _intValue(reference).integer; + + static final _longValue = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__longValue") + .asFunction)>(); + + /// from: public long longValue() + int longValue() => _longValue(reference).long; + + static final _floatValue = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Long__floatValue") + .asFunction)>(); + + /// from: public float floatValue() + double floatValue() => _floatValue(reference).float; + + static final _doubleValue = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Long__doubleValue") + .asFunction)>(); + + /// from: public double doubleValue() + double doubleValue() => _doubleValue(reference).doubleFloat; + + static final _toString3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__toString3") + .asFunction)>(); + + /// from: public java.lang.String toString() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JString toString3() => + const jni.JStringType().fromRef(_toString3(reference).object); + + static final _hashCode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__hashCode1") + .asFunction)>(); + + /// from: public int hashCode() + int hashCode1() => _hashCode1(reference).integer; + + static final _hashCode2 = + jniLookup>( + "Long__hashCode2") + .asFunction(); + + /// from: static public int hashCode(long j) + static int hashCode2(int j) => _hashCode2(j).integer; + + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Long__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean equals(java.lang.Object object) + bool equals1(jni.JObject object) => + _equals1(reference, object.reference).boolean; + + static final _getLong = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Long__getLong") + .asFunction)>(); + + /// from: static public java.lang.Long getLong(java.lang.String string) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long getLong(jni.JString string) => + const $LongType().fromRef(_getLong(string.reference).object); + + static final _getLong1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Int64)>>("Long__getLong1") + .asFunction, int)>(); + + /// from: static public java.lang.Long getLong(java.lang.String string, long j) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long getLong1(jni.JString string, int j) => + const $LongType().fromRef(_getLong1(string.reference, j).object); + + static final _getLong2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Long__getLong2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public java.lang.Long getLong(java.lang.String string, java.lang.Long long) + /// The returned object must be deleted after use, by calling the `delete` method. + static Long getLong2(jni.JString string, Long long) => const $LongType() + .fromRef(_getLong2(string.reference, long.reference).object); + + static final _compareTo = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Long__compareTo") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public int compareTo(java.lang.Long long) + int compareTo(Long long) => _compareTo(reference, long.reference).integer; + + static final _compare = jniLookup< + ffi.NativeFunction>( + "Long__compare") + .asFunction(); + + /// from: static public int compare(long j, long j1) + static int compare(int j, int j1) => _compare(j, j1).integer; + + static final _compareUnsigned = jniLookup< + ffi.NativeFunction>( + "Long__compareUnsigned") + .asFunction(); + + /// from: static public int compareUnsigned(long j, long j1) + static int compareUnsigned(int j, int j1) => _compareUnsigned(j, j1).integer; + + static final _divideUnsigned = jniLookup< + ffi.NativeFunction>( + "Long__divideUnsigned") + .asFunction(); + + /// from: static public long divideUnsigned(long j, long j1) + static int divideUnsigned(int j, int j1) => _divideUnsigned(j, j1).long; + + static final _remainderUnsigned = jniLookup< + ffi.NativeFunction>( + "Long__remainderUnsigned") + .asFunction(); + + /// from: static public long remainderUnsigned(long j, long j1) + static int remainderUnsigned(int j, int j1) => _remainderUnsigned(j, j1).long; + + static final _highestOneBit = + jniLookup>( + "Long__highestOneBit") + .asFunction(); + + /// from: static public long highestOneBit(long j) + static int highestOneBit(int j) => _highestOneBit(j).long; + + static final _lowestOneBit = + jniLookup>( + "Long__lowestOneBit") + .asFunction(); + + /// from: static public long lowestOneBit(long j) + static int lowestOneBit(int j) => _lowestOneBit(j).long; + + static final _numberOfLeadingZeros = + jniLookup>( + "Long__numberOfLeadingZeros") + .asFunction(); + + /// from: static public int numberOfLeadingZeros(long j) + static int numberOfLeadingZeros(int j) => _numberOfLeadingZeros(j).integer; + + static final _numberOfTrailingZeros = + jniLookup>( + "Long__numberOfTrailingZeros") + .asFunction(); + + /// from: static public int numberOfTrailingZeros(long j) + static int numberOfTrailingZeros(int j) => _numberOfTrailingZeros(j).integer; + + static final _bitCount = + jniLookup>( + "Long__bitCount") + .asFunction(); + + /// from: static public int bitCount(long j) + static int bitCount(int j) => _bitCount(j).integer; + + static final _rotateLeft = jniLookup< + ffi.NativeFunction>( + "Long__rotateLeft") + .asFunction(); + + /// from: static public long rotateLeft(long j, int i) + static int rotateLeft(int j, int i) => _rotateLeft(j, i).long; + + static final _rotateRight = jniLookup< + ffi.NativeFunction>( + "Long__rotateRight") + .asFunction(); + + /// from: static public long rotateRight(long j, int i) + static int rotateRight(int j, int i) => _rotateRight(j, i).long; + + static final _reverse = + jniLookup>( + "Long__reverse") + .asFunction(); + + /// from: static public long reverse(long j) + static int reverse(int j) => _reverse(j).long; + + static final _signum = + jniLookup>( + "Long__signum") + .asFunction(); + + /// from: static public int signum(long j) + static int signum(int j) => _signum(j).integer; + + static final _reverseBytes = + jniLookup>( + "Long__reverseBytes") + .asFunction(); + + /// from: static public long reverseBytes(long j) + static int reverseBytes(int j) => _reverseBytes(j).long; + + static final _sum = jniLookup< + ffi.NativeFunction>( + "Long__sum") + .asFunction(); + + /// from: static public long sum(long j, long j1) + static int sum(int j, int j1) => _sum(j, j1).long; + + static final _max = jniLookup< + ffi.NativeFunction>( + "Long__max") + .asFunction(); + + /// from: static public long max(long j, long j1) + static int max(int j, int j1) => _max(j, j1).long; + + static final _min = jniLookup< + ffi.NativeFunction>( + "Long__min") + .asFunction(); + + /// from: static public long min(long j, long j1) + static int min(int j, int j1) => _min(j, j1).long; + + static final _compareTo1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Long__compareTo1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public int compareTo(java.lang.Object object) + int compareTo1(jni.JObject object) => + _compareTo1(reference, object.reference).integer; +} + +class $LongType extends jni.JObjType { + const $LongType(); + + @override + String get signature => r"Ljava/lang/Long;"; + + @override + Long fromRef(jni.JObjectPtr ref) => Long.fromRef(ref); +} + +extension $LongArray on jni.JArray { + Long operator [](int index) { + return (elementType as $LongType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, Long value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: java.util.Set +class Set extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type( + $E, + ); + + final jni.JObjType $E; + + Set.fromRef( + this.$E, + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static $SetType type( + jni.JObjType $E, + ) { + return $SetType( + $E, + ); + } + + static final _size = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__size") + .asFunction)>(); + + /// from: public abstract int size() + int size() => _size(reference).integer; + + static final _isEmpty = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__isEmpty") + .asFunction)>(); + + /// from: public abstract boolean isEmpty() + bool isEmpty() => _isEmpty(reference).boolean; + + static final _contains = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Set__contains") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean contains(java.lang.Object object) + bool contains(jni.JObject object) => + _contains(reference, object.reference).boolean; + + static final _iterator = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__iterator") + .asFunction)>(); + + /// from: public abstract java.util.Iterator iterator() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject iterator() => + const jni.JObjectType().fromRef(_iterator(reference).object); + + static final _toArray = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__toArray") + .asFunction)>(); + + /// from: public abstract java.lang.Object[] toArray() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray toArray() => const jni.JArrayType(jni.JObjectType()) + .fromRef(_toArray(reference).object); + + static final _toArray1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Set__toArray1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.Object[] toArray(java.lang.Object[] objects) + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JArray toArray1( + jni.JObjType $T, jni.JArray objects) => + jni.JArrayType($T) + .fromRef(_toArray1(reference, objects.reference).object); + + static final _add = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>("Set__add") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean add(E object) + bool add(E object) => _add(reference, object.reference).boolean; + + static final _remove = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>("Set__remove") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean remove(java.lang.Object object) + bool remove(jni.JObject object) => + _remove(reference, object.reference).boolean; + + static final _containsAll = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Set__containsAll") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean containsAll(java.util.Collection collection) + bool containsAll(jni.JObject collection) => + _containsAll(reference, collection.reference).boolean; + + static final _addAll = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>("Set__addAll") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean addAll(java.util.Collection collection) + bool addAll(jni.JObject collection) => + _addAll(reference, collection.reference).boolean; + + static final _retainAll = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Set__retainAll") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean retainAll(java.util.Collection collection) + bool retainAll(jni.JObject collection) => + _retainAll(reference, collection.reference).boolean; + + static final _removeAll = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Set__removeAll") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean removeAll(java.util.Collection collection) + bool removeAll(jni.JObject collection) => + _removeAll(reference, collection.reference).boolean; + + static final _clear = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__clear") + .asFunction)>(); + + /// from: public abstract void clear() + void clear() => _clear(reference).check(); + + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Set__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract boolean equals(java.lang.Object object) + bool equals1(jni.JObject object) => + _equals1(reference, object.reference).boolean; + + static final _hashCode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__hashCode1") + .asFunction)>(); + + /// from: public abstract int hashCode() + int hashCode1() => _hashCode1(reference).integer; + + static final _spliterator = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("Set__spliterator") + .asFunction)>(); + + /// from: public java.util.Spliterator spliterator() + /// The returned object must be deleted after use, by calling the `delete` method. + jni.JObject spliterator() => + const jni.JObjectType().fromRef(_spliterator(reference).object); + + static final _of = + jniLookup>("Set__of") + .asFunction(); + + /// from: static public java.util.Set of() + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of(jni.JObjType $E) => + $SetType($E).fromRef(_of().object); + + static final _of1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__of1") + .asFunction)>(); + + /// from: static public java.util.Set of(E object) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of1(jni.JObjType $E, E object) => + $SetType($E).fromRef(_of1(object.reference).object); + + static final _of2 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>("Set__of2") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of2( + jni.JObjType $E, E object, E object1) => + $SetType($E).fromRef(_of2(object.reference, object1.reference).object); + + static final _of3 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>("Set__of3") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of3( + jni.JObjType $E, E object, E object1, E object2) => + $SetType($E).fromRef( + _of3(object.reference, object1.reference, object2.reference).object); + + static final _of4 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of4") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of4( + jni.JObjType $E, E object, E object1, E object2, E object3) => + $SetType($E).fromRef(_of4(object.reference, object1.reference, + object2.reference, object3.reference) + .object); + + static final _of5 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of5") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of5(jni.JObjType $E, E object, + E object1, E object2, E object3, E object4) => + $SetType($E).fromRef(_of5(object.reference, object1.reference, + object2.reference, object3.reference, object4.reference) + .object); + + static final _of6 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of6") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of6(jni.JObjType $E, E object, + E object1, E object2, E object3, E object4, E object5) => + $SetType($E).fromRef(_of6( + object.reference, + object1.reference, + object2.reference, + object3.reference, + object4.reference, + object5.reference) + .object); + + static final _of7 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of7") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of7(jni.JObjType $E, E object, + E object1, E object2, E object3, E object4, E object5, E object6) => + $SetType($E).fromRef(_of7( + object.reference, + object1.reference, + object2.reference, + object3.reference, + object4.reference, + object5.reference, + object6.reference) + .object); + + static final _of8 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of8") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6, E object7) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of8( + jni.JObjType $E, + E object, + E object1, + E object2, + E object3, + E object4, + E object5, + E object6, + E object7) => + $SetType($E).fromRef(_of8( + object.reference, + object1.reference, + object2.reference, + object3.reference, + object4.reference, + object5.reference, + object6.reference, + object7.reference) + .object); + + static final _of9 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of9") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6, E object7, E object8) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of9( + jni.JObjType $E, + E object, + E object1, + E object2, + E object3, + E object4, + E object5, + E object6, + E object7, + E object8) => + $SetType($E).fromRef(_of9( + object.reference, + object1.reference, + object2.reference, + object3.reference, + object4.reference, + object5.reference, + object6.reference, + object7.reference, + object8.reference) + .object); + + static final _of10 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("Set__of10") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6, E object7, E object8, E object9) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of10( + jni.JObjType $E, + E object, + E object1, + E object2, + E object3, + E object4, + E object5, + E object6, + E object7, + E object8, + E object9) => + $SetType($E).fromRef(_of10( + object.reference, + object1.reference, + object2.reference, + object3.reference, + object4.reference, + object5.reference, + object6.reference, + object7.reference, + object8.reference, + object9.reference) + .object); + + static final _of11 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__of11") + .asFunction)>(); + + /// from: static public java.util.Set of(java.lang.Object[] objects) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set of11( + jni.JObjType $E, jni.JArray objects) => + $SetType($E).fromRef(_of11(objects.reference).object); + + static final _copyOf = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer)>>("Set__copyOf") + .asFunction)>(); + + /// from: static public java.util.Set copyOf(java.util.Collection collection) + /// The returned object must be deleted after use, by calling the `delete` method. + static Set copyOf( + jni.JObjType $E, jni.JObject collection) => + $SetType($E).fromRef(_copyOf(collection.reference).object); +} + +class $SetType extends jni.JObjType> { + final jni.JObjType $E; + + const $SetType( + this.$E, + ); + + @override + String get signature => r"Ljava/util/Set;"; + + @override + Set fromRef(jni.JObjectPtr ref) => Set.fromRef($E, ref); +} + +extension $SetArray on jni.JArray> { + Set operator [](int index) { + return (elementType as $SetType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, Set value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.request.AggregateGroupByDurationRequest +class AggregateGroupByDurationRequest extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + AggregateGroupByDurationRequest.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $AggregateGroupByDurationRequestType(); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + "AggregateGroupByDurationRequest__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Duration duration, java.util.Set set1) + AggregateGroupByDurationRequest( + Set> set0, + TimeRangeFilter timeRangeFilter, + jni.JObject duration, + Set set1) + : super.fromRef(_ctor(set0.reference, timeRangeFilter.reference, + duration.reference, set1.reference) + .object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "AggregateGroupByDurationRequest__ctor1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Duration duration, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + AggregateGroupByDurationRequest.ctor1( + Set set0, + TimeRangeFilter timeRangeFilter, + jni.JObject duration, + Set set1, + int i, + jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1( + set0.reference, + timeRangeFilter.reference, + duration.reference, + set1.reference, + i, + defaultConstructorMarker.reference) + .object); +} + +class $AggregateGroupByDurationRequestType + extends jni.JObjType { + const $AggregateGroupByDurationRequestType(); + + @override + String get signature => + r"Landroidx/health/connect/client/request/AggregateGroupByDurationRequest;"; + + @override + AggregateGroupByDurationRequest fromRef(jni.JObjectPtr ref) => + AggregateGroupByDurationRequest.fromRef(ref); +} + +extension $AggregateGroupByDurationRequestArray + on jni.JArray { + AggregateGroupByDurationRequest operator [](int index) { + return (elementType as $AggregateGroupByDurationRequestType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, AggregateGroupByDurationRequest value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.request.AggregateGroupByPeriodRequest +class AggregateGroupByPeriodRequest extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + AggregateGroupByPeriodRequest.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $AggregateGroupByPeriodRequestType(); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + "AggregateGroupByPeriodRequest__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Period period, java.util.Set set1) + AggregateGroupByPeriodRequest( + Set> set0, + TimeRangeFilter timeRangeFilter, + jni.JObject period, + Set set1) + : super.fromRef(_ctor(set0.reference, timeRangeFilter.reference, + period.reference, set1.reference) + .object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "AggregateGroupByPeriodRequest__ctor1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Period period, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + AggregateGroupByPeriodRequest.ctor1( + Set set0, + TimeRangeFilter timeRangeFilter, + jni.JObject period, + Set set1, + int i, + jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1( + set0.reference, + timeRangeFilter.reference, + period.reference, + set1.reference, + i, + defaultConstructorMarker.reference) + .object); +} + +class $AggregateGroupByPeriodRequestType + extends jni.JObjType { + const $AggregateGroupByPeriodRequestType(); + + @override + String get signature => + r"Landroidx/health/connect/client/request/AggregateGroupByPeriodRequest;"; + + @override + AggregateGroupByPeriodRequest fromRef(jni.JObjectPtr ref) => + AggregateGroupByPeriodRequest.fromRef(ref); +} + +extension $AggregateGroupByPeriodRequestArray + on jni.JArray { + AggregateGroupByPeriodRequest operator [](int index) { + return (elementType as $AggregateGroupByPeriodRequestType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, AggregateGroupByPeriodRequest value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.request.AggregateRequest +class AggregateRequest extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + AggregateRequest.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $AggregateRequestType(); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("AggregateRequest__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set1) + AggregateRequest(Set> set0, + TimeRangeFilter timeRangeFilter, Set set1) + : super.fromRef( + _ctor(set0.reference, timeRangeFilter.reference, set1.reference) + .object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("AggregateRequest__ctor1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + AggregateRequest.ctor1(Set set0, TimeRangeFilter timeRangeFilter, + Set set1, int i, jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1(set0.reference, timeRangeFilter.reference, + set1.reference, i, defaultConstructorMarker.reference) + .object); +} + +class $AggregateRequestType extends jni.JObjType { + const $AggregateRequestType(); + + @override + String get signature => + r"Landroidx/health/connect/client/request/AggregateRequest;"; + + @override + AggregateRequest fromRef(jni.JObjectPtr ref) => AggregateRequest.fromRef(ref); +} + +extension $AggregateRequestArray on jni.JArray { + AggregateRequest operator [](int index) { + return (elementType as $AggregateRequestType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, AggregateRequest value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.request.ChangesTokenRequest +class ChangesTokenRequest extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + ChangesTokenRequest.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $ChangesTokenRequestType(); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("ChangesTokenRequest__ctor") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (java.util.Set set, java.util.Set set1) + ChangesTokenRequest(Set set0, Set set1) + : super.fromRef(_ctor(set0.reference, set1.reference).object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("ChangesTokenRequest__ctor1") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + int, ffi.Pointer)>(); + + /// from: public void (java.util.Set set, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + ChangesTokenRequest.ctor1(Set set0, Set set1, int i, + jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1(set0.reference, set1.reference, i, + defaultConstructorMarker.reference) + .object); +} + +class $ChangesTokenRequestType extends jni.JObjType { + const $ChangesTokenRequestType(); + + @override + String get signature => + r"Landroidx/health/connect/client/request/ChangesTokenRequest;"; + + @override + ChangesTokenRequest fromRef(jni.JObjectPtr ref) => + ChangesTokenRequest.fromRef(ref); +} + +extension $ChangesTokenRequestArray on jni.JArray { + ChangesTokenRequest operator [](int index) { + return (elementType as $ChangesTokenRequestType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, ChangesTokenRequest value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.request.ReadRecordsRequest +class ReadRecordsRequest extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type( + $T, + ); + + final jni.JObjType $T; + + ReadRecordsRequest.fromRef( + this.$T, + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static $ReadRecordsRequestType type( + jni.JObjType $T, + ) { + return $ReadRecordsRequestType( + $T, + ); + } + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Int32, + ffi.Pointer)>>("ReadRecordsRequest__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, ffi.Pointer)>(); + + /// from: public void (kotlin.reflect.KClass kClass, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set, boolean z, int i, java.lang.String string) + ReadRecordsRequest( + this.$T, + jni.JObject kClass, + TimeRangeFilter timeRangeFilter, + Set set0, + bool z, + int i, + jni.JString string) + : super.fromRef(_ctor(kClass.reference, timeRangeFilter.reference, + set0.reference, z ? 1 : 0, i, string.reference) + .object); + + static final _ctor1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Uint8, + ffi.Int32, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>("ReadRecordsRequest__ctor1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + int, + ffi.Pointer, + int, + ffi.Pointer)>(); + + /// from: public void (kotlin.reflect.KClass kClass, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set, boolean z, int i, java.lang.String string, int i1, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + ReadRecordsRequest.ctor1( + this.$T, + jni.JObject kClass, + TimeRangeFilter timeRangeFilter, + Set set0, + bool z, + int i, + jni.JString string, + int i1, + jni.JObject defaultConstructorMarker) + : super.fromRef(_ctor1( + kClass.reference, + timeRangeFilter.reference, + set0.reference, + z ? 1 : 0, + i, + string.reference, + i1, + defaultConstructorMarker.reference) + .object); + + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("ReadRecordsRequest__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public boolean equals(java.lang.Object object) + bool equals1(jni.JObject object) => + _equals1(reference, object.reference).boolean; + + static final _hashCode1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("ReadRecordsRequest__hashCode1") + .asFunction)>(); + + /// from: public int hashCode() + int hashCode1() => _hashCode1(reference).integer; +} + +class $ReadRecordsRequestType + extends jni.JObjType> { + final jni.JObjType $T; + + const $ReadRecordsRequestType( + this.$T, + ); + + @override + String get signature => + r"Landroidx/health/connect/client/request/ReadRecordsRequest;"; + + @override + ReadRecordsRequest fromRef(jni.JObjectPtr ref) => + ReadRecordsRequest.fromRef($T, ref); +} + +extension $ReadRecordsRequestArray + on jni.JArray> { + ReadRecordsRequest operator [](int index) { + return (elementType as $ReadRecordsRequestType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, ReadRecordsRequest value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.aggregate.AggregationResult +class AggregationResult extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type; + + AggregationResult.fromRef( + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static const type = $AggregationResultType(); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("AggregationResult__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public void (java.util.Map map, java.util.Map map1, java.util.Set set) + AggregationResult(jni.JObject map, jni.JObject map1, Set set0) + : super.fromRef( + _ctor(map.reference, map1.reference, set0.reference).object); + + static final _getDataOrigins = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer)>>("AggregationResult__getDataOrigins") + .asFunction)>(); + + /// from: public final java.util.Set getDataOrigins() + /// The returned object must be deleted after use, by calling the `delete` method. + Set getDataOrigins() => const $SetType(jni.JObjectType()) + .fromRef(_getDataOrigins(reference).object); + + static final _hasMetric = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("AggregationResult__hasMetric") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final boolean hasMetric(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) + bool hasMetric(AggregateMetric aggregateMetric) => + _hasMetric(reference, aggregateMetric.reference).boolean; + + static final _contains = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("AggregationResult__contains") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final boolean contains(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) + bool contains(AggregateMetric aggregateMetric) => + _contains(reference, aggregateMetric.reference).boolean; + + static final _getMetric = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("AggregationResult__getMetric") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final T getMetric(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) + /// The returned object must be deleted after use, by calling the `delete` method. + T getMetric( + jni.JObjType $T, AggregateMetric aggregateMetric) => + $T.fromRef(_getMetric(reference, aggregateMetric.reference).object); + + static final _get0 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("AggregationResult__get0") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final T get(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) + /// The returned object must be deleted after use, by calling the `delete` method. + T get0( + jni.JObjType $T, AggregateMetric aggregateMetric) => + $T.fromRef(_get0(reference, aggregateMetric.reference).object); +} + +class $AggregationResultType extends jni.JObjType { + const $AggregationResultType(); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregationResult;"; + + @override + AggregationResult fromRef(jni.JObjectPtr ref) => + AggregationResult.fromRef(ref); +} + +extension $AggregationResultArray on jni.JArray { + AggregationResult operator [](int index) { + return (elementType as $AggregationResultType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, AggregationResult value) { + (this as jni.JArray)[index] = value; + } +} + +/// from: androidx.health.connect.client.aggregate.AggregateMetric +class AggregateMetric extends jni.JObject { + late final jni.JObjType? _$type; + @override + jni.JObjType get $type => _$type ??= type( + $T, + ); + + final jni.JObjType $T; + + AggregateMetric.fromRef( + this.$T, + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static $AggregateMetricType type( + jni.JObjType $T, + ) { + return $AggregateMetricType( + $T, + ); + } + + static final _get_Companion = + jniLookup>( + "get_AggregateMetric__Companion") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$Companion Companion + /// The returned object must be deleted after use, by calling the `delete` method. + static jni.JObject get Companion => + const jni.JObjectType().fromRef(_get_Companion().object); + + static final _ctor = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>("AggregateMetric__ctor") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public void (androidx.health.connect.client.aggregate.AggregateMetric$Converter converter, java.lang.String string, androidx.health.connect.client.aggregate.AggregateMetric$AggregationType aggregationType, java.lang.String string1) + AggregateMetric(this.$T, jni.JObject converter, jni.JString string, + jni.JObject aggregationType, jni.JString string1) + : super.fromRef(_ctor(converter.reference, string.reference, + aggregationType.reference, string1.reference) + .object); +} + +class $AggregateMetricType + extends jni.JObjType> { + final jni.JObjType $T; + + const $AggregateMetricType( + this.$T, + ); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregateMetric;"; + + @override + AggregateMetric fromRef(jni.JObjectPtr ref) => + AggregateMetric.fromRef($T, ref); +} + +extension $AggregateMetricArray + on jni.JArray> { + AggregateMetric operator [](int index) { + return (elementType as $AggregateMetricType) + .fromRef(elementAt(index, jni.JniCallType.objectType).object); + } + + void operator []=(int index, AggregateMetric value) { + (this as jni.JArray)[index] = value; + } +} diff --git a/experimental/pedometer/lib/main.dart b/experimental/pedometer/lib/main.dart new file mode 100644 index 000000000..ab73b3a23 --- /dev/null +++ b/experimental/pedometer/lib/main.dart @@ -0,0 +1 @@ +void main() {} diff --git a/experimental/pedometer/lib/pedometer_bindings_generated.dart b/experimental/pedometer/lib/pedometer_bindings_generated.dart new file mode 100644 index 000000000..eb254c907 --- /dev/null +++ b/experimental/pedometer/lib/pedometer_bindings_generated.dart @@ -0,0 +1,59658 @@ +// AUTO GENERATED FILE, DO NOT EDIT. +// +// Generated by `package:ffigen`. + +// ignore_for_file: library_private_types_in_public_api +// ignore_for_file: non_constant_identifier_names +// ignore_for_file: camel_case_types +// ignore_for_file: no_leading_underscores_for_local_identifiers +// ignore_for_file: void_checks +// ignore_for_file: constant_identifier_names +// ignore_for_file: annotate_overrides + +import 'dart:ffi' as ffi; +import 'package:ffi/ffi.dart' as pkg_ffi; + +/// Bindings for CM pedometers +class PedometerBindings { + /// Holds the symbol lookup function. + final ffi.Pointer Function(String symbolName) + _lookup; + + /// The symbols are looked up in [dynamicLibrary]. + PedometerBindings(ffi.DynamicLibrary dynamicLibrary) + : _lookup = dynamicLibrary.lookup; + + /// The symbols are looked up with [lookup]. + PedometerBindings.fromLookup( + ffi.Pointer Function(String symbolName) + lookup) + : _lookup = lookup; + + ffi.Pointer _registerName1(String name) { + final cstr = name.toNativeUtf8(); + final sel = _sel_registerName(cstr.cast()); + pkg_ffi.calloc.free(cstr); + return sel; + } + + ffi.Pointer _sel_registerName( + ffi.Pointer str, + ) { + return __sel_registerName( + str, + ); + } + + late final __sel_registerNamePtr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer)>>('sel_registerName'); + late final __sel_registerName = __sel_registerNamePtr + .asFunction Function(ffi.Pointer)>(); + + ffi.Pointer _getClass1(String name) { + final cstr = name.toNativeUtf8(); + final clazz = _objc_getClass(cstr.cast()); + pkg_ffi.calloc.free(cstr); + if (clazz == ffi.nullptr) { + throw Exception('Failed to load Objective-C class: $name'); + } + return clazz; + } + + ffi.Pointer _objc_getClass( + ffi.Pointer str, + ) { + return __objc_getClass( + str, + ); + } + + late final __objc_getClassPtr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer)>>('objc_getClass'); + late final __objc_getClass = __objc_getClassPtr + .asFunction Function(ffi.Pointer)>(); + + ffi.Pointer _objc_retain( + ffi.Pointer value, + ) { + return __objc_retain( + value, + ); + } + + late final __objc_retainPtr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer)>>('objc_retain'); + late final __objc_retain = __objc_retainPtr + .asFunction Function(ffi.Pointer)>(); + + void _objc_release( + ffi.Pointer value, + ) { + return __objc_release( + value, + ); + } + + late final __objc_releasePtr = + _lookup)>>( + 'objc_release'); + late final __objc_release = + __objc_releasePtr.asFunction)>(); + + late final _objc_releaseFinalizer2 = + ffi.NativeFinalizer(__objc_releasePtr.cast()); + late final _class_NSObject1 = _getClass1("NSObject"); + late final _sel_load1 = _registerName1("load"); + void _objc_msgSend_1( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_1( + obj, + sel, + ); + } + + late final __objc_msgSend_1Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initialize1 = _registerName1("initialize"); + late final _sel_init1 = _registerName1("init"); + instancetype _objc_msgSend_2( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_2( + obj, + sel, + ); + } + + late final __objc_msgSend_2Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_2 = __objc_msgSend_2Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_new1 = _registerName1("new"); + late final _sel_allocWithZone_1 = _registerName1("allocWithZone:"); + instancetype _objc_msgSend_3( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_NSZone> zone, + ) { + return __objc_msgSend_3( + obj, + sel, + zone, + ); + } + + late final __objc_msgSend_3Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_NSZone>)>>('objc_msgSend'); + late final __objc_msgSend_3 = __objc_msgSend_3Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_NSZone>)>(); + + late final _sel_alloc1 = _registerName1("alloc"); + late final _sel_dealloc1 = _registerName1("dealloc"); + late final _sel_finalize1 = _registerName1("finalize"); + late final _sel_copy1 = _registerName1("copy"); + late final _sel_mutableCopy1 = _registerName1("mutableCopy"); + late final _sel_copyWithZone_1 = _registerName1("copyWithZone:"); + late final _sel_mutableCopyWithZone_1 = + _registerName1("mutableCopyWithZone:"); + late final _sel_instancesRespondToSelector_1 = + _registerName1("instancesRespondToSelector:"); + bool _objc_msgSend_4( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ) { + return __objc_msgSend_4( + obj, + sel, + aSelector, + ); + } + + late final __objc_msgSend_4Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_4 = __objc_msgSend_4Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + bool _objc_msgSend_0( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer clazz, + ) { + return __objc_msgSend_0( + obj, + sel, + clazz, + ); + } + + late final __objc_msgSend_0Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_isKindOfClass_1 = _registerName1("isKindOfClass:"); + late final _class_Protocol1 = _getClass1("Protocol"); + late final _sel_conformsToProtocol_1 = _registerName1("conformsToProtocol:"); + bool _objc_msgSend_5( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer protocol, + ) { + return __objc_msgSend_5( + obj, + sel, + protocol, + ); + } + + late final __objc_msgSend_5Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_5 = __objc_msgSend_5Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_methodForSelector_1 = _registerName1("methodForSelector:"); + ffi.Pointer> _objc_msgSend_6( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ) { + return __objc_msgSend_6( + obj, + sel, + aSelector, + ); + } + + late final __objc_msgSend_6Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer> Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_6 = __objc_msgSend_6Ptr.asFunction< + ffi.Pointer> Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_instanceMethodForSelector_1 = + _registerName1("instanceMethodForSelector:"); + late final _sel_doesNotRecognizeSelector_1 = + _registerName1("doesNotRecognizeSelector:"); + void _objc_msgSend_7( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ) { + return __objc_msgSend_7( + obj, + sel, + aSelector, + ); + } + + late final __objc_msgSend_7Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_7 = __objc_msgSend_7Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_forwardingTargetForSelector_1 = + _registerName1("forwardingTargetForSelector:"); + ffi.Pointer _objc_msgSend_8( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ) { + return __objc_msgSend_8( + obj, + sel, + aSelector, + ); + } + + late final __objc_msgSend_8Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_8 = __objc_msgSend_8Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSInvocation1 = _getClass1("NSInvocation"); + late final _class_NSMethodSignature1 = _getClass1("NSMethodSignature"); + late final _sel_signatureWithObjCTypes_1 = + _registerName1("signatureWithObjCTypes:"); + ffi.Pointer _objc_msgSend_9( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer types, + ) { + return __objc_msgSend_9( + obj, + sel, + types, + ); + } + + late final __objc_msgSend_9Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_9 = __objc_msgSend_9Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_numberOfArguments1 = _registerName1("numberOfArguments"); + int _objc_msgSend_10( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_10( + obj, + sel, + ); + } + + late final __objc_msgSend_10Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_getArgumentTypeAtIndex_1 = + _registerName1("getArgumentTypeAtIndex:"); + ffi.Pointer _objc_msgSend_11( + ffi.Pointer obj, + ffi.Pointer sel, + int idx, + ) { + return __objc_msgSend_11( + obj, + sel, + idx, + ); + } + + late final __objc_msgSend_11Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_frameLength1 = _registerName1("frameLength"); + late final _sel_isOneway1 = _registerName1("isOneway"); + bool _objc_msgSend_12( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_12( + obj, + sel, + ); + } + + late final __objc_msgSend_12Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_12 = __objc_msgSend_12Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_methodReturnType1 = _registerName1("methodReturnType"); + ffi.Pointer _objc_msgSend_13( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_13( + obj, + sel, + ); + } + + late final __objc_msgSend_13Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_13 = __objc_msgSend_13Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_methodReturnLength1 = _registerName1("methodReturnLength"); + late final _sel_cancelPreviousPerformRequestsWithTarget_selector_object_1 = + _registerName1( + "cancelPreviousPerformRequestsWithTarget:selector:object:"); + void _objc_msgSend_14( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aTarget, + ffi.Pointer aSelector, + ffi.Pointer anArgument, + ) { + return __objc_msgSend_14( + obj, + sel, + aTarget, + aSelector, + anArgument, + ); + } + + late final __objc_msgSend_14Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_14 = __objc_msgSend_14Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_cancelPreviousPerformRequestsWithTarget_1 = + _registerName1("cancelPreviousPerformRequestsWithTarget:"); + void _objc_msgSend_15( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aTarget, + ) { + return __objc_msgSend_15( + obj, + sel, + aTarget, + ); + } + + late final __objc_msgSend_15Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_15 = __objc_msgSend_15Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_accessInstanceVariablesDirectly1 = + _registerName1("accessInstanceVariablesDirectly"); + late final _sel_useStoredAccessor1 = _registerName1("useStoredAccessor"); + late final _class_NSSet1 = _getClass1("NSSet"); + late final _sel_count1 = _registerName1("count"); + late final _sel_member_1 = _registerName1("member:"); + ffi.Pointer _objc_msgSend_16( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer object, + ) { + return __objc_msgSend_16( + obj, + sel, + object, + ); + } + + late final __objc_msgSend_16Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_16 = __objc_msgSend_16Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSEnumerator1 = _getClass1("NSEnumerator"); + late final _sel_nextObject1 = _registerName1("nextObject"); + late final _sel_allObjects1 = _registerName1("allObjects"); + late final _class_NSString1 = _getClass1("NSString"); + late final _sel_length1 = _registerName1("length"); + late final _sel_characterAtIndex_1 = _registerName1("characterAtIndex:"); + int _objc_msgSend_17( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ) { + return __objc_msgSend_17( + obj, + sel, + index, + ); + } + + late final __objc_msgSend_17Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedShort Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_17 = __objc_msgSend_17Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _class_NSCoder1 = _getClass1("NSCoder"); + late final _sel_encodeValueOfObjCType_at_1 = + _registerName1("encodeValueOfObjCType:at:"); + void _objc_msgSend_18( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer type, + ffi.Pointer addr, + ) { + return __objc_msgSend_18( + obj, + sel, + type, + addr, + ); + } + + late final __objc_msgSend_18Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_18 = __objc_msgSend_18Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSData1 = _getClass1("NSData"); + late final _sel_bytes1 = _registerName1("bytes"); + ffi.Pointer _objc_msgSend_19( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_19( + obj, + sel, + ); + } + + late final __objc_msgSend_19Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_19 = __objc_msgSend_19Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_description1 = _registerName1("description"); + ffi.Pointer _objc_msgSend_20( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_20( + obj, + sel, + ); + } + + late final __objc_msgSend_20Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_20 = __objc_msgSend_20Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_getBytes_length_1 = _registerName1("getBytes:length:"); + void _objc_msgSend_21( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + int length, + ) { + return __objc_msgSend_21( + obj, + sel, + buffer, + length, + ); + } + + late final __objc_msgSend_21Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_21 = __objc_msgSend_21Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_getBytes_range_1 = _registerName1("getBytes:range:"); + void _objc_msgSend_22( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + _NSRange range, + ) { + return __objc_msgSend_22( + obj, + sel, + buffer, + range, + ); + } + + late final __objc_msgSend_22Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_22 = __objc_msgSend_22Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + late final _sel_isEqualToData_1 = _registerName1("isEqualToData:"); + bool _objc_msgSend_23( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_23( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_23Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_23 = __objc_msgSend_23Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_subdataWithRange_1 = _registerName1("subdataWithRange:"); + ffi.Pointer _objc_msgSend_24( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_24( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_24Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_24 = __objc_msgSend_24Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_writeToFile_atomically_1 = + _registerName1("writeToFile:atomically:"); + bool _objc_msgSend_25( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool useAuxiliaryFile, + ) { + return __objc_msgSend_25( + obj, + sel, + path, + useAuxiliaryFile, + ); + } + + late final __objc_msgSend_25Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_25 = __objc_msgSend_25Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _class_NSURL1 = _getClass1("NSURL"); + late final _sel_initWithScheme_host_path_1 = + _registerName1("initWithScheme:host:path:"); + instancetype _objc_msgSend_26( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer scheme, + ffi.Pointer host, + ffi.Pointer path, + ) { + return __objc_msgSend_26( + obj, + sel, + scheme, + host, + path, + ); + } + + late final __objc_msgSend_26Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_26 = __objc_msgSend_26Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initFileURLWithPath_isDirectory_relativeToURL_1 = + _registerName1("initFileURLWithPath:isDirectory:relativeToURL:"); + instancetype _objc_msgSend_27( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool isDir, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_27( + obj, + sel, + path, + isDir, + baseURL, + ); + } + + late final __objc_msgSend_27Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_27 = __objc_msgSend_27Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool, ffi.Pointer)>(); + + late final _sel_initFileURLWithPath_relativeToURL_1 = + _registerName1("initFileURLWithPath:relativeToURL:"); + instancetype _objc_msgSend_28( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_28( + obj, + sel, + path, + baseURL, + ); + } + + late final __objc_msgSend_28Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_28 = __objc_msgSend_28Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initFileURLWithPath_isDirectory_1 = + _registerName1("initFileURLWithPath:isDirectory:"); + instancetype _objc_msgSend_29( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool isDir, + ) { + return __objc_msgSend_29( + obj, + sel, + path, + isDir, + ); + } + + late final __objc_msgSend_29Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_29 = __objc_msgSend_29Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_initFileURLWithPath_1 = + _registerName1("initFileURLWithPath:"); + instancetype _objc_msgSend_30( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_30( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_30Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_30 = __objc_msgSend_30Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_fileURLWithPath_isDirectory_relativeToURL_1 = + _registerName1("fileURLWithPath:isDirectory:relativeToURL:"); + ffi.Pointer _objc_msgSend_31( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool isDir, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_31( + obj, + sel, + path, + isDir, + baseURL, + ); + } + + late final __objc_msgSend_31Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_31 = __objc_msgSend_31Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer)>(); + + late final _sel_fileURLWithPath_relativeToURL_1 = + _registerName1("fileURLWithPath:relativeToURL:"); + ffi.Pointer _objc_msgSend_32( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_32( + obj, + sel, + path, + baseURL, + ); + } + + late final __objc_msgSend_32Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_32 = __objc_msgSend_32Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_fileURLWithPath_isDirectory_1 = + _registerName1("fileURLWithPath:isDirectory:"); + ffi.Pointer _objc_msgSend_33( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool isDir, + ) { + return __objc_msgSend_33( + obj, + sel, + path, + isDir, + ); + } + + late final __objc_msgSend_33Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_33 = __objc_msgSend_33Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_fileURLWithPath_1 = _registerName1("fileURLWithPath:"); + ffi.Pointer _objc_msgSend_34( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_34( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_34Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_34 = __objc_msgSend_34Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initFileURLWithFileSystemRepresentation_isDirectory_relativeToURL_1 = + _registerName1( + "initFileURLWithFileSystemRepresentation:isDirectory:relativeToURL:"); + instancetype _objc_msgSend_35( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool isDir, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_35( + obj, + sel, + path, + isDir, + baseURL, + ); + } + + late final __objc_msgSend_35Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_35 = __objc_msgSend_35Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool, ffi.Pointer)>(); + + late final _sel_fileURLWithFileSystemRepresentation_isDirectory_relativeToURL_1 = + _registerName1( + "fileURLWithFileSystemRepresentation:isDirectory:relativeToURL:"); + ffi.Pointer _objc_msgSend_36( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool isDir, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_36( + obj, + sel, + path, + isDir, + baseURL, + ); + } + + late final __objc_msgSend_36Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_36 = __objc_msgSend_36Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer)>(); + + late final _sel_initWithString_1 = _registerName1("initWithString:"); + late final _sel_initWithString_relativeToURL_1 = + _registerName1("initWithString:relativeToURL:"); + late final _sel_URLWithString_1 = _registerName1("URLWithString:"); + late final _sel_URLWithString_relativeToURL_1 = + _registerName1("URLWithString:relativeToURL:"); + late final _sel_initWithDataRepresentation_relativeToURL_1 = + _registerName1("initWithDataRepresentation:relativeToURL:"); + instancetype _objc_msgSend_37( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_37( + obj, + sel, + data, + baseURL, + ); + } + + late final __objc_msgSend_37Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_37 = __objc_msgSend_37Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_URLWithDataRepresentation_relativeToURL_1 = + _registerName1("URLWithDataRepresentation:relativeToURL:"); + ffi.Pointer _objc_msgSend_38( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ffi.Pointer baseURL, + ) { + return __objc_msgSend_38( + obj, + sel, + data, + baseURL, + ); + } + + late final __objc_msgSend_38Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_38 = __objc_msgSend_38Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initAbsoluteURLWithDataRepresentation_relativeToURL_1 = + _registerName1("initAbsoluteURLWithDataRepresentation:relativeToURL:"); + late final _sel_absoluteURLWithDataRepresentation_relativeToURL_1 = + _registerName1("absoluteURLWithDataRepresentation:relativeToURL:"); + late final _sel_dataRepresentation1 = _registerName1("dataRepresentation"); + ffi.Pointer _objc_msgSend_39( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_39( + obj, + sel, + ); + } + + late final __objc_msgSend_39Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_39 = __objc_msgSend_39Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_absoluteString1 = _registerName1("absoluteString"); + late final _sel_relativeString1 = _registerName1("relativeString"); + late final _sel_baseURL1 = _registerName1("baseURL"); + ffi.Pointer _objc_msgSend_40( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_40( + obj, + sel, + ); + } + + late final __objc_msgSend_40Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_40 = __objc_msgSend_40Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_absoluteURL1 = _registerName1("absoluteURL"); + late final _sel_scheme1 = _registerName1("scheme"); + late final _sel_resourceSpecifier1 = _registerName1("resourceSpecifier"); + late final _sel_host1 = _registerName1("host"); + late final _class_NSNumber1 = _getClass1("NSNumber"); + late final _class_NSValue1 = _getClass1("NSValue"); + late final _sel_getValue_size_1 = _registerName1("getValue:size:"); + late final _sel_objCType1 = _registerName1("objCType"); + late final _sel_initWithBytes_objCType_1 = + _registerName1("initWithBytes:objCType:"); + instancetype _objc_msgSend_41( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ffi.Pointer type, + ) { + return __objc_msgSend_41( + obj, + sel, + value, + type, + ); + } + + late final __objc_msgSend_41Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_41 = __objc_msgSend_41Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithCoder_1 = _registerName1("initWithCoder:"); + instancetype _objc_msgSend_42( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer coder, + ) { + return __objc_msgSend_42( + obj, + sel, + coder, + ); + } + + late final __objc_msgSend_42Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_42 = __objc_msgSend_42Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_valueWithBytes_objCType_1 = + _registerName1("valueWithBytes:objCType:"); + ffi.Pointer _objc_msgSend_43( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ffi.Pointer type, + ) { + return __objc_msgSend_43( + obj, + sel, + value, + type, + ); + } + + late final __objc_msgSend_43Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_43 = __objc_msgSend_43Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_value_withObjCType_1 = _registerName1("value:withObjCType:"); + late final _sel_valueWithNonretainedObject_1 = + _registerName1("valueWithNonretainedObject:"); + ffi.Pointer _objc_msgSend_44( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + ) { + return __objc_msgSend_44( + obj, + sel, + anObject, + ); + } + + late final __objc_msgSend_44Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_44 = __objc_msgSend_44Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_nonretainedObjectValue1 = + _registerName1("nonretainedObjectValue"); + late final _sel_valueWithPointer_1 = _registerName1("valueWithPointer:"); + ffi.Pointer _objc_msgSend_45( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer pointer, + ) { + return __objc_msgSend_45( + obj, + sel, + pointer, + ); + } + + late final __objc_msgSend_45Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_45 = __objc_msgSend_45Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_pointerValue1 = _registerName1("pointerValue"); + late final _sel_isEqualToValue_1 = _registerName1("isEqualToValue:"); + bool _objc_msgSend_46( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_46( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_46Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_46 = __objc_msgSend_46Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_getValue_1 = _registerName1("getValue:"); + void _objc_msgSend_47( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_47( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_47Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_47 = __objc_msgSend_47Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_valueWithRange_1 = _registerName1("valueWithRange:"); + ffi.Pointer _objc_msgSend_48( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_48( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_48Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_48 = __objc_msgSend_48Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_rangeValue1 = _registerName1("rangeValue"); + _NSRange _objc_msgSend_49( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_49( + obj, + sel, + ); + } + + late final __objc_msgSend_49Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_49 = __objc_msgSend_49Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_keyPathsForValuesAffectingValueForKey_1 = + _registerName1("keyPathsForValuesAffectingValueForKey:"); + ffi.Pointer _objc_msgSend_50( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_50( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_50Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_50 = __objc_msgSend_50Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_automaticallyNotifiesObserversForKey_1 = + _registerName1("automaticallyNotifiesObserversForKey:"); + bool _objc_msgSend_51( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_51( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_51Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_51 = __objc_msgSend_51Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSArray1 = _getClass1("NSArray"); + late final _sel_objectAtIndex_1 = _registerName1("objectAtIndex:"); + ffi.Pointer _objc_msgSend_52( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ) { + return __objc_msgSend_52( + obj, + sel, + index, + ); + } + + late final __objc_msgSend_52Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_52 = __objc_msgSend_52Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithObjects_count_1 = + _registerName1("initWithObjects:count:"); + instancetype _objc_msgSend_53( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + int cnt, + ) { + return __objc_msgSend_53( + obj, + sel, + objects, + cnt, + ); + } + + late final __objc_msgSend_53Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_53 = __objc_msgSend_53Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>, int)>(); + + late final _sel_arrayByAddingObject_1 = + _registerName1("arrayByAddingObject:"); + ffi.Pointer _objc_msgSend_54( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + ) { + return __objc_msgSend_54( + obj, + sel, + anObject, + ); + } + + late final __objc_msgSend_54Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_54 = __objc_msgSend_54Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_arrayByAddingObjectsFromArray_1 = + _registerName1("arrayByAddingObjectsFromArray:"); + ffi.Pointer _objc_msgSend_55( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherArray, + ) { + return __objc_msgSend_55( + obj, + sel, + otherArray, + ); + } + + late final __objc_msgSend_55Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_55 = __objc_msgSend_55Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_componentsJoinedByString_1 = + _registerName1("componentsJoinedByString:"); + ffi.Pointer _objc_msgSend_56( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer separator, + ) { + return __objc_msgSend_56( + obj, + sel, + separator, + ); + } + + late final __objc_msgSend_56Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_56 = __objc_msgSend_56Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_containsObject_1 = _registerName1("containsObject:"); + late final _sel_descriptionWithLocale_1 = + _registerName1("descriptionWithLocale:"); + ffi.Pointer _objc_msgSend_57( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer locale, + ) { + return __objc_msgSend_57( + obj, + sel, + locale, + ); + } + + late final __objc_msgSend_57Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_57 = __objc_msgSend_57Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_descriptionWithLocale_indent_1 = + _registerName1("descriptionWithLocale:indent:"); + ffi.Pointer _objc_msgSend_58( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer locale, + int level, + ) { + return __objc_msgSend_58( + obj, + sel, + locale, + level, + ); + } + + late final __objc_msgSend_58Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_58 = __objc_msgSend_58Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_firstObjectCommonWithArray_1 = + _registerName1("firstObjectCommonWithArray:"); + ffi.Pointer _objc_msgSend_59( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherArray, + ) { + return __objc_msgSend_59( + obj, + sel, + otherArray, + ); + } + + late final __objc_msgSend_59Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_59 = __objc_msgSend_59Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_getObjects_range_1 = _registerName1("getObjects:range:"); + void _objc_msgSend_60( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + _NSRange range, + ) { + return __objc_msgSend_60( + obj, + sel, + objects, + range, + ); + } + + late final __objc_msgSend_60Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_60 = __objc_msgSend_60Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>, _NSRange)>(); + + late final _sel_indexOfObject_1 = _registerName1("indexOfObject:"); + int _objc_msgSend_61( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + ) { + return __objc_msgSend_61( + obj, + sel, + anObject, + ); + } + + late final __objc_msgSend_61Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_61 = __objc_msgSend_61Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_indexOfObject_inRange_1 = + _registerName1("indexOfObject:inRange:"); + int _objc_msgSend_62( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + _NSRange range, + ) { + return __objc_msgSend_62( + obj, + sel, + anObject, + range, + ); + } + + late final __objc_msgSend_62Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_62 = __objc_msgSend_62Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + late final _sel_indexOfObjectIdenticalTo_1 = + _registerName1("indexOfObjectIdenticalTo:"); + late final _sel_indexOfObjectIdenticalTo_inRange_1 = + _registerName1("indexOfObjectIdenticalTo:inRange:"); + late final _sel_isEqualToArray_1 = _registerName1("isEqualToArray:"); + bool _objc_msgSend_63( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherArray, + ) { + return __objc_msgSend_63( + obj, + sel, + otherArray, + ); + } + + late final __objc_msgSend_63Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_63 = __objc_msgSend_63Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_firstObject1 = _registerName1("firstObject"); + late final _sel_lastObject1 = _registerName1("lastObject"); + late final _sel_objectEnumerator1 = _registerName1("objectEnumerator"); + ffi.Pointer _objc_msgSend_64( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_64( + obj, + sel, + ); + } + + late final __objc_msgSend_64Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_64 = __objc_msgSend_64Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_reverseObjectEnumerator1 = + _registerName1("reverseObjectEnumerator"); + late final _sel_sortedArrayHint1 = _registerName1("sortedArrayHint"); + late final _sel_sortedArrayUsingFunction_context_1 = + _registerName1("sortedArrayUsingFunction:context:"); + ffi.Pointer _objc_msgSend_65( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>> + comparator, + ffi.Pointer context, + ) { + return __objc_msgSend_65( + obj, + sel, + comparator, + context, + ); + } + + late final __objc_msgSend_65Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_65 = __objc_msgSend_65Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>, + ffi.Pointer)>(); + + late final _sel_sortedArrayUsingFunction_context_hint_1 = + _registerName1("sortedArrayUsingFunction:context:hint:"); + ffi.Pointer _objc_msgSend_66( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>> + comparator, + ffi.Pointer context, + ffi.Pointer hint, + ) { + return __objc_msgSend_66( + obj, + sel, + comparator, + context, + hint, + ); + } + + late final __objc_msgSend_66Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_66 = __objc_msgSend_66Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_sortedArrayUsingSelector_1 = + _registerName1("sortedArrayUsingSelector:"); + ffi.Pointer _objc_msgSend_67( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer comparator, + ) { + return __objc_msgSend_67( + obj, + sel, + comparator, + ); + } + + late final __objc_msgSend_67Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_67 = __objc_msgSend_67Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_subarrayWithRange_1 = _registerName1("subarrayWithRange:"); + ffi.Pointer _objc_msgSend_68( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_68( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_68Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_68 = __objc_msgSend_68Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _class_NSError1 = _getClass1("NSError"); + late final _sel_initWithDomain_code_userInfo_1 = + _registerName1("initWithDomain:code:userInfo:"); + instancetype _objc_msgSend_69( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer domain, + int code, + ffi.Pointer dict, + ) { + return __objc_msgSend_69( + obj, + sel, + domain, + code, + dict, + ); + } + + late final __objc_msgSend_69Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_69 = __objc_msgSend_69Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_errorWithDomain_code_userInfo_1 = + _registerName1("errorWithDomain:code:userInfo:"); + late final _sel_domain1 = _registerName1("domain"); + late final _sel_code1 = _registerName1("code"); + int _objc_msgSend_70( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_70( + obj, + sel, + ); + } + + late final __objc_msgSend_70Ptr = _lookup< + ffi.NativeFunction< + ffi.Long Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_70 = __objc_msgSend_70Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_userInfo1 = _registerName1("userInfo"); + late final _sel_localizedDescription1 = + _registerName1("localizedDescription"); + late final _sel_localizedFailureReason1 = + _registerName1("localizedFailureReason"); + late final _sel_localizedRecoverySuggestion1 = + _registerName1("localizedRecoverySuggestion"); + late final _sel_localizedRecoveryOptions1 = + _registerName1("localizedRecoveryOptions"); + ffi.Pointer _objc_msgSend_71( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_71( + obj, + sel, + ); + } + + late final __objc_msgSend_71Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_71 = __objc_msgSend_71Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_recoveryAttempter1 = _registerName1("recoveryAttempter"); + late final _sel_helpAnchor1 = _registerName1("helpAnchor"); + late final _sel_underlyingErrors1 = _registerName1("underlyingErrors"); + ffi.Pointer<_ObjCBlockDesc> _newBlockDesc1() { + final d = + pkg_ffi.calloc.allocate<_ObjCBlockDesc>(ffi.sizeOf<_ObjCBlockDesc>()); + d.ref.reserved = 0; + d.ref.size = ffi.sizeOf<_ObjCBlock>(); + d.ref.copy_helper = ffi.nullptr; + d.ref.dispose_helper = ffi.nullptr; + d.ref.signature = ffi.nullptr; + return d; + } + + late final _objc_block_desc1 = _newBlockDesc1(); + late final _objc_concrete_global_block1 = + _lookup('_NSConcreteGlobalBlock'); + ffi.Pointer<_ObjCBlock> _newBlock1( + ffi.Pointer invoke, ffi.Pointer target) { + final b = pkg_ffi.calloc.allocate<_ObjCBlock>(ffi.sizeOf<_ObjCBlock>()); + b.ref.isa = _objc_concrete_global_block1; + b.ref.flags = 0; + b.ref.reserved = 0; + b.ref.invoke = invoke; + b.ref.target = target; + b.ref.descriptor = _objc_block_desc1; + final copy = _Block_copy(b.cast()).cast<_ObjCBlock>(); + pkg_ffi.calloc.free(b); + return copy; + } + + ffi.Pointer _Block_copy( + ffi.Pointer value, + ) { + return __Block_copy( + value, + ); + } + + late final __Block_copyPtr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer)>>('_Block_copy'); + late final __Block_copy = __Block_copyPtr + .asFunction Function(ffi.Pointer)>(); + + void _Block_release( + ffi.Pointer value, + ) { + return __Block_release( + value, + ); + } + + late final __Block_releasePtr = + _lookup)>>( + '_Block_release'); + late final __Block_release = + __Block_releasePtr.asFunction)>(); + + late final _objc_releaseFinalizer11 = + ffi.NativeFinalizer(__Block_releasePtr.cast()); + late final _sel_setUserInfoValueProviderForDomain_provider_1 = + _registerName1("setUserInfoValueProviderForDomain:provider:"); + void _objc_msgSend_72( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer errorDomain, + ffi.Pointer<_ObjCBlock> provider, + ) { + return __objc_msgSend_72( + obj, + sel, + errorDomain, + provider, + ); + } + + late final __objc_msgSend_72Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_72 = __objc_msgSend_72Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_userInfoValueProviderForDomain_1 = + _registerName1("userInfoValueProviderForDomain:"); + ffi.Pointer<_ObjCBlock> _objc_msgSend_73( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer err, + ffi.Pointer userInfoKey, + ffi.Pointer errorDomain, + ) { + return __objc_msgSend_73( + obj, + sel, + err, + userInfoKey, + errorDomain, + ); + } + + late final __objc_msgSend_73Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_73 = __objc_msgSend_73Ptr.asFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_setKeys_triggerChangeNotificationsForDependentKey_1 = + _registerName1("setKeys:triggerChangeNotificationsForDependentKey:"); + void _objc_msgSend_74( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keys, + ffi.Pointer dependentKey, + ) { + return __objc_msgSend_74( + obj, + sel, + keys, + dependentKey, + ); + } + + late final __objc_msgSend_74Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_74 = __objc_msgSend_74Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_classFallbacksForKeyedArchiver1 = + _registerName1("classFallbacksForKeyedArchiver"); + late final _sel_classForKeyedUnarchiver1 = + _registerName1("classForKeyedUnarchiver"); + late final _sel_writeToURL_error_1 = _registerName1("writeToURL:error:"); + bool _objc_msgSend_75( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer> error, + ) { + return __objc_msgSend_75( + obj, + sel, + url, + error, + ); + } + + late final __objc_msgSend_75Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_75 = __objc_msgSend_75Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_makeObjectsPerformSelector_1 = + _registerName1("makeObjectsPerformSelector:"); + late final _sel_makeObjectsPerformSelector_withObject_1 = + _registerName1("makeObjectsPerformSelector:withObject:"); + void _objc_msgSend_76( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer argument, + ) { + return __objc_msgSend_76( + obj, + sel, + aSelector, + argument, + ); + } + + late final __objc_msgSend_76Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_76 = __objc_msgSend_76Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSIndexSet1 = _getClass1("NSIndexSet"); + late final _sel_indexSet1 = _registerName1("indexSet"); + late final _sel_indexSetWithIndex_1 = _registerName1("indexSetWithIndex:"); + late final _sel_indexSetWithIndexesInRange_1 = + _registerName1("indexSetWithIndexesInRange:"); + instancetype _objc_msgSend_77( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_77( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_77Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_77 = __objc_msgSend_77Ptr.asFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_initWithIndexesInRange_1 = + _registerName1("initWithIndexesInRange:"); + late final _sel_initWithIndexSet_1 = _registerName1("initWithIndexSet:"); + instancetype _objc_msgSend_78( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexSet, + ) { + return __objc_msgSend_78( + obj, + sel, + indexSet, + ); + } + + late final __objc_msgSend_78Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_78 = __objc_msgSend_78Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithIndex_1 = _registerName1("initWithIndex:"); + late final _sel_isEqualToIndexSet_1 = _registerName1("isEqualToIndexSet:"); + bool _objc_msgSend_79( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexSet, + ) { + return __objc_msgSend_79( + obj, + sel, + indexSet, + ); + } + + late final __objc_msgSend_79Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_79 = __objc_msgSend_79Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_firstIndex1 = _registerName1("firstIndex"); + late final _sel_lastIndex1 = _registerName1("lastIndex"); + late final _sel_indexGreaterThanIndex_1 = + _registerName1("indexGreaterThanIndex:"); + int _objc_msgSend_80( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_80( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_80Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_80 = __objc_msgSend_80Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_indexLessThanIndex_1 = _registerName1("indexLessThanIndex:"); + late final _sel_indexGreaterThanOrEqualToIndex_1 = + _registerName1("indexGreaterThanOrEqualToIndex:"); + late final _sel_indexLessThanOrEqualToIndex_1 = + _registerName1("indexLessThanOrEqualToIndex:"); + late final _sel_getIndexes_maxCount_inIndexRange_1 = + _registerName1("getIndexes:maxCount:inIndexRange:"); + int _objc_msgSend_81( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexBuffer, + int bufferSize, + ffi.Pointer<_NSRange> range, + ) { + return __objc_msgSend_81( + obj, + sel, + indexBuffer, + bufferSize, + range, + ); + } + + late final __objc_msgSend_81Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_NSRange>)>>('objc_msgSend'); + late final __objc_msgSend_81 = __objc_msgSend_81Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_NSRange>)>(); + + late final _sel_countOfIndexesInRange_1 = + _registerName1("countOfIndexesInRange:"); + int _objc_msgSend_82( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_82( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_82Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_82 = __objc_msgSend_82Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_containsIndex_1 = _registerName1("containsIndex:"); + bool _objc_msgSend_83( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_83( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_83Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_83 = __objc_msgSend_83Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_containsIndexesInRange_1 = + _registerName1("containsIndexesInRange:"); + bool _objc_msgSend_84( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_84( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_84Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_84 = __objc_msgSend_84Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_containsIndexes_1 = _registerName1("containsIndexes:"); + late final _sel_intersectsIndexesInRange_1 = + _registerName1("intersectsIndexesInRange:"); + late final _sel_enumerateIndexesUsingBlock_1 = + _registerName1("enumerateIndexesUsingBlock:"); + void _objc_msgSend_85( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_85( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_85Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_85 = __objc_msgSend_85Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateIndexesWithOptions_usingBlock_1 = + _registerName1("enumerateIndexesWithOptions:usingBlock:"); + void _objc_msgSend_86( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_86( + obj, + sel, + opts, + block, + ); + } + + late final __objc_msgSend_86Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_86 = __objc_msgSend_86Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateIndexesInRange_options_usingBlock_1 = + _registerName1("enumerateIndexesInRange:options:usingBlock:"); + void _objc_msgSend_87( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_87( + obj, + sel, + range, + opts, + block, + ); + } + + late final __objc_msgSend_87Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_87 = __objc_msgSend_87Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexPassingTest_1 = _registerName1("indexPassingTest:"); + int _objc_msgSend_88( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_88( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_88Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_88 = __objc_msgSend_88Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexWithOptions_passingTest_1 = + _registerName1("indexWithOptions:passingTest:"); + int _objc_msgSend_89( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_89( + obj, + sel, + opts, + predicate, + ); + } + + late final __objc_msgSend_89Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_89 = __objc_msgSend_89Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexInRange_options_passingTest_1 = + _registerName1("indexInRange:options:passingTest:"); + int _objc_msgSend_90( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_90( + obj, + sel, + range, + opts, + predicate, + ); + } + + late final __objc_msgSend_90Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_90 = __objc_msgSend_90Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, _NSRange, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexesPassingTest_1 = _registerName1("indexesPassingTest:"); + ffi.Pointer _objc_msgSend_91( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_91( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_91Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_91 = __objc_msgSend_91Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexesWithOptions_passingTest_1 = + _registerName1("indexesWithOptions:passingTest:"); + ffi.Pointer _objc_msgSend_92( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_92( + obj, + sel, + opts, + predicate, + ); + } + + late final __objc_msgSend_92Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_92 = __objc_msgSend_92Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexesInRange_options_passingTest_1 = + _registerName1("indexesInRange:options:passingTest:"); + ffi.Pointer _objc_msgSend_93( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_93( + obj, + sel, + range, + opts, + predicate, + ); + } + + late final __objc_msgSend_93Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_93 = __objc_msgSend_93Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateRangesUsingBlock_1 = + _registerName1("enumerateRangesUsingBlock:"); + void _objc_msgSend_94( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_94( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_94Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_94 = __objc_msgSend_94Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateRangesWithOptions_usingBlock_1 = + _registerName1("enumerateRangesWithOptions:usingBlock:"); + void _objc_msgSend_95( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_95( + obj, + sel, + opts, + block, + ); + } + + late final __objc_msgSend_95Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_95 = __objc_msgSend_95Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateRangesInRange_options_usingBlock_1 = + _registerName1("enumerateRangesInRange:options:usingBlock:"); + void _objc_msgSend_96( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_96( + obj, + sel, + range, + opts, + block, + ); + } + + late final __objc_msgSend_96Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_96 = __objc_msgSend_96Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_objectsAtIndexes_1 = _registerName1("objectsAtIndexes:"); + ffi.Pointer _objc_msgSend_97( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + ) { + return __objc_msgSend_97( + obj, + sel, + indexes, + ); + } + + late final __objc_msgSend_97Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_97 = __objc_msgSend_97Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_objectAtIndexedSubscript_1 = + _registerName1("objectAtIndexedSubscript:"); + late final _sel_enumerateObjectsUsingBlock_1 = + _registerName1("enumerateObjectsUsingBlock:"); + void _objc_msgSend_98( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_98( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_98Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_98 = __objc_msgSend_98Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateObjectsWithOptions_usingBlock_1 = + _registerName1("enumerateObjectsWithOptions:usingBlock:"); + void _objc_msgSend_99( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_99( + obj, + sel, + opts, + block, + ); + } + + late final __objc_msgSend_99Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_99 = __objc_msgSend_99Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateObjectsAtIndexes_options_usingBlock_1 = + _registerName1("enumerateObjectsAtIndexes:options:usingBlock:"); + void _objc_msgSend_100( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer s, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_100( + obj, + sel, + s, + opts, + block, + ); + } + + late final __objc_msgSend_100Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_100 = __objc_msgSend_100Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexOfObjectPassingTest_1 = + _registerName1("indexOfObjectPassingTest:"); + int _objc_msgSend_101( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_101( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_101Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_101 = __objc_msgSend_101Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexOfObjectWithOptions_passingTest_1 = + _registerName1("indexOfObjectWithOptions:passingTest:"); + int _objc_msgSend_102( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_102( + obj, + sel, + opts, + predicate, + ); + } + + late final __objc_msgSend_102Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_102 = __objc_msgSend_102Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexOfObjectAtIndexes_options_passingTest_1 = + _registerName1("indexOfObjectAtIndexes:options:passingTest:"); + int _objc_msgSend_103( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer s, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_103( + obj, + sel, + s, + opts, + predicate, + ); + } + + late final __objc_msgSend_103Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_103 = __objc_msgSend_103Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexesOfObjectsPassingTest_1 = + _registerName1("indexesOfObjectsPassingTest:"); + ffi.Pointer _objc_msgSend_104( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_104( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_104Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_104 = __objc_msgSend_104Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexesOfObjectsWithOptions_passingTest_1 = + _registerName1("indexesOfObjectsWithOptions:passingTest:"); + ffi.Pointer _objc_msgSend_105( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_105( + obj, + sel, + opts, + predicate, + ); + } + + late final __objc_msgSend_105Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_105 = __objc_msgSend_105Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexesOfObjectsAtIndexes_options_passingTest_1 = + _registerName1("indexesOfObjectsAtIndexes:options:passingTest:"); + ffi.Pointer _objc_msgSend_106( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer s, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_106( + obj, + sel, + s, + opts, + predicate, + ); + } + + late final __objc_msgSend_106Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_106 = __objc_msgSend_106Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_sortedArrayUsingComparator_1 = + _registerName1("sortedArrayUsingComparator:"); + ffi.Pointer _objc_msgSend_107( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> cmptr, + ) { + return __objc_msgSend_107( + obj, + sel, + cmptr, + ); + } + + late final __objc_msgSend_107Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_107 = __objc_msgSend_107Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_sortedArrayWithOptions_usingComparator_1 = + _registerName1("sortedArrayWithOptions:usingComparator:"); + ffi.Pointer _objc_msgSend_108( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> cmptr, + ) { + return __objc_msgSend_108( + obj, + sel, + opts, + cmptr, + ); + } + + late final __objc_msgSend_108Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_108 = __objc_msgSend_108Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_indexOfObject_inSortedRange_options_usingComparator_1 = + _registerName1("indexOfObject:inSortedRange:options:usingComparator:"); + int _objc_msgSend_109( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer obj1, + _NSRange r, + int opts, + ffi.Pointer<_ObjCBlock> cmp, + ) { + return __objc_msgSend_109( + obj, + sel, + obj1, + r, + opts, + cmp, + ); + } + + late final __objc_msgSend_109Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_109 = __objc_msgSend_109Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_array1 = _registerName1("array"); + late final _sel_arrayWithObject_1 = _registerName1("arrayWithObject:"); + late final _sel_arrayWithObjects_count_1 = + _registerName1("arrayWithObjects:count:"); + late final _sel_arrayWithObjects_1 = _registerName1("arrayWithObjects:"); + late final _sel_arrayWithArray_1 = _registerName1("arrayWithArray:"); + late final _sel_initWithObjects_1 = _registerName1("initWithObjects:"); + late final _sel_initWithArray_1 = _registerName1("initWithArray:"); + late final _sel_initWithArray_copyItems_1 = + _registerName1("initWithArray:copyItems:"); + instancetype _objc_msgSend_110( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer array, + bool flag, + ) { + return __objc_msgSend_110( + obj, + sel, + array, + flag, + ); + } + + late final __objc_msgSend_110Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_110 = __objc_msgSend_110Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_initWithContentsOfURL_error_1 = + _registerName1("initWithContentsOfURL:error:"); + ffi.Pointer _objc_msgSend_111( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer> error, + ) { + return __objc_msgSend_111( + obj, + sel, + url, + error, + ); + } + + late final __objc_msgSend_111Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_111 = __objc_msgSend_111Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_arrayWithContentsOfURL_error_1 = + _registerName1("arrayWithContentsOfURL:error:"); + late final _sel_differenceFromArray_withOptions_usingEquivalenceTest_1 = + _registerName1("differenceFromArray:withOptions:usingEquivalenceTest:"); + ffi.Pointer _objc_msgSend_112( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + int options, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_112( + obj, + sel, + other, + options, + block, + ); + } + + late final __objc_msgSend_112Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_112 = __objc_msgSend_112Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_differenceFromArray_withOptions_1 = + _registerName1("differenceFromArray:withOptions:"); + ffi.Pointer _objc_msgSend_113( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + int options, + ) { + return __objc_msgSend_113( + obj, + sel, + other, + options, + ); + } + + late final __objc_msgSend_113Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_113 = __objc_msgSend_113Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_differenceFromArray_1 = + _registerName1("differenceFromArray:"); + late final _sel_arrayByApplyingDifference_1 = + _registerName1("arrayByApplyingDifference:"); + late final _sel_getObjects_1 = _registerName1("getObjects:"); + void _objc_msgSend_114( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + ) { + return __objc_msgSend_114( + obj, + sel, + objects, + ); + } + + late final __objc_msgSend_114Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_114 = __objc_msgSend_114Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_arrayWithContentsOfFile_1 = + _registerName1("arrayWithContentsOfFile:"); + ffi.Pointer _objc_msgSend_115( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_115( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_115Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_115 = __objc_msgSend_115Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_arrayWithContentsOfURL_1 = + _registerName1("arrayWithContentsOfURL:"); + ffi.Pointer _objc_msgSend_116( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_116( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_116Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_116 = __objc_msgSend_116Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithContentsOfFile_1 = + _registerName1("initWithContentsOfFile:"); + late final _sel_initWithContentsOfURL_1 = + _registerName1("initWithContentsOfURL:"); + late final _sel_writeToURL_atomically_1 = + _registerName1("writeToURL:atomically:"); + bool _objc_msgSend_117( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + bool atomically, + ) { + return __objc_msgSend_117( + obj, + sel, + url, + atomically, + ); + } + + late final __objc_msgSend_117Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_117 = __objc_msgSend_117Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_pathsMatchingExtensions_1 = + _registerName1("pathsMatchingExtensions:"); + late final _sel_valueForKey_1 = _registerName1("valueForKey:"); + late final _sel_setValue_forKey_1 = _registerName1("setValue:forKey:"); + void _objc_msgSend_118( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ffi.Pointer key, + ) { + return __objc_msgSend_118( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_118Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_118 = __objc_msgSend_118Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_addObserver_toObjectsAtIndexes_forKeyPath_options_context_1 = + _registerName1( + "addObserver:toObjectsAtIndexes:forKeyPath:options:context:"); + void _objc_msgSend_119( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer observer, + ffi.Pointer indexes, + ffi.Pointer keyPath, + int options, + ffi.Pointer context, + ) { + return __objc_msgSend_119( + obj, + sel, + observer, + indexes, + keyPath, + options, + context, + ); + } + + late final __objc_msgSend_119Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_119 = __objc_msgSend_119Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_removeObserver_fromObjectsAtIndexes_forKeyPath_context_1 = + _registerName1("removeObserver:fromObjectsAtIndexes:forKeyPath:context:"); + void _objc_msgSend_120( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer observer, + ffi.Pointer indexes, + ffi.Pointer keyPath, + ffi.Pointer context, + ) { + return __objc_msgSend_120( + obj, + sel, + observer, + indexes, + keyPath, + context, + ); + } + + late final __objc_msgSend_120Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_120 = __objc_msgSend_120Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeObserver_fromObjectsAtIndexes_forKeyPath_1 = + _registerName1("removeObserver:fromObjectsAtIndexes:forKeyPath:"); + void _objc_msgSend_121( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer observer, + ffi.Pointer indexes, + ffi.Pointer keyPath, + ) { + return __objc_msgSend_121( + obj, + sel, + observer, + indexes, + keyPath, + ); + } + + late final __objc_msgSend_121Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_121 = __objc_msgSend_121Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_addObserver_forKeyPath_options_context_1 = + _registerName1("addObserver:forKeyPath:options:context:"); + void _objc_msgSend_122( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer observer, + ffi.Pointer keyPath, + int options, + ffi.Pointer context, + ) { + return __objc_msgSend_122( + obj, + sel, + observer, + keyPath, + options, + context, + ); + } + + late final __objc_msgSend_122Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_122 = __objc_msgSend_122Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_removeObserver_forKeyPath_context_1 = + _registerName1("removeObserver:forKeyPath:context:"); + void _objc_msgSend_123( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer observer, + ffi.Pointer keyPath, + ffi.Pointer context, + ) { + return __objc_msgSend_123( + obj, + sel, + observer, + keyPath, + context, + ); + } + + late final __objc_msgSend_123Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_123 = __objc_msgSend_123Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeObserver_forKeyPath_1 = + _registerName1("removeObserver:forKeyPath:"); + void _objc_msgSend_124( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer observer, + ffi.Pointer keyPath, + ) { + return __objc_msgSend_124( + obj, + sel, + observer, + keyPath, + ); + } + + late final __objc_msgSend_124Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_124 = __objc_msgSend_124Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_sortedArrayUsingDescriptors_1 = + _registerName1("sortedArrayUsingDescriptors:"); + late final _class_NSPredicate1 = _getClass1("NSPredicate"); + late final _sel_predicateWithFormat_argumentArray_1 = + _registerName1("predicateWithFormat:argumentArray:"); + ffi.Pointer _objc_msgSend_125( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer predicateFormat, + ffi.Pointer arguments, + ) { + return __objc_msgSend_125( + obj, + sel, + predicateFormat, + arguments, + ); + } + + late final __objc_msgSend_125Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_125 = __objc_msgSend_125Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_predicateWithFormat_1 = + _registerName1("predicateWithFormat:"); + ffi.Pointer _objc_msgSend_126( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer predicateFormat, + ) { + return __objc_msgSend_126( + obj, + sel, + predicateFormat, + ); + } + + late final __objc_msgSend_126Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_126 = __objc_msgSend_126Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_predicateWithFormat_arguments_1 = + _registerName1("predicateWithFormat:arguments:"); + ffi.Pointer _objc_msgSend_127( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer predicateFormat, + ffi.Pointer argList, + ) { + return __objc_msgSend_127( + obj, + sel, + predicateFormat, + argList, + ); + } + + late final __objc_msgSend_127Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_127 = __objc_msgSend_127Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_predicateFromMetadataQueryString_1 = + _registerName1("predicateFromMetadataQueryString:"); + late final _sel_predicateWithValue_1 = _registerName1("predicateWithValue:"); + ffi.Pointer _objc_msgSend_128( + ffi.Pointer obj, + ffi.Pointer sel, + bool value, + ) { + return __objc_msgSend_128( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_128Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_128 = __objc_msgSend_128Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _class_NSDictionary1 = _getClass1("NSDictionary"); + late final _sel_objectForKey_1 = _registerName1("objectForKey:"); + late final _sel_keyEnumerator1 = _registerName1("keyEnumerator"); + late final _sel_initWithObjects_forKeys_count_1 = + _registerName1("initWithObjects:forKeys:count:"); + instancetype _objc_msgSend_129( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + ffi.Pointer> keys, + int cnt, + ) { + return __objc_msgSend_129( + obj, + sel, + objects, + keys, + cnt, + ); + } + + late final __objc_msgSend_129Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_129 = __objc_msgSend_129Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + int)>(); + + late final _sel_allKeys1 = _registerName1("allKeys"); + late final _sel_allKeysForObject_1 = _registerName1("allKeysForObject:"); + late final _sel_allValues1 = _registerName1("allValues"); + late final _sel_descriptionInStringsFileFormat1 = + _registerName1("descriptionInStringsFileFormat"); + late final _sel_isEqualToDictionary_1 = + _registerName1("isEqualToDictionary:"); + bool _objc_msgSend_130( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherDictionary, + ) { + return __objc_msgSend_130( + obj, + sel, + otherDictionary, + ); + } + + late final __objc_msgSend_130Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_130 = __objc_msgSend_130Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_objectsForKeys_notFoundMarker_1 = + _registerName1("objectsForKeys:notFoundMarker:"); + ffi.Pointer _objc_msgSend_131( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keys, + ffi.Pointer marker, + ) { + return __objc_msgSend_131( + obj, + sel, + keys, + marker, + ); + } + + late final __objc_msgSend_131Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_131 = __objc_msgSend_131Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_keysSortedByValueUsingSelector_1 = + _registerName1("keysSortedByValueUsingSelector:"); + late final _sel_getObjects_andKeys_count_1 = + _registerName1("getObjects:andKeys:count:"); + void _objc_msgSend_132( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + ffi.Pointer> keys, + int count, + ) { + return __objc_msgSend_132( + obj, + sel, + objects, + keys, + count, + ); + } + + late final __objc_msgSend_132Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_132 = __objc_msgSend_132Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>, + int)>(); + + late final _sel_objectForKeyedSubscript_1 = + _registerName1("objectForKeyedSubscript:"); + late final _sel_enumerateKeysAndObjectsUsingBlock_1 = + _registerName1("enumerateKeysAndObjectsUsingBlock:"); + void _objc_msgSend_133( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_133( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_133Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_133 = __objc_msgSend_133Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateKeysAndObjectsWithOptions_usingBlock_1 = + _registerName1("enumerateKeysAndObjectsWithOptions:usingBlock:"); + void _objc_msgSend_134( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_134( + obj, + sel, + opts, + block, + ); + } + + late final __objc_msgSend_134Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_134 = __objc_msgSend_134Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_keysSortedByValueUsingComparator_1 = + _registerName1("keysSortedByValueUsingComparator:"); + late final _sel_keysSortedByValueWithOptions_usingComparator_1 = + _registerName1("keysSortedByValueWithOptions:usingComparator:"); + late final _sel_keysOfEntriesPassingTest_1 = + _registerName1("keysOfEntriesPassingTest:"); + ffi.Pointer _objc_msgSend_135( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_135( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_135Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_135 = __objc_msgSend_135Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_keysOfEntriesWithOptions_passingTest_1 = + _registerName1("keysOfEntriesWithOptions:passingTest:"); + ffi.Pointer _objc_msgSend_136( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_136( + obj, + sel, + opts, + predicate, + ); + } + + late final __objc_msgSend_136Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_136 = __objc_msgSend_136Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_getObjects_andKeys_1 = _registerName1("getObjects:andKeys:"); + void _objc_msgSend_137( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + ffi.Pointer> keys, + ) { + return __objc_msgSend_137( + obj, + sel, + objects, + keys, + ); + } + + late final __objc_msgSend_137Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_137 = __objc_msgSend_137Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_dictionaryWithContentsOfFile_1 = + _registerName1("dictionaryWithContentsOfFile:"); + ffi.Pointer _objc_msgSend_138( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_138( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_138Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_138 = __objc_msgSend_138Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dictionaryWithContentsOfURL_1 = + _registerName1("dictionaryWithContentsOfURL:"); + ffi.Pointer _objc_msgSend_139( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_139( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_139Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_139 = __objc_msgSend_139Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dictionary1 = _registerName1("dictionary"); + late final _sel_dictionaryWithObject_forKey_1 = + _registerName1("dictionaryWithObject:forKey:"); + instancetype _objc_msgSend_140( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer object, + ffi.Pointer key, + ) { + return __objc_msgSend_140( + obj, + sel, + object, + key, + ); + } + + late final __objc_msgSend_140Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_140 = __objc_msgSend_140Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dictionaryWithObjects_forKeys_count_1 = + _registerName1("dictionaryWithObjects:forKeys:count:"); + late final _sel_dictionaryWithObjectsAndKeys_1 = + _registerName1("dictionaryWithObjectsAndKeys:"); + late final _sel_dictionaryWithDictionary_1 = + _registerName1("dictionaryWithDictionary:"); + instancetype _objc_msgSend_141( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer dict, + ) { + return __objc_msgSend_141( + obj, + sel, + dict, + ); + } + + late final __objc_msgSend_141Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_141 = __objc_msgSend_141Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_dictionaryWithObjects_forKeys_1 = + _registerName1("dictionaryWithObjects:forKeys:"); + instancetype _objc_msgSend_142( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer objects, + ffi.Pointer keys, + ) { + return __objc_msgSend_142( + obj, + sel, + objects, + keys, + ); + } + + late final __objc_msgSend_142Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_142 = __objc_msgSend_142Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithObjectsAndKeys_1 = + _registerName1("initWithObjectsAndKeys:"); + late final _sel_initWithDictionary_1 = _registerName1("initWithDictionary:"); + late final _sel_initWithDictionary_copyItems_1 = + _registerName1("initWithDictionary:copyItems:"); + instancetype _objc_msgSend_143( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherDictionary, + bool flag, + ) { + return __objc_msgSend_143( + obj, + sel, + otherDictionary, + flag, + ); + } + + late final __objc_msgSend_143Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_143 = __objc_msgSend_143Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_initWithObjects_forKeys_1 = + _registerName1("initWithObjects:forKeys:"); + ffi.Pointer _objc_msgSend_144( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer> error, + ) { + return __objc_msgSend_144( + obj, + sel, + url, + error, + ); + } + + late final __objc_msgSend_144Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_144 = __objc_msgSend_144Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_dictionaryWithContentsOfURL_error_1 = + _registerName1("dictionaryWithContentsOfURL:error:"); + late final _sel_sharedKeySetForKeys_1 = + _registerName1("sharedKeySetForKeys:"); + late final _sel_countByEnumeratingWithState_objects_count_1 = + _registerName1("countByEnumeratingWithState:objects:count:"); + int _objc_msgSend_145( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer state, + ffi.Pointer> buffer, + int len, + ) { + return __objc_msgSend_145( + obj, + sel, + state, + buffer, + len, + ); + } + + late final __objc_msgSend_145Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_145 = __objc_msgSend_145Ptr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + int)>(); + + late final _sel_fileSize1 = _registerName1("fileSize"); + int _objc_msgSend_146( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_146( + obj, + sel, + ); + } + + late final __objc_msgSend_146Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLongLong Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_146 = __objc_msgSend_146Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSDate1 = _getClass1("NSDate"); + late final _sel_timeIntervalSinceReferenceDate1 = + _registerName1("timeIntervalSinceReferenceDate"); + double _objc_msgSend_147( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_147( + obj, + sel, + ); + } + + late final __objc_msgSend_147Ptr = _lookup< + ffi.NativeFunction< + ffi.Double Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_147 = __objc_msgSend_147Ptr.asFunction< + double Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithTimeIntervalSinceReferenceDate_1 = + _registerName1("initWithTimeIntervalSinceReferenceDate:"); + instancetype _objc_msgSend_148( + ffi.Pointer obj, + ffi.Pointer sel, + double ti, + ) { + return __objc_msgSend_148( + obj, + sel, + ti, + ); + } + + late final __objc_msgSend_148Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_148 = __objc_msgSend_148Ptr.asFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_timeIntervalSinceDate_1 = + _registerName1("timeIntervalSinceDate:"); + double _objc_msgSend_149( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anotherDate, + ) { + return __objc_msgSend_149( + obj, + sel, + anotherDate, + ); + } + + late final __objc_msgSend_149Ptr = _lookup< + ffi.NativeFunction< + ffi.Double Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_149 = __objc_msgSend_149Ptr.asFunction< + double Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_timeIntervalSinceNow1 = + _registerName1("timeIntervalSinceNow"); + late final _sel_timeIntervalSince19701 = + _registerName1("timeIntervalSince1970"); + late final _sel_addTimeInterval_1 = _registerName1("addTimeInterval:"); + late final _sel_dateByAddingTimeInterval_1 = + _registerName1("dateByAddingTimeInterval:"); + late final _sel_earlierDate_1 = _registerName1("earlierDate:"); + ffi.Pointer _objc_msgSend_150( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anotherDate, + ) { + return __objc_msgSend_150( + obj, + sel, + anotherDate, + ); + } + + late final __objc_msgSend_150Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_150 = __objc_msgSend_150Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_laterDate_1 = _registerName1("laterDate:"); + late final _sel_compare_1 = _registerName1("compare:"); + int _objc_msgSend_151( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_151( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_151Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_151 = __objc_msgSend_151Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_isEqualToDate_1 = _registerName1("isEqualToDate:"); + bool _objc_msgSend_152( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherDate, + ) { + return __objc_msgSend_152( + obj, + sel, + otherDate, + ); + } + + late final __objc_msgSend_152Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_152 = __objc_msgSend_152Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_date1 = _registerName1("date"); + late final _sel_dateWithTimeIntervalSinceNow_1 = + _registerName1("dateWithTimeIntervalSinceNow:"); + late final _sel_dateWithTimeIntervalSinceReferenceDate_1 = + _registerName1("dateWithTimeIntervalSinceReferenceDate:"); + late final _sel_dateWithTimeIntervalSince1970_1 = + _registerName1("dateWithTimeIntervalSince1970:"); + late final _sel_dateWithTimeInterval_sinceDate_1 = + _registerName1("dateWithTimeInterval:sinceDate:"); + instancetype _objc_msgSend_153( + ffi.Pointer obj, + ffi.Pointer sel, + double secsToBeAdded, + ffi.Pointer date, + ) { + return __objc_msgSend_153( + obj, + sel, + secsToBeAdded, + date, + ); + } + + late final __objc_msgSend_153Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Double, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_153 = __objc_msgSend_153Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + double, ffi.Pointer)>(); + + late final _sel_distantFuture1 = _registerName1("distantFuture"); + ffi.Pointer _objc_msgSend_154( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_154( + obj, + sel, + ); + } + + late final __objc_msgSend_154Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_154 = __objc_msgSend_154Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_distantPast1 = _registerName1("distantPast"); + late final _sel_now1 = _registerName1("now"); + late final _sel_initWithTimeIntervalSinceNow_1 = + _registerName1("initWithTimeIntervalSinceNow:"); + late final _sel_initWithTimeIntervalSince1970_1 = + _registerName1("initWithTimeIntervalSince1970:"); + late final _sel_initWithTimeInterval_sinceDate_1 = + _registerName1("initWithTimeInterval:sinceDate:"); + late final _sel_fileModificationDate1 = + _registerName1("fileModificationDate"); + late final _sel_fileType1 = _registerName1("fileType"); + late final _sel_filePosixPermissions1 = + _registerName1("filePosixPermissions"); + late final _sel_fileOwnerAccountName1 = + _registerName1("fileOwnerAccountName"); + late final _sel_fileGroupOwnerAccountName1 = + _registerName1("fileGroupOwnerAccountName"); + late final _sel_fileSystemNumber1 = _registerName1("fileSystemNumber"); + late final _sel_fileSystemFileNumber1 = + _registerName1("fileSystemFileNumber"); + late final _sel_fileExtensionHidden1 = _registerName1("fileExtensionHidden"); + late final _sel_fileHFSCreatorCode1 = _registerName1("fileHFSCreatorCode"); + int _objc_msgSend_155( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_155( + obj, + sel, + ); + } + + late final __objc_msgSend_155Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedInt Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_155 = __objc_msgSend_155Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_fileHFSTypeCode1 = _registerName1("fileHFSTypeCode"); + late final _sel_fileIsImmutable1 = _registerName1("fileIsImmutable"); + late final _sel_fileIsAppendOnly1 = _registerName1("fileIsAppendOnly"); + late final _sel_fileCreationDate1 = _registerName1("fileCreationDate"); + late final _sel_fileOwnerAccountID1 = _registerName1("fileOwnerAccountID"); + ffi.Pointer _objc_msgSend_156( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_156( + obj, + sel, + ); + } + + late final __objc_msgSend_156Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_156 = __objc_msgSend_156Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_fileGroupOwnerAccountID1 = + _registerName1("fileGroupOwnerAccountID"); + late final _sel_predicateWithBlock_1 = _registerName1("predicateWithBlock:"); + ffi.Pointer _objc_msgSend_157( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_157( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_157Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_157 = __objc_msgSend_157Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_predicateFormat1 = _registerName1("predicateFormat"); + late final _sel_predicateWithSubstitutionVariables_1 = + _registerName1("predicateWithSubstitutionVariables:"); + late final _sel_evaluateWithObject_1 = _registerName1("evaluateWithObject:"); + late final _sel_evaluateWithObject_substitutionVariables_1 = + _registerName1("evaluateWithObject:substitutionVariables:"); + bool _objc_msgSend_158( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer object, + ffi.Pointer bindings, + ) { + return __objc_msgSend_158( + obj, + sel, + object, + bindings, + ); + } + + late final __objc_msgSend_158Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_158 = __objc_msgSend_158Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_allowEvaluation1 = _registerName1("allowEvaluation"); + late final _sel_filteredArrayUsingPredicate_1 = + _registerName1("filteredArrayUsingPredicate:"); + ffi.Pointer _objc_msgSend_159( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer predicate, + ) { + return __objc_msgSend_159( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_159Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_159 = __objc_msgSend_159Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithChar_1 = _registerName1("initWithChar:"); + ffi.Pointer _objc_msgSend_160( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_160( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_160Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Char)>>('objc_msgSend'); + late final __objc_msgSend_160 = __objc_msgSend_160Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithUnsignedChar_1 = + _registerName1("initWithUnsignedChar:"); + ffi.Pointer _objc_msgSend_161( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_161( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_161Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedChar)>>('objc_msgSend'); + late final __objc_msgSend_161 = __objc_msgSend_161Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithShort_1 = _registerName1("initWithShort:"); + ffi.Pointer _objc_msgSend_162( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_162( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_162Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Short)>>('objc_msgSend'); + late final __objc_msgSend_162 = __objc_msgSend_162Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithUnsignedShort_1 = + _registerName1("initWithUnsignedShort:"); + ffi.Pointer _objc_msgSend_163( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_163( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_163Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedShort)>>('objc_msgSend'); + late final __objc_msgSend_163 = __objc_msgSend_163Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithInt_1 = _registerName1("initWithInt:"); + ffi.Pointer _objc_msgSend_164( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_164( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_164Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int)>>('objc_msgSend'); + late final __objc_msgSend_164 = __objc_msgSend_164Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithUnsignedInt_1 = + _registerName1("initWithUnsignedInt:"); + ffi.Pointer _objc_msgSend_165( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_165( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_165Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedInt)>>('objc_msgSend'); + late final __objc_msgSend_165 = __objc_msgSend_165Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithLong_1 = _registerName1("initWithLong:"); + ffi.Pointer _objc_msgSend_166( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_166( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_166Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_166 = __objc_msgSend_166Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithUnsignedLong_1 = + _registerName1("initWithUnsignedLong:"); + ffi.Pointer _objc_msgSend_167( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_167( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_167Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_167 = __objc_msgSend_167Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithLongLong_1 = _registerName1("initWithLongLong:"); + ffi.Pointer _objc_msgSend_168( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_168( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_168Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.LongLong)>>('objc_msgSend'); + late final __objc_msgSend_168 = __objc_msgSend_168Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithUnsignedLongLong_1 = + _registerName1("initWithUnsignedLongLong:"); + ffi.Pointer _objc_msgSend_169( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_169( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_169Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLongLong)>>('objc_msgSend'); + late final __objc_msgSend_169 = __objc_msgSend_169Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithFloat_1 = _registerName1("initWithFloat:"); + ffi.Pointer _objc_msgSend_170( + ffi.Pointer obj, + ffi.Pointer sel, + double value, + ) { + return __objc_msgSend_170( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_170Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Float)>>('objc_msgSend'); + late final __objc_msgSend_170 = __objc_msgSend_170Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_initWithDouble_1 = _registerName1("initWithDouble:"); + ffi.Pointer _objc_msgSend_171( + ffi.Pointer obj, + ffi.Pointer sel, + double value, + ) { + return __objc_msgSend_171( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_171Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_171 = __objc_msgSend_171Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_initWithBool_1 = _registerName1("initWithBool:"); + ffi.Pointer _objc_msgSend_172( + ffi.Pointer obj, + ffi.Pointer sel, + bool value, + ) { + return __objc_msgSend_172( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_172Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_172 = __objc_msgSend_172Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_initWithInteger_1 = _registerName1("initWithInteger:"); + late final _sel_initWithUnsignedInteger_1 = + _registerName1("initWithUnsignedInteger:"); + late final _sel_charValue1 = _registerName1("charValue"); + int _objc_msgSend_173( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_173( + obj, + sel, + ); + } + + late final __objc_msgSend_173Ptr = _lookup< + ffi.NativeFunction< + ffi.Char Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_173 = __objc_msgSend_173Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_unsignedCharValue1 = _registerName1("unsignedCharValue"); + int _objc_msgSend_174( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_174( + obj, + sel, + ); + } + + late final __objc_msgSend_174Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedChar Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_174 = __objc_msgSend_174Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_shortValue1 = _registerName1("shortValue"); + int _objc_msgSend_175( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_175( + obj, + sel, + ); + } + + late final __objc_msgSend_175Ptr = _lookup< + ffi.NativeFunction< + ffi.Short Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_175 = __objc_msgSend_175Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_unsignedShortValue1 = _registerName1("unsignedShortValue"); + int _objc_msgSend_176( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_176( + obj, + sel, + ); + } + + late final __objc_msgSend_176Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedShort Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_176 = __objc_msgSend_176Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_intValue1 = _registerName1("intValue"); + int _objc_msgSend_177( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_177( + obj, + sel, + ); + } + + late final __objc_msgSend_177Ptr = _lookup< + ffi.NativeFunction< + ffi.Int Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_177 = __objc_msgSend_177Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_unsignedIntValue1 = _registerName1("unsignedIntValue"); + late final _sel_longValue1 = _registerName1("longValue"); + late final _sel_unsignedLongValue1 = _registerName1("unsignedLongValue"); + late final _sel_longLongValue1 = _registerName1("longLongValue"); + int _objc_msgSend_178( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_178( + obj, + sel, + ); + } + + late final __objc_msgSend_178Ptr = _lookup< + ffi.NativeFunction< + ffi.LongLong Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_178 = __objc_msgSend_178Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_unsignedLongLongValue1 = + _registerName1("unsignedLongLongValue"); + late final _sel_floatValue1 = _registerName1("floatValue"); + double _objc_msgSend_179( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_179( + obj, + sel, + ); + } + + late final __objc_msgSend_179Ptr = _lookup< + ffi.NativeFunction< + ffi.Float Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_179 = __objc_msgSend_179Ptr.asFunction< + double Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_doubleValue1 = _registerName1("doubleValue"); + late final _sel_boolValue1 = _registerName1("boolValue"); + late final _sel_integerValue1 = _registerName1("integerValue"); + late final _sel_unsignedIntegerValue1 = + _registerName1("unsignedIntegerValue"); + late final _sel_stringValue1 = _registerName1("stringValue"); + int _objc_msgSend_180( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherNumber, + ) { + return __objc_msgSend_180( + obj, + sel, + otherNumber, + ); + } + + late final __objc_msgSend_180Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_180 = __objc_msgSend_180Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_isEqualToNumber_1 = _registerName1("isEqualToNumber:"); + bool _objc_msgSend_181( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer number, + ) { + return __objc_msgSend_181( + obj, + sel, + number, + ); + } + + late final __objc_msgSend_181Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_181 = __objc_msgSend_181Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_numberWithChar_1 = _registerName1("numberWithChar:"); + late final _sel_numberWithUnsignedChar_1 = + _registerName1("numberWithUnsignedChar:"); + late final _sel_numberWithShort_1 = _registerName1("numberWithShort:"); + late final _sel_numberWithUnsignedShort_1 = + _registerName1("numberWithUnsignedShort:"); + late final _sel_numberWithInt_1 = _registerName1("numberWithInt:"); + late final _sel_numberWithUnsignedInt_1 = + _registerName1("numberWithUnsignedInt:"); + late final _sel_numberWithLong_1 = _registerName1("numberWithLong:"); + late final _sel_numberWithUnsignedLong_1 = + _registerName1("numberWithUnsignedLong:"); + late final _sel_numberWithLongLong_1 = _registerName1("numberWithLongLong:"); + late final _sel_numberWithUnsignedLongLong_1 = + _registerName1("numberWithUnsignedLongLong:"); + late final _sel_numberWithFloat_1 = _registerName1("numberWithFloat:"); + late final _sel_numberWithDouble_1 = _registerName1("numberWithDouble:"); + late final _sel_numberWithBool_1 = _registerName1("numberWithBool:"); + late final _sel_numberWithInteger_1 = _registerName1("numberWithInteger:"); + late final _sel_numberWithUnsignedInteger_1 = + _registerName1("numberWithUnsignedInteger:"); + late final _sel_port1 = _registerName1("port"); + late final _sel_user1 = _registerName1("user"); + late final _sel_password1 = _registerName1("password"); + late final _sel_path1 = _registerName1("path"); + late final _sel_fragment1 = _registerName1("fragment"); + late final _sel_parameterString1 = _registerName1("parameterString"); + late final _sel_query1 = _registerName1("query"); + late final _sel_relativePath1 = _registerName1("relativePath"); + late final _sel_hasDirectoryPath1 = _registerName1("hasDirectoryPath"); + late final _sel_getFileSystemRepresentation_maxLength_1 = + _registerName1("getFileSystemRepresentation:maxLength:"); + bool _objc_msgSend_182( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + int maxBufferLength, + ) { + return __objc_msgSend_182( + obj, + sel, + buffer, + maxBufferLength, + ); + } + + late final __objc_msgSend_182Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_182 = __objc_msgSend_182Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_fileSystemRepresentation1 = + _registerName1("fileSystemRepresentation"); + late final _sel_isFileURL1 = _registerName1("isFileURL"); + late final _sel_standardizedURL1 = _registerName1("standardizedURL"); + late final _sel_checkResourceIsReachableAndReturnError_1 = + _registerName1("checkResourceIsReachableAndReturnError:"); + bool _objc_msgSend_183( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> error, + ) { + return __objc_msgSend_183( + obj, + sel, + error, + ); + } + + late final __objc_msgSend_183Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_183 = __objc_msgSend_183Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_isFileReferenceURL1 = _registerName1("isFileReferenceURL"); + late final _sel_fileReferenceURL1 = _registerName1("fileReferenceURL"); + late final _sel_filePathURL1 = _registerName1("filePathURL"); + late final _sel_getResourceValue_forKey_error_1 = + _registerName1("getResourceValue:forKey:error:"); + bool _objc_msgSend_184( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> value, + ffi.Pointer key, + ffi.Pointer> error, + ) { + return __objc_msgSend_184( + obj, + sel, + value, + key, + error, + ); + } + + late final __objc_msgSend_184Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_184 = __objc_msgSend_184Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_resourceValuesForKeys_error_1 = + _registerName1("resourceValuesForKeys:error:"); + ffi.Pointer _objc_msgSend_185( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keys, + ffi.Pointer> error, + ) { + return __objc_msgSend_185( + obj, + sel, + keys, + error, + ); + } + + late final __objc_msgSend_185Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_185 = __objc_msgSend_185Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_setResourceValue_forKey_error_1 = + _registerName1("setResourceValue:forKey:error:"); + bool _objc_msgSend_186( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ffi.Pointer key, + ffi.Pointer> error, + ) { + return __objc_msgSend_186( + obj, + sel, + value, + key, + error, + ); + } + + late final __objc_msgSend_186Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_186 = __objc_msgSend_186Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_setResourceValues_error_1 = + _registerName1("setResourceValues:error:"); + bool _objc_msgSend_187( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keyedValues, + ffi.Pointer> error, + ) { + return __objc_msgSend_187( + obj, + sel, + keyedValues, + error, + ); + } + + late final __objc_msgSend_187Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_187 = __objc_msgSend_187Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_removeCachedResourceValueForKey_1 = + _registerName1("removeCachedResourceValueForKey:"); + void _objc_msgSend_188( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_188( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_188Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_188 = __objc_msgSend_188Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeAllCachedResourceValues1 = + _registerName1("removeAllCachedResourceValues"); + late final _sel_setTemporaryResourceValue_forKey_1 = + _registerName1("setTemporaryResourceValue:forKey:"); + late final _sel_bookmarkDataWithOptions_includingResourceValuesForKeys_relativeToURL_error_1 = + _registerName1( + "bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error:"); + ffi.Pointer _objc_msgSend_189( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ffi.Pointer keys, + ffi.Pointer relativeURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_189( + obj, + sel, + options, + keys, + relativeURL, + error, + ); + } + + late final __objc_msgSend_189Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_189 = __objc_msgSend_189Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_1 = + _registerName1( + "initByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:"); + instancetype _objc_msgSend_190( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bookmarkData, + int options, + ffi.Pointer relativeURL, + ffi.Pointer isStale, + ffi.Pointer> error, + ) { + return __objc_msgSend_190( + obj, + sel, + bookmarkData, + options, + relativeURL, + isStale, + error, + ); + } + + late final __objc_msgSend_190Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_190 = __objc_msgSend_190Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_URLByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_1 = + _registerName1( + "URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:"); + late final _sel_resourceValuesForKeys_fromBookmarkData_1 = + _registerName1("resourceValuesForKeys:fromBookmarkData:"); + ffi.Pointer _objc_msgSend_191( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keys, + ffi.Pointer bookmarkData, + ) { + return __objc_msgSend_191( + obj, + sel, + keys, + bookmarkData, + ); + } + + late final __objc_msgSend_191Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_191 = __objc_msgSend_191Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_writeBookmarkData_toURL_options_error_1 = + _registerName1("writeBookmarkData:toURL:options:error:"); + bool _objc_msgSend_192( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bookmarkData, + ffi.Pointer bookmarkFileURL, + int options, + ffi.Pointer> error, + ) { + return __objc_msgSend_192( + obj, + sel, + bookmarkData, + bookmarkFileURL, + options, + error, + ); + } + + late final __objc_msgSend_192Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_192 = __objc_msgSend_192Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_bookmarkDataWithContentsOfURL_error_1 = + _registerName1("bookmarkDataWithContentsOfURL:error:"); + ffi.Pointer _objc_msgSend_193( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bookmarkFileURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_193( + obj, + sel, + bookmarkFileURL, + error, + ); + } + + late final __objc_msgSend_193Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_193 = __objc_msgSend_193Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_URLByResolvingAliasFileAtURL_options_error_1 = + _registerName1("URLByResolvingAliasFileAtURL:options:error:"); + instancetype _objc_msgSend_194( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int options, + ffi.Pointer> error, + ) { + return __objc_msgSend_194( + obj, + sel, + url, + options, + error, + ); + } + + late final __objc_msgSend_194Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_194 = __objc_msgSend_194Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_startAccessingSecurityScopedResource1 = + _registerName1("startAccessingSecurityScopedResource"); + late final _sel_stopAccessingSecurityScopedResource1 = + _registerName1("stopAccessingSecurityScopedResource"); + late final _sel_getPromisedItemResourceValue_forKey_error_1 = + _registerName1("getPromisedItemResourceValue:forKey:error:"); + late final _sel_promisedItemResourceValuesForKeys_error_1 = + _registerName1("promisedItemResourceValuesForKeys:error:"); + ffi.Pointer _objc_msgSend_195( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keys, + ffi.Pointer> error, + ) { + return __objc_msgSend_195( + obj, + sel, + keys, + error, + ); + } + + late final __objc_msgSend_195Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_195 = __objc_msgSend_195Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_checkPromisedItemIsReachableAndReturnError_1 = + _registerName1("checkPromisedItemIsReachableAndReturnError:"); + late final _sel_fileURLWithPathComponents_1 = + _registerName1("fileURLWithPathComponents:"); + ffi.Pointer _objc_msgSend_196( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer components, + ) { + return __objc_msgSend_196( + obj, + sel, + components, + ); + } + + late final __objc_msgSend_196Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_196 = __objc_msgSend_196Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_pathComponents1 = _registerName1("pathComponents"); + late final _sel_lastPathComponent1 = _registerName1("lastPathComponent"); + late final _sel_pathExtension1 = _registerName1("pathExtension"); + late final _sel_URLByAppendingPathComponent_1 = + _registerName1("URLByAppendingPathComponent:"); + late final _sel_URLByAppendingPathComponent_isDirectory_1 = + _registerName1("URLByAppendingPathComponent:isDirectory:"); + late final _sel_URLByDeletingLastPathComponent1 = + _registerName1("URLByDeletingLastPathComponent"); + late final _sel_URLByAppendingPathExtension_1 = + _registerName1("URLByAppendingPathExtension:"); + late final _sel_URLByDeletingPathExtension1 = + _registerName1("URLByDeletingPathExtension"); + late final _sel_URLByStandardizingPath1 = + _registerName1("URLByStandardizingPath"); + late final _sel_URLByResolvingSymlinksInPath1 = + _registerName1("URLByResolvingSymlinksInPath"); + late final _sel_resourceDataUsingCache_1 = + _registerName1("resourceDataUsingCache:"); + ffi.Pointer _objc_msgSend_197( + ffi.Pointer obj, + ffi.Pointer sel, + bool shouldUseCache, + ) { + return __objc_msgSend_197( + obj, + sel, + shouldUseCache, + ); + } + + late final __objc_msgSend_197Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_197 = __objc_msgSend_197Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_loadResourceDataNotifyingClient_usingCache_1 = + _registerName1("loadResourceDataNotifyingClient:usingCache:"); + void _objc_msgSend_198( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer client, + bool shouldUseCache, + ) { + return __objc_msgSend_198( + obj, + sel, + client, + shouldUseCache, + ); + } + + late final __objc_msgSend_198Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_198 = __objc_msgSend_198Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_propertyForKey_1 = _registerName1("propertyForKey:"); + late final _sel_setResourceData_1 = _registerName1("setResourceData:"); + late final _sel_setProperty_forKey_1 = _registerName1("setProperty:forKey:"); + bool _objc_msgSend_199( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer property, + ffi.Pointer propertyKey, + ) { + return __objc_msgSend_199( + obj, + sel, + property, + propertyKey, + ); + } + + late final __objc_msgSend_199Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_199 = __objc_msgSend_199Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_URLHandleUsingCache_1 = + _registerName1("URLHandleUsingCache:"); + ffi.Pointer _objc_msgSend_200( + ffi.Pointer obj, + ffi.Pointer sel, + bool shouldUseCache, + ) { + return __objc_msgSend_200( + obj, + sel, + shouldUseCache, + ); + } + + late final __objc_msgSend_200Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_200 = __objc_msgSend_200Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_writeToFile_options_error_1 = + _registerName1("writeToFile:options:error:"); + bool _objc_msgSend_201( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + int writeOptionsMask, + ffi.Pointer> errorPtr, + ) { + return __objc_msgSend_201( + obj, + sel, + path, + writeOptionsMask, + errorPtr, + ); + } + + late final __objc_msgSend_201Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_201 = __objc_msgSend_201Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_writeToURL_options_error_1 = + _registerName1("writeToURL:options:error:"); + bool _objc_msgSend_202( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int writeOptionsMask, + ffi.Pointer> errorPtr, + ) { + return __objc_msgSend_202( + obj, + sel, + url, + writeOptionsMask, + errorPtr, + ); + } + + late final __objc_msgSend_202Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_202 = __objc_msgSend_202Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_rangeOfData_options_range_1 = + _registerName1("rangeOfData:options:range:"); + _NSRange _objc_msgSend_203( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer dataToFind, + int mask, + _NSRange searchRange, + ) { + return __objc_msgSend_203( + obj, + sel, + dataToFind, + mask, + searchRange, + ); + } + + late final __objc_msgSend_203Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_203 = __objc_msgSend_203Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange)>(); + + late final _sel_enumerateByteRangesUsingBlock_1 = + _registerName1("enumerateByteRangesUsingBlock:"); + void _objc_msgSend_204( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_204( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_204Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_204 = __objc_msgSend_204Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_data1 = _registerName1("data"); + late final _sel_dataWithBytes_length_1 = + _registerName1("dataWithBytes:length:"); + instancetype _objc_msgSend_205( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int length, + ) { + return __objc_msgSend_205( + obj, + sel, + bytes, + length, + ); + } + + late final __objc_msgSend_205Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_205 = __objc_msgSend_205Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_dataWithBytesNoCopy_length_1 = + _registerName1("dataWithBytesNoCopy:length:"); + late final _sel_dataWithBytesNoCopy_length_freeWhenDone_1 = + _registerName1("dataWithBytesNoCopy:length:freeWhenDone:"); + instancetype _objc_msgSend_206( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int length, + bool b, + ) { + return __objc_msgSend_206( + obj, + sel, + bytes, + length, + b, + ); + } + + late final __objc_msgSend_206Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_206 = __objc_msgSend_206Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, bool)>(); + + late final _sel_dataWithContentsOfFile_options_error_1 = + _registerName1("dataWithContentsOfFile:options:error:"); + instancetype _objc_msgSend_207( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + int readOptionsMask, + ffi.Pointer> errorPtr, + ) { + return __objc_msgSend_207( + obj, + sel, + path, + readOptionsMask, + errorPtr, + ); + } + + late final __objc_msgSend_207Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_207 = __objc_msgSend_207Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_dataWithContentsOfURL_options_error_1 = + _registerName1("dataWithContentsOfURL:options:error:"); + instancetype _objc_msgSend_208( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int readOptionsMask, + ffi.Pointer> errorPtr, + ) { + return __objc_msgSend_208( + obj, + sel, + url, + readOptionsMask, + errorPtr, + ); + } + + late final __objc_msgSend_208Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_208 = __objc_msgSend_208Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_dataWithContentsOfFile_1 = + _registerName1("dataWithContentsOfFile:"); + late final _sel_dataWithContentsOfURL_1 = + _registerName1("dataWithContentsOfURL:"); + instancetype _objc_msgSend_209( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_209( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_209Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_209 = __objc_msgSend_209Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithBytes_length_1 = + _registerName1("initWithBytes:length:"); + late final _sel_initWithBytesNoCopy_length_1 = + _registerName1("initWithBytesNoCopy:length:"); + late final _sel_initWithBytesNoCopy_length_freeWhenDone_1 = + _registerName1("initWithBytesNoCopy:length:freeWhenDone:"); + late final _sel_initWithBytesNoCopy_length_deallocator_1 = + _registerName1("initWithBytesNoCopy:length:deallocator:"); + instancetype _objc_msgSend_210( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int length, + ffi.Pointer<_ObjCBlock> deallocator, + ) { + return __objc_msgSend_210( + obj, + sel, + bytes, + length, + deallocator, + ); + } + + late final __objc_msgSend_210Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_210 = __objc_msgSend_210Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_initWithContentsOfFile_options_error_1 = + _registerName1("initWithContentsOfFile:options:error:"); + late final _sel_initWithContentsOfURL_options_error_1 = + _registerName1("initWithContentsOfURL:options:error:"); + late final _sel_initWithData_1 = _registerName1("initWithData:"); + instancetype _objc_msgSend_211( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ) { + return __objc_msgSend_211( + obj, + sel, + data, + ); + } + + late final __objc_msgSend_211Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_211 = __objc_msgSend_211Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_dataWithData_1 = _registerName1("dataWithData:"); + late final _sel_initWithBase64EncodedString_options_1 = + _registerName1("initWithBase64EncodedString:options:"); + instancetype _objc_msgSend_212( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer base64String, + int options, + ) { + return __objc_msgSend_212( + obj, + sel, + base64String, + options, + ); + } + + late final __objc_msgSend_212Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_212 = __objc_msgSend_212Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_base64EncodedStringWithOptions_1 = + _registerName1("base64EncodedStringWithOptions:"); + ffi.Pointer _objc_msgSend_213( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ) { + return __objc_msgSend_213( + obj, + sel, + options, + ); + } + + late final __objc_msgSend_213Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_213 = __objc_msgSend_213Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_initWithBase64EncodedData_options_1 = + _registerName1("initWithBase64EncodedData:options:"); + instancetype _objc_msgSend_214( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer base64Data, + int options, + ) { + return __objc_msgSend_214( + obj, + sel, + base64Data, + options, + ); + } + + late final __objc_msgSend_214Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_214 = __objc_msgSend_214Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_base64EncodedDataWithOptions_1 = + _registerName1("base64EncodedDataWithOptions:"); + ffi.Pointer _objc_msgSend_215( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ) { + return __objc_msgSend_215( + obj, + sel, + options, + ); + } + + late final __objc_msgSend_215Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_215 = __objc_msgSend_215Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_decompressedDataUsingAlgorithm_error_1 = + _registerName1("decompressedDataUsingAlgorithm:error:"); + instancetype _objc_msgSend_216( + ffi.Pointer obj, + ffi.Pointer sel, + int algorithm, + ffi.Pointer> error, + ) { + return __objc_msgSend_216( + obj, + sel, + algorithm, + error, + ); + } + + late final __objc_msgSend_216Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_216 = __objc_msgSend_216Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer>)>(); + + late final _sel_compressedDataUsingAlgorithm_error_1 = + _registerName1("compressedDataUsingAlgorithm:error:"); + late final _sel_getBytes_1 = _registerName1("getBytes:"); + late final _sel_dataWithContentsOfMappedFile_1 = + _registerName1("dataWithContentsOfMappedFile:"); + late final _sel_initWithContentsOfMappedFile_1 = + _registerName1("initWithContentsOfMappedFile:"); + late final _sel_initWithBase64Encoding_1 = + _registerName1("initWithBase64Encoding:"); + late final _sel_base64Encoding1 = _registerName1("base64Encoding"); + late final _sel_encodeDataObject_1 = _registerName1("encodeDataObject:"); + void _objc_msgSend_217( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ) { + return __objc_msgSend_217( + obj, + sel, + data, + ); + } + + late final __objc_msgSend_217Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_217 = __objc_msgSend_217Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeDataObject1 = _registerName1("decodeDataObject"); + late final _sel_decodeValueOfObjCType_at_size_1 = + _registerName1("decodeValueOfObjCType:at:size:"); + void _objc_msgSend_218( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer type, + ffi.Pointer data, + int size, + ) { + return __objc_msgSend_218( + obj, + sel, + type, + data, + size, + ); + } + + late final __objc_msgSend_218Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_218 = __objc_msgSend_218Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_versionForClassName_1 = + _registerName1("versionForClassName:"); + int _objc_msgSend_219( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer className, + ) { + return __objc_msgSend_219( + obj, + sel, + className, + ); + } + + late final __objc_msgSend_219Ptr = _lookup< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_219 = __objc_msgSend_219Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_encodeObject_1 = _registerName1("encodeObject:"); + late final _sel_encodeRootObject_1 = _registerName1("encodeRootObject:"); + late final _sel_encodeBycopyObject_1 = _registerName1("encodeBycopyObject:"); + late final _sel_encodeByrefObject_1 = _registerName1("encodeByrefObject:"); + late final _sel_encodeConditionalObject_1 = + _registerName1("encodeConditionalObject:"); + late final _sel_encodeValuesOfObjCTypes_1 = + _registerName1("encodeValuesOfObjCTypes:"); + void _objc_msgSend_220( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer types, + ) { + return __objc_msgSend_220( + obj, + sel, + types, + ); + } + + late final __objc_msgSend_220Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_220 = __objc_msgSend_220Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_encodeArrayOfObjCType_count_at_1 = + _registerName1("encodeArrayOfObjCType:count:at:"); + void _objc_msgSend_221( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer type, + int count, + ffi.Pointer array, + ) { + return __objc_msgSend_221( + obj, + sel, + type, + count, + array, + ); + } + + late final __objc_msgSend_221Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_221 = __objc_msgSend_221Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_encodeBytes_length_1 = _registerName1("encodeBytes:length:"); + late final _sel_decodeObject1 = _registerName1("decodeObject"); + late final _sel_decodeTopLevelObjectAndReturnError_1 = + _registerName1("decodeTopLevelObjectAndReturnError:"); + ffi.Pointer _objc_msgSend_222( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> error, + ) { + return __objc_msgSend_222( + obj, + sel, + error, + ); + } + + late final __objc_msgSend_222Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_222 = __objc_msgSend_222Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_decodeValuesOfObjCTypes_1 = + _registerName1("decodeValuesOfObjCTypes:"); + late final _sel_decodeArrayOfObjCType_count_at_1 = + _registerName1("decodeArrayOfObjCType:count:at:"); + late final _sel_decodeBytesWithReturnedLength_1 = + _registerName1("decodeBytesWithReturnedLength:"); + ffi.Pointer _objc_msgSend_223( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer lengthp, + ) { + return __objc_msgSend_223( + obj, + sel, + lengthp, + ); + } + + late final __objc_msgSend_223Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_223 = __objc_msgSend_223Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_encodePropertyList_1 = _registerName1("encodePropertyList:"); + late final _sel_decodePropertyList1 = _registerName1("decodePropertyList"); + late final _sel_setObjectZone_1 = _registerName1("setObjectZone:"); + void _objc_msgSend_224( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_NSZone> zone, + ) { + return __objc_msgSend_224( + obj, + sel, + zone, + ); + } + + late final __objc_msgSend_224Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_NSZone>)>>('objc_msgSend'); + late final __objc_msgSend_224 = __objc_msgSend_224Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_NSZone>)>(); + + late final _sel_objectZone1 = _registerName1("objectZone"); + ffi.Pointer<_NSZone> _objc_msgSend_225( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_225( + obj, + sel, + ); + } + + late final __objc_msgSend_225Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<_NSZone> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_225 = __objc_msgSend_225Ptr.asFunction< + ffi.Pointer<_NSZone> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_systemVersion1 = _registerName1("systemVersion"); + late final _sel_allowsKeyedCoding1 = _registerName1("allowsKeyedCoding"); + late final _sel_encodeObject_forKey_1 = + _registerName1("encodeObject:forKey:"); + late final _sel_encodeConditionalObject_forKey_1 = + _registerName1("encodeConditionalObject:forKey:"); + late final _sel_encodeBool_forKey_1 = _registerName1("encodeBool:forKey:"); + void _objc_msgSend_226( + ffi.Pointer obj, + ffi.Pointer sel, + bool value, + ffi.Pointer key, + ) { + return __objc_msgSend_226( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_226Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Bool, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_226 = __objc_msgSend_226Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, bool, + ffi.Pointer)>(); + + late final _sel_encodeInt_forKey_1 = _registerName1("encodeInt:forKey:"); + void _objc_msgSend_227( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ffi.Pointer key, + ) { + return __objc_msgSend_227( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_227Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_227 = __objc_msgSend_227Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_encodeInt32_forKey_1 = _registerName1("encodeInt32:forKey:"); + void _objc_msgSend_228( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ffi.Pointer key, + ) { + return __objc_msgSend_228( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_228Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_228 = __objc_msgSend_228Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_encodeInt64_forKey_1 = _registerName1("encodeInt64:forKey:"); + void _objc_msgSend_229( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ffi.Pointer key, + ) { + return __objc_msgSend_229( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_229Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int64, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_229 = __objc_msgSend_229Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_encodeFloat_forKey_1 = _registerName1("encodeFloat:forKey:"); + void _objc_msgSend_230( + ffi.Pointer obj, + ffi.Pointer sel, + double value, + ffi.Pointer key, + ) { + return __objc_msgSend_230( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_230Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Float, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_230 = __objc_msgSend_230Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, double, + ffi.Pointer)>(); + + late final _sel_encodeDouble_forKey_1 = + _registerName1("encodeDouble:forKey:"); + void _objc_msgSend_231( + ffi.Pointer obj, + ffi.Pointer sel, + double value, + ffi.Pointer key, + ) { + return __objc_msgSend_231( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_231Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Double, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_231 = __objc_msgSend_231Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, double, + ffi.Pointer)>(); + + late final _sel_encodeBytes_length_forKey_1 = + _registerName1("encodeBytes:length:forKey:"); + void _objc_msgSend_232( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int length, + ffi.Pointer key, + ) { + return __objc_msgSend_232( + obj, + sel, + bytes, + length, + key, + ); + } + + late final __objc_msgSend_232Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_232 = __objc_msgSend_232Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_containsValueForKey_1 = + _registerName1("containsValueForKey:"); + late final _sel_decodeObjectForKey_1 = _registerName1("decodeObjectForKey:"); + late final _sel_decodeTopLevelObjectForKey_error_1 = + _registerName1("decodeTopLevelObjectForKey:error:"); + ffi.Pointer _objc_msgSend_233( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ffi.Pointer> error, + ) { + return __objc_msgSend_233( + obj, + sel, + key, + error, + ); + } + + late final __objc_msgSend_233Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_233 = __objc_msgSend_233Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_decodeBoolForKey_1 = _registerName1("decodeBoolForKey:"); + late final _sel_decodeIntForKey_1 = _registerName1("decodeIntForKey:"); + int _objc_msgSend_234( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_234( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_234Ptr = _lookup< + ffi.NativeFunction< + ffi.Int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_234 = __objc_msgSend_234Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeInt32ForKey_1 = _registerName1("decodeInt32ForKey:"); + int _objc_msgSend_235( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_235( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_235Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_235 = __objc_msgSend_235Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeInt64ForKey_1 = _registerName1("decodeInt64ForKey:"); + int _objc_msgSend_236( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_236( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_236Ptr = _lookup< + ffi.NativeFunction< + ffi.Int64 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_236 = __objc_msgSend_236Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeFloatForKey_1 = _registerName1("decodeFloatForKey:"); + double _objc_msgSend_237( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_237( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_237Ptr = _lookup< + ffi.NativeFunction< + ffi.Float Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_237 = __objc_msgSend_237Ptr.asFunction< + double Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeDoubleForKey_1 = _registerName1("decodeDoubleForKey:"); + double _objc_msgSend_238( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_238( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_238Ptr = _lookup< + ffi.NativeFunction< + ffi.Double Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_238 = __objc_msgSend_238Ptr.asFunction< + double Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeBytesForKey_returnedLength_1 = + _registerName1("decodeBytesForKey:returnedLength:"); + ffi.Pointer _objc_msgSend_239( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ffi.Pointer lengthp, + ) { + return __objc_msgSend_239( + obj, + sel, + key, + lengthp, + ); + } + + late final __objc_msgSend_239Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_239 = __objc_msgSend_239Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_encodeInteger_forKey_1 = + _registerName1("encodeInteger:forKey:"); + void _objc_msgSend_240( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ffi.Pointer key, + ) { + return __objc_msgSend_240( + obj, + sel, + value, + key, + ); + } + + late final __objc_msgSend_240Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Long, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_240 = __objc_msgSend_240Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_decodeIntegerForKey_1 = + _registerName1("decodeIntegerForKey:"); + late final _sel_requiresSecureCoding1 = + _registerName1("requiresSecureCoding"); + late final _sel_decodeObjectOfClass_forKey_1 = + _registerName1("decodeObjectOfClass:forKey:"); + ffi.Pointer _objc_msgSend_241( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aClass, + ffi.Pointer key, + ) { + return __objc_msgSend_241( + obj, + sel, + aClass, + key, + ); + } + + late final __objc_msgSend_241Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_241 = __objc_msgSend_241Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeTopLevelObjectOfClass_forKey_error_1 = + _registerName1("decodeTopLevelObjectOfClass:forKey:error:"); + ffi.Pointer _objc_msgSend_242( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aClass, + ffi.Pointer key, + ffi.Pointer> error, + ) { + return __objc_msgSend_242( + obj, + sel, + aClass, + key, + error, + ); + } + + late final __objc_msgSend_242Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_242 = __objc_msgSend_242Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_decodeArrayOfObjectsOfClass_forKey_1 = + _registerName1("decodeArrayOfObjectsOfClass:forKey:"); + ffi.Pointer _objc_msgSend_243( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer cls, + ffi.Pointer key, + ) { + return __objc_msgSend_243( + obj, + sel, + cls, + key, + ); + } + + late final __objc_msgSend_243Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_243 = __objc_msgSend_243Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeDictionaryWithKeysOfClass_objectsOfClass_forKey_1 = + _registerName1("decodeDictionaryWithKeysOfClass:objectsOfClass:forKey:"); + ffi.Pointer _objc_msgSend_244( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keyCls, + ffi.Pointer objectCls, + ffi.Pointer key, + ) { + return __objc_msgSend_244( + obj, + sel, + keyCls, + objectCls, + key, + ); + } + + late final __objc_msgSend_244Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_244 = __objc_msgSend_244Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeObjectOfClasses_forKey_1 = + _registerName1("decodeObjectOfClasses:forKey:"); + ffi.Pointer _objc_msgSend_245( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer classes, + ffi.Pointer key, + ) { + return __objc_msgSend_245( + obj, + sel, + classes, + key, + ); + } + + late final __objc_msgSend_245Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_245 = __objc_msgSend_245Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeTopLevelObjectOfClasses_forKey_error_1 = + _registerName1("decodeTopLevelObjectOfClasses:forKey:error:"); + ffi.Pointer _objc_msgSend_246( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer classes, + ffi.Pointer key, + ffi.Pointer> error, + ) { + return __objc_msgSend_246( + obj, + sel, + classes, + key, + error, + ); + } + + late final __objc_msgSend_246Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_246 = __objc_msgSend_246Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_decodeArrayOfObjectsOfClasses_forKey_1 = + _registerName1("decodeArrayOfObjectsOfClasses:forKey:"); + ffi.Pointer _objc_msgSend_247( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer classes, + ffi.Pointer key, + ) { + return __objc_msgSend_247( + obj, + sel, + classes, + key, + ); + } + + late final __objc_msgSend_247Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_247 = __objc_msgSend_247Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodeDictionaryWithKeysOfClasses_objectsOfClasses_forKey_1 = + _registerName1( + "decodeDictionaryWithKeysOfClasses:objectsOfClasses:forKey:"); + ffi.Pointer _objc_msgSend_248( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keyClasses, + ffi.Pointer objectClasses, + ffi.Pointer key, + ) { + return __objc_msgSend_248( + obj, + sel, + keyClasses, + objectClasses, + key, + ); + } + + late final __objc_msgSend_248Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_248 = __objc_msgSend_248Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodePropertyListForKey_1 = + _registerName1("decodePropertyListForKey:"); + late final _sel_allowedClasses1 = _registerName1("allowedClasses"); + ffi.Pointer _objc_msgSend_249( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_249( + obj, + sel, + ); + } + + late final __objc_msgSend_249Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_249 = __objc_msgSend_249Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_failWithError_1 = _registerName1("failWithError:"); + void _objc_msgSend_250( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer error, + ) { + return __objc_msgSend_250( + obj, + sel, + error, + ); + } + + late final __objc_msgSend_250Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_250 = __objc_msgSend_250Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_decodingFailurePolicy1 = + _registerName1("decodingFailurePolicy"); + int _objc_msgSend_251( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_251( + obj, + sel, + ); + } + + late final __objc_msgSend_251Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_251 = __objc_msgSend_251Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_error1 = _registerName1("error"); + ffi.Pointer _objc_msgSend_252( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_252( + obj, + sel, + ); + } + + late final __objc_msgSend_252Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_252 = __objc_msgSend_252Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_encodeNXObject_1 = _registerName1("encodeNXObject:"); + late final _sel_decodeNXObject1 = _registerName1("decodeNXObject"); + late final _sel_decodeValueOfObjCType_at_1 = + _registerName1("decodeValueOfObjCType:at:"); + late final _sel_substringFromIndex_1 = _registerName1("substringFromIndex:"); + ffi.Pointer _objc_msgSend_253( + ffi.Pointer obj, + ffi.Pointer sel, + int from, + ) { + return __objc_msgSend_253( + obj, + sel, + from, + ); + } + + late final __objc_msgSend_253Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_253 = __objc_msgSend_253Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_substringToIndex_1 = _registerName1("substringToIndex:"); + late final _sel_substringWithRange_1 = _registerName1("substringWithRange:"); + ffi.Pointer _objc_msgSend_254( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_254( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_254Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_254 = __objc_msgSend_254Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_getCharacters_range_1 = + _registerName1("getCharacters:range:"); + void _objc_msgSend_255( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + _NSRange range, + ) { + return __objc_msgSend_255( + obj, + sel, + buffer, + range, + ); + } + + late final __objc_msgSend_255Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_255 = __objc_msgSend_255Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + int _objc_msgSend_256( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + ) { + return __objc_msgSend_256( + obj, + sel, + string, + ); + } + + late final __objc_msgSend_256Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_256 = __objc_msgSend_256Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_compare_options_1 = _registerName1("compare:options:"); + int _objc_msgSend_257( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int mask, + ) { + return __objc_msgSend_257( + obj, + sel, + string, + mask, + ); + } + + late final __objc_msgSend_257Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_257 = __objc_msgSend_257Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_compare_options_range_1 = + _registerName1("compare:options:range:"); + int _objc_msgSend_258( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int mask, + _NSRange rangeOfReceiverToCompare, + ) { + return __objc_msgSend_258( + obj, + sel, + string, + mask, + rangeOfReceiverToCompare, + ); + } + + late final __objc_msgSend_258Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_258 = __objc_msgSend_258Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange)>(); + + late final _sel_compare_options_range_locale_1 = + _registerName1("compare:options:range:locale:"); + int _objc_msgSend_259( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int mask, + _NSRange rangeOfReceiverToCompare, + ffi.Pointer locale, + ) { + return __objc_msgSend_259( + obj, + sel, + string, + mask, + rangeOfReceiverToCompare, + locale, + ); + } + + late final __objc_msgSend_259Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_259 = __objc_msgSend_259Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange, ffi.Pointer)>(); + + late final _sel_caseInsensitiveCompare_1 = + _registerName1("caseInsensitiveCompare:"); + late final _sel_localizedCompare_1 = _registerName1("localizedCompare:"); + late final _sel_localizedCaseInsensitiveCompare_1 = + _registerName1("localizedCaseInsensitiveCompare:"); + late final _sel_localizedStandardCompare_1 = + _registerName1("localizedStandardCompare:"); + late final _sel_isEqualToString_1 = _registerName1("isEqualToString:"); + late final _sel_hasPrefix_1 = _registerName1("hasPrefix:"); + late final _sel_hasSuffix_1 = _registerName1("hasSuffix:"); + late final _sel_commonPrefixWithString_options_1 = + _registerName1("commonPrefixWithString:options:"); + ffi.Pointer _objc_msgSend_260( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer str, + int mask, + ) { + return __objc_msgSend_260( + obj, + sel, + str, + mask, + ); + } + + late final __objc_msgSend_260Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_260 = __objc_msgSend_260Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_containsString_1 = _registerName1("containsString:"); + late final _sel_localizedCaseInsensitiveContainsString_1 = + _registerName1("localizedCaseInsensitiveContainsString:"); + late final _sel_localizedStandardContainsString_1 = + _registerName1("localizedStandardContainsString:"); + late final _sel_localizedStandardRangeOfString_1 = + _registerName1("localizedStandardRangeOfString:"); + _NSRange _objc_msgSend_261( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer str, + ) { + return __objc_msgSend_261( + obj, + sel, + str, + ); + } + + late final __objc_msgSend_261Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_261 = __objc_msgSend_261Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_rangeOfString_1 = _registerName1("rangeOfString:"); + late final _sel_rangeOfString_options_1 = + _registerName1("rangeOfString:options:"); + _NSRange _objc_msgSend_262( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer searchString, + int mask, + ) { + return __objc_msgSend_262( + obj, + sel, + searchString, + mask, + ); + } + + late final __objc_msgSend_262Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_262 = __objc_msgSend_262Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_rangeOfString_options_range_1 = + _registerName1("rangeOfString:options:range:"); + _NSRange _objc_msgSend_263( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer searchString, + int mask, + _NSRange rangeOfReceiverToSearch, + ) { + return __objc_msgSend_263( + obj, + sel, + searchString, + mask, + rangeOfReceiverToSearch, + ); + } + + late final __objc_msgSend_263Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_263 = __objc_msgSend_263Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange)>(); + + late final _class_NSLocale1 = _getClass1("NSLocale"); + late final _sel_displayNameForKey_value_1 = + _registerName1("displayNameForKey:value:"); + ffi.Pointer _objc_msgSend_264( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ffi.Pointer value, + ) { + return __objc_msgSend_264( + obj, + sel, + key, + value, + ); + } + + late final __objc_msgSend_264Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_264 = __objc_msgSend_264Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithLocaleIdentifier_1 = + _registerName1("initWithLocaleIdentifier:"); + late final _sel_localeIdentifier1 = _registerName1("localeIdentifier"); + late final _sel_localizedStringForLocaleIdentifier_1 = + _registerName1("localizedStringForLocaleIdentifier:"); + late final _sel_languageCode1 = _registerName1("languageCode"); + late final _sel_localizedStringForLanguageCode_1 = + _registerName1("localizedStringForLanguageCode:"); + late final _sel_countryCode1 = _registerName1("countryCode"); + late final _sel_localizedStringForCountryCode_1 = + _registerName1("localizedStringForCountryCode:"); + late final _sel_scriptCode1 = _registerName1("scriptCode"); + late final _sel_localizedStringForScriptCode_1 = + _registerName1("localizedStringForScriptCode:"); + late final _sel_variantCode1 = _registerName1("variantCode"); + late final _sel_localizedStringForVariantCode_1 = + _registerName1("localizedStringForVariantCode:"); + late final _class_NSCharacterSet1 = _getClass1("NSCharacterSet"); + late final _sel_controlCharacterSet1 = _registerName1("controlCharacterSet"); + ffi.Pointer _objc_msgSend_265( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_265( + obj, + sel, + ); + } + + late final __objc_msgSend_265Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_265 = __objc_msgSend_265Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_whitespaceCharacterSet1 = + _registerName1("whitespaceCharacterSet"); + late final _sel_whitespaceAndNewlineCharacterSet1 = + _registerName1("whitespaceAndNewlineCharacterSet"); + late final _sel_decimalDigitCharacterSet1 = + _registerName1("decimalDigitCharacterSet"); + late final _sel_letterCharacterSet1 = _registerName1("letterCharacterSet"); + late final _sel_lowercaseLetterCharacterSet1 = + _registerName1("lowercaseLetterCharacterSet"); + late final _sel_uppercaseLetterCharacterSet1 = + _registerName1("uppercaseLetterCharacterSet"); + late final _sel_nonBaseCharacterSet1 = _registerName1("nonBaseCharacterSet"); + late final _sel_alphanumericCharacterSet1 = + _registerName1("alphanumericCharacterSet"); + late final _sel_decomposableCharacterSet1 = + _registerName1("decomposableCharacterSet"); + late final _sel_illegalCharacterSet1 = _registerName1("illegalCharacterSet"); + late final _sel_punctuationCharacterSet1 = + _registerName1("punctuationCharacterSet"); + late final _sel_capitalizedLetterCharacterSet1 = + _registerName1("capitalizedLetterCharacterSet"); + late final _sel_symbolCharacterSet1 = _registerName1("symbolCharacterSet"); + late final _sel_newlineCharacterSet1 = _registerName1("newlineCharacterSet"); + late final _sel_characterSetWithRange_1 = + _registerName1("characterSetWithRange:"); + ffi.Pointer _objc_msgSend_266( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange aRange, + ) { + return __objc_msgSend_266( + obj, + sel, + aRange, + ); + } + + late final __objc_msgSend_266Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_266 = __objc_msgSend_266Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_characterSetWithCharactersInString_1 = + _registerName1("characterSetWithCharactersInString:"); + ffi.Pointer _objc_msgSend_267( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aString, + ) { + return __objc_msgSend_267( + obj, + sel, + aString, + ); + } + + late final __objc_msgSend_267Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_267 = __objc_msgSend_267Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_characterSetWithBitmapRepresentation_1 = + _registerName1("characterSetWithBitmapRepresentation:"); + ffi.Pointer _objc_msgSend_268( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ) { + return __objc_msgSend_268( + obj, + sel, + data, + ); + } + + late final __objc_msgSend_268Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_268 = __objc_msgSend_268Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_characterSetWithContentsOfFile_1 = + _registerName1("characterSetWithContentsOfFile:"); + late final _sel_characterIsMember_1 = _registerName1("characterIsMember:"); + bool _objc_msgSend_269( + ffi.Pointer obj, + ffi.Pointer sel, + int aCharacter, + ) { + return __objc_msgSend_269( + obj, + sel, + aCharacter, + ); + } + + late final __objc_msgSend_269Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedShort)>>('objc_msgSend'); + late final __objc_msgSend_269 = __objc_msgSend_269Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_bitmapRepresentation1 = + _registerName1("bitmapRepresentation"); + late final _sel_invertedSet1 = _registerName1("invertedSet"); + late final _sel_longCharacterIsMember_1 = + _registerName1("longCharacterIsMember:"); + bool _objc_msgSend_270( + ffi.Pointer obj, + ffi.Pointer sel, + int theLongChar, + ) { + return __objc_msgSend_270( + obj, + sel, + theLongChar, + ); + } + + late final __objc_msgSend_270Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedInt)>>('objc_msgSend'); + late final __objc_msgSend_270 = __objc_msgSend_270Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_isSupersetOfSet_1 = _registerName1("isSupersetOfSet:"); + bool _objc_msgSend_271( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer theOtherSet, + ) { + return __objc_msgSend_271( + obj, + sel, + theOtherSet, + ); + } + + late final __objc_msgSend_271Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_271 = __objc_msgSend_271Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_hasMemberInPlane_1 = _registerName1("hasMemberInPlane:"); + bool _objc_msgSend_272( + ffi.Pointer obj, + ffi.Pointer sel, + int thePlane, + ) { + return __objc_msgSend_272( + obj, + sel, + thePlane, + ); + } + + late final __objc_msgSend_272Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Uint8)>>('objc_msgSend'); + late final __objc_msgSend_272 = __objc_msgSend_272Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_URLUserAllowedCharacterSet1 = + _registerName1("URLUserAllowedCharacterSet"); + late final _sel_URLPasswordAllowedCharacterSet1 = + _registerName1("URLPasswordAllowedCharacterSet"); + late final _sel_URLHostAllowedCharacterSet1 = + _registerName1("URLHostAllowedCharacterSet"); + late final _sel_URLPathAllowedCharacterSet1 = + _registerName1("URLPathAllowedCharacterSet"); + late final _sel_URLQueryAllowedCharacterSet1 = + _registerName1("URLQueryAllowedCharacterSet"); + late final _sel_URLFragmentAllowedCharacterSet1 = + _registerName1("URLFragmentAllowedCharacterSet"); + late final _sel_exemplarCharacterSet1 = + _registerName1("exemplarCharacterSet"); + late final _sel_calendarIdentifier1 = _registerName1("calendarIdentifier"); + late final _sel_localizedStringForCalendarIdentifier_1 = + _registerName1("localizedStringForCalendarIdentifier:"); + late final _sel_collationIdentifier1 = _registerName1("collationIdentifier"); + late final _sel_localizedStringForCollationIdentifier_1 = + _registerName1("localizedStringForCollationIdentifier:"); + late final _sel_usesMetricSystem1 = _registerName1("usesMetricSystem"); + late final _sel_decimalSeparator1 = _registerName1("decimalSeparator"); + late final _sel_groupingSeparator1 = _registerName1("groupingSeparator"); + late final _sel_currencySymbol1 = _registerName1("currencySymbol"); + late final _sel_currencyCode1 = _registerName1("currencyCode"); + late final _sel_localizedStringForCurrencyCode_1 = + _registerName1("localizedStringForCurrencyCode:"); + late final _sel_collatorIdentifier1 = _registerName1("collatorIdentifier"); + late final _sel_localizedStringForCollatorIdentifier_1 = + _registerName1("localizedStringForCollatorIdentifier:"); + late final _sel_quotationBeginDelimiter1 = + _registerName1("quotationBeginDelimiter"); + late final _sel_quotationEndDelimiter1 = + _registerName1("quotationEndDelimiter"); + late final _sel_alternateQuotationBeginDelimiter1 = + _registerName1("alternateQuotationBeginDelimiter"); + late final _sel_alternateQuotationEndDelimiter1 = + _registerName1("alternateQuotationEndDelimiter"); + late final _sel_autoupdatingCurrentLocale1 = + _registerName1("autoupdatingCurrentLocale"); + ffi.Pointer _objc_msgSend_273( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_273( + obj, + sel, + ); + } + + late final __objc_msgSend_273Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_273 = __objc_msgSend_273Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_currentLocale1 = _registerName1("currentLocale"); + late final _sel_systemLocale1 = _registerName1("systemLocale"); + late final _sel_localeWithLocaleIdentifier_1 = + _registerName1("localeWithLocaleIdentifier:"); + late final _sel_availableLocaleIdentifiers1 = + _registerName1("availableLocaleIdentifiers"); + late final _sel_ISOLanguageCodes1 = _registerName1("ISOLanguageCodes"); + late final _sel_ISOCountryCodes1 = _registerName1("ISOCountryCodes"); + late final _sel_ISOCurrencyCodes1 = _registerName1("ISOCurrencyCodes"); + late final _sel_commonISOCurrencyCodes1 = + _registerName1("commonISOCurrencyCodes"); + late final _sel_preferredLanguages1 = _registerName1("preferredLanguages"); + late final _sel_componentsFromLocaleIdentifier_1 = + _registerName1("componentsFromLocaleIdentifier:"); + late final _sel_localeIdentifierFromComponents_1 = + _registerName1("localeIdentifierFromComponents:"); + ffi.Pointer _objc_msgSend_274( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer dict, + ) { + return __objc_msgSend_274( + obj, + sel, + dict, + ); + } + + late final __objc_msgSend_274Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_274 = __objc_msgSend_274Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_canonicalLocaleIdentifierFromString_1 = + _registerName1("canonicalLocaleIdentifierFromString:"); + late final _sel_canonicalLanguageIdentifierFromString_1 = + _registerName1("canonicalLanguageIdentifierFromString:"); + late final _sel_localeIdentifierFromWindowsLocaleCode_1 = + _registerName1("localeIdentifierFromWindowsLocaleCode:"); + ffi.Pointer _objc_msgSend_275( + ffi.Pointer obj, + ffi.Pointer sel, + int lcid, + ) { + return __objc_msgSend_275( + obj, + sel, + lcid, + ); + } + + late final __objc_msgSend_275Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Uint32)>>('objc_msgSend'); + late final __objc_msgSend_275 = __objc_msgSend_275Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_windowsLocaleCodeFromLocaleIdentifier_1 = + _registerName1("windowsLocaleCodeFromLocaleIdentifier:"); + int _objc_msgSend_276( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer localeIdentifier, + ) { + return __objc_msgSend_276( + obj, + sel, + localeIdentifier, + ); + } + + late final __objc_msgSend_276Ptr = _lookup< + ffi.NativeFunction< + ffi.Uint32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_276 = __objc_msgSend_276Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_characterDirectionForLanguage_1 = + _registerName1("characterDirectionForLanguage:"); + int _objc_msgSend_277( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer isoLangCode, + ) { + return __objc_msgSend_277( + obj, + sel, + isoLangCode, + ); + } + + late final __objc_msgSend_277Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_277 = __objc_msgSend_277Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_lineDirectionForLanguage_1 = + _registerName1("lineDirectionForLanguage:"); + late final _sel_rangeOfString_options_range_locale_1 = + _registerName1("rangeOfString:options:range:locale:"); + _NSRange _objc_msgSend_278( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer searchString, + int mask, + _NSRange rangeOfReceiverToSearch, + ffi.Pointer locale, + ) { + return __objc_msgSend_278( + obj, + sel, + searchString, + mask, + rangeOfReceiverToSearch, + locale, + ); + } + + late final __objc_msgSend_278Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_278 = __objc_msgSend_278Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange, ffi.Pointer)>(); + + late final _sel_rangeOfCharacterFromSet_1 = + _registerName1("rangeOfCharacterFromSet:"); + _NSRange _objc_msgSend_279( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer searchSet, + ) { + return __objc_msgSend_279( + obj, + sel, + searchSet, + ); + } + + late final __objc_msgSend_279Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_279 = __objc_msgSend_279Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_rangeOfCharacterFromSet_options_1 = + _registerName1("rangeOfCharacterFromSet:options:"); + _NSRange _objc_msgSend_280( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer searchSet, + int mask, + ) { + return __objc_msgSend_280( + obj, + sel, + searchSet, + mask, + ); + } + + late final __objc_msgSend_280Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_280 = __objc_msgSend_280Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_rangeOfCharacterFromSet_options_range_1 = + _registerName1("rangeOfCharacterFromSet:options:range:"); + _NSRange _objc_msgSend_281( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer searchSet, + int mask, + _NSRange rangeOfReceiverToSearch, + ) { + return __objc_msgSend_281( + obj, + sel, + searchSet, + mask, + rangeOfReceiverToSearch, + ); + } + + late final __objc_msgSend_281Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_281 = __objc_msgSend_281Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange)>(); + + late final _sel_rangeOfComposedCharacterSequenceAtIndex_1 = + _registerName1("rangeOfComposedCharacterSequenceAtIndex:"); + _NSRange _objc_msgSend_282( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ) { + return __objc_msgSend_282( + obj, + sel, + index, + ); + } + + late final __objc_msgSend_282Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_282 = __objc_msgSend_282Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_rangeOfComposedCharacterSequencesForRange_1 = + _registerName1("rangeOfComposedCharacterSequencesForRange:"); + _NSRange _objc_msgSend_283( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_283( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_283Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_283 = __objc_msgSend_283Ptr.asFunction< + _NSRange Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_stringByAppendingString_1 = + _registerName1("stringByAppendingString:"); + late final _sel_stringByAppendingFormat_1 = + _registerName1("stringByAppendingFormat:"); + late final _sel_uppercaseString1 = _registerName1("uppercaseString"); + late final _sel_lowercaseString1 = _registerName1("lowercaseString"); + late final _sel_capitalizedString1 = _registerName1("capitalizedString"); + late final _sel_localizedUppercaseString1 = + _registerName1("localizedUppercaseString"); + late final _sel_localizedLowercaseString1 = + _registerName1("localizedLowercaseString"); + late final _sel_localizedCapitalizedString1 = + _registerName1("localizedCapitalizedString"); + late final _sel_uppercaseStringWithLocale_1 = + _registerName1("uppercaseStringWithLocale:"); + ffi.Pointer _objc_msgSend_284( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer locale, + ) { + return __objc_msgSend_284( + obj, + sel, + locale, + ); + } + + late final __objc_msgSend_284Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_284 = __objc_msgSend_284Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_lowercaseStringWithLocale_1 = + _registerName1("lowercaseStringWithLocale:"); + late final _sel_capitalizedStringWithLocale_1 = + _registerName1("capitalizedStringWithLocale:"); + late final _sel_getLineStart_end_contentsEnd_forRange_1 = + _registerName1("getLineStart:end:contentsEnd:forRange:"); + void _objc_msgSend_285( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer startPtr, + ffi.Pointer lineEndPtr, + ffi.Pointer contentsEndPtr, + _NSRange range, + ) { + return __objc_msgSend_285( + obj, + sel, + startPtr, + lineEndPtr, + contentsEndPtr, + range, + ); + } + + late final __objc_msgSend_285Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_285 = __objc_msgSend_285Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + _NSRange)>(); + + late final _sel_lineRangeForRange_1 = _registerName1("lineRangeForRange:"); + late final _sel_getParagraphStart_end_contentsEnd_forRange_1 = + _registerName1("getParagraphStart:end:contentsEnd:forRange:"); + late final _sel_paragraphRangeForRange_1 = + _registerName1("paragraphRangeForRange:"); + late final _sel_enumerateSubstringsInRange_options_usingBlock_1 = + _registerName1("enumerateSubstringsInRange:options:usingBlock:"); + void _objc_msgSend_286( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_286( + obj, + sel, + range, + opts, + block, + ); + } + + late final __objc_msgSend_286Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_286 = __objc_msgSend_286Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateLinesUsingBlock_1 = + _registerName1("enumerateLinesUsingBlock:"); + void _objc_msgSend_287( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_287( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_287Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_287 = __objc_msgSend_287Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_UTF8String1 = _registerName1("UTF8String"); + late final _sel_fastestEncoding1 = _registerName1("fastestEncoding"); + late final _sel_smallestEncoding1 = _registerName1("smallestEncoding"); + late final _sel_dataUsingEncoding_allowLossyConversion_1 = + _registerName1("dataUsingEncoding:allowLossyConversion:"); + ffi.Pointer _objc_msgSend_288( + ffi.Pointer obj, + ffi.Pointer sel, + int encoding, + bool lossy, + ) { + return __objc_msgSend_288( + obj, + sel, + encoding, + lossy, + ); + } + + late final __objc_msgSend_288Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_288 = __objc_msgSend_288Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int, bool)>(); + + late final _sel_dataUsingEncoding_1 = _registerName1("dataUsingEncoding:"); + ffi.Pointer _objc_msgSend_289( + ffi.Pointer obj, + ffi.Pointer sel, + int encoding, + ) { + return __objc_msgSend_289( + obj, + sel, + encoding, + ); + } + + late final __objc_msgSend_289Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_289 = __objc_msgSend_289Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_canBeConvertedToEncoding_1 = + _registerName1("canBeConvertedToEncoding:"); + late final _sel_cStringUsingEncoding_1 = + _registerName1("cStringUsingEncoding:"); + late final _sel_getCString_maxLength_encoding_1 = + _registerName1("getCString:maxLength:encoding:"); + bool _objc_msgSend_290( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + int maxBufferCount, + int encoding, + ) { + return __objc_msgSend_290( + obj, + sel, + buffer, + maxBufferCount, + encoding, + ); + } + + late final __objc_msgSend_290Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_290 = __objc_msgSend_290Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int)>(); + + late final _sel_getBytes_maxLength_usedLength_encoding_options_range_remainingRange_1 = + _registerName1( + "getBytes:maxLength:usedLength:encoding:options:range:remainingRange:"); + bool _objc_msgSend_291( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + int maxBufferCount, + ffi.Pointer usedBufferCount, + int encoding, + int options, + _NSRange range, + ffi.Pointer<_NSRange> leftover, + ) { + return __objc_msgSend_291( + obj, + sel, + buffer, + maxBufferCount, + usedBufferCount, + encoding, + options, + range, + leftover, + ); + } + + late final __objc_msgSend_291Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Int32, + _NSRange, + ffi.Pointer<_NSRange>)>>('objc_msgSend'); + late final __objc_msgSend_291 = __objc_msgSend_291Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + int, + int, + _NSRange, + ffi.Pointer<_NSRange>)>(); + + late final _sel_maximumLengthOfBytesUsingEncoding_1 = + _registerName1("maximumLengthOfBytesUsingEncoding:"); + late final _sel_lengthOfBytesUsingEncoding_1 = + _registerName1("lengthOfBytesUsingEncoding:"); + late final _sel_availableStringEncodings1 = + _registerName1("availableStringEncodings"); + ffi.Pointer _objc_msgSend_292( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_292( + obj, + sel, + ); + } + + late final __objc_msgSend_292Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_292 = __objc_msgSend_292Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_localizedNameOfStringEncoding_1 = + _registerName1("localizedNameOfStringEncoding:"); + late final _sel_defaultCStringEncoding1 = + _registerName1("defaultCStringEncoding"); + late final _sel_decomposedStringWithCanonicalMapping1 = + _registerName1("decomposedStringWithCanonicalMapping"); + late final _sel_precomposedStringWithCanonicalMapping1 = + _registerName1("precomposedStringWithCanonicalMapping"); + late final _sel_decomposedStringWithCompatibilityMapping1 = + _registerName1("decomposedStringWithCompatibilityMapping"); + late final _sel_precomposedStringWithCompatibilityMapping1 = + _registerName1("precomposedStringWithCompatibilityMapping"); + late final _sel_componentsSeparatedByString_1 = + _registerName1("componentsSeparatedByString:"); + late final _sel_componentsSeparatedByCharactersInSet_1 = + _registerName1("componentsSeparatedByCharactersInSet:"); + ffi.Pointer _objc_msgSend_293( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer separator, + ) { + return __objc_msgSend_293( + obj, + sel, + separator, + ); + } + + late final __objc_msgSend_293Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_293 = __objc_msgSend_293Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_stringByTrimmingCharactersInSet_1 = + _registerName1("stringByTrimmingCharactersInSet:"); + ffi.Pointer _objc_msgSend_294( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + ) { + return __objc_msgSend_294( + obj, + sel, + set1, + ); + } + + late final __objc_msgSend_294Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_294 = __objc_msgSend_294Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_stringByPaddingToLength_withString_startingAtIndex_1 = + _registerName1("stringByPaddingToLength:withString:startingAtIndex:"); + ffi.Pointer _objc_msgSend_295( + ffi.Pointer obj, + ffi.Pointer sel, + int newLength, + ffi.Pointer padString, + int padIndex, + ) { + return __objc_msgSend_295( + obj, + sel, + newLength, + padString, + padIndex, + ); + } + + late final __objc_msgSend_295Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_295 = __objc_msgSend_295Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer, int)>(); + + late final _sel_stringByFoldingWithOptions_locale_1 = + _registerName1("stringByFoldingWithOptions:locale:"); + ffi.Pointer _objc_msgSend_296( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ffi.Pointer locale, + ) { + return __objc_msgSend_296( + obj, + sel, + options, + locale, + ); + } + + late final __objc_msgSend_296Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_296 = __objc_msgSend_296Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_stringByReplacingOccurrencesOfString_withString_options_range_1 = + _registerName1( + "stringByReplacingOccurrencesOfString:withString:options:range:"); + ffi.Pointer _objc_msgSend_297( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer target, + ffi.Pointer replacement, + int options, + _NSRange searchRange, + ) { + return __objc_msgSend_297( + obj, + sel, + target, + replacement, + options, + searchRange, + ); + } + + late final __objc_msgSend_297Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_297 = __objc_msgSend_297Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + _NSRange)>(); + + late final _sel_stringByReplacingOccurrencesOfString_withString_1 = + _registerName1("stringByReplacingOccurrencesOfString:withString:"); + ffi.Pointer _objc_msgSend_298( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer target, + ffi.Pointer replacement, + ) { + return __objc_msgSend_298( + obj, + sel, + target, + replacement, + ); + } + + late final __objc_msgSend_298Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_298 = __objc_msgSend_298Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_stringByReplacingCharactersInRange_withString_1 = + _registerName1("stringByReplacingCharactersInRange:withString:"); + ffi.Pointer _objc_msgSend_299( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer replacement, + ) { + return __objc_msgSend_299( + obj, + sel, + range, + replacement, + ); + } + + late final __objc_msgSend_299Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_299 = __objc_msgSend_299Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_stringByApplyingTransform_reverse_1 = + _registerName1("stringByApplyingTransform:reverse:"); + ffi.Pointer _objc_msgSend_300( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer transform, + bool reverse, + ) { + return __objc_msgSend_300( + obj, + sel, + transform, + reverse, + ); + } + + late final __objc_msgSend_300Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_300 = __objc_msgSend_300Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_writeToURL_atomically_encoding_error_1 = + _registerName1("writeToURL:atomically:encoding:error:"); + bool _objc_msgSend_301( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + bool useAuxiliaryFile, + int enc, + ffi.Pointer> error, + ) { + return __objc_msgSend_301( + obj, + sel, + url, + useAuxiliaryFile, + enc, + error, + ); + } + + late final __objc_msgSend_301Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.UnsignedLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_301 = __objc_msgSend_301Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + int, + ffi.Pointer>)>(); + + late final _sel_writeToFile_atomically_encoding_error_1 = + _registerName1("writeToFile:atomically:encoding:error:"); + bool _objc_msgSend_302( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool useAuxiliaryFile, + int enc, + ffi.Pointer> error, + ) { + return __objc_msgSend_302( + obj, + sel, + path, + useAuxiliaryFile, + enc, + error, + ); + } + + late final __objc_msgSend_302Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.UnsignedLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_302 = __objc_msgSend_302Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + int, + ffi.Pointer>)>(); + + late final _sel_hash1 = _registerName1("hash"); + late final _sel_initWithCharactersNoCopy_length_freeWhenDone_1 = + _registerName1("initWithCharactersNoCopy:length:freeWhenDone:"); + instancetype _objc_msgSend_303( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer characters, + int length, + bool freeBuffer, + ) { + return __objc_msgSend_303( + obj, + sel, + characters, + length, + freeBuffer, + ); + } + + late final __objc_msgSend_303Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_303 = __objc_msgSend_303Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, bool)>(); + + late final _sel_initWithCharactersNoCopy_length_deallocator_1 = + _registerName1("initWithCharactersNoCopy:length:deallocator:"); + instancetype _objc_msgSend_304( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer chars, + int len, + ffi.Pointer<_ObjCBlock> deallocator, + ) { + return __objc_msgSend_304( + obj, + sel, + chars, + len, + deallocator, + ); + } + + late final __objc_msgSend_304Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_304 = __objc_msgSend_304Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_initWithCharacters_length_1 = + _registerName1("initWithCharacters:length:"); + instancetype _objc_msgSend_305( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer characters, + int length, + ) { + return __objc_msgSend_305( + obj, + sel, + characters, + length, + ); + } + + late final __objc_msgSend_305Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_305 = __objc_msgSend_305Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_initWithUTF8String_1 = _registerName1("initWithUTF8String:"); + instancetype _objc_msgSend_306( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer nullTerminatedCString, + ) { + return __objc_msgSend_306( + obj, + sel, + nullTerminatedCString, + ); + } + + late final __objc_msgSend_306Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_306 = __objc_msgSend_306Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithFormat_1 = _registerName1("initWithFormat:"); + late final _sel_initWithFormat_arguments_1 = + _registerName1("initWithFormat:arguments:"); + instancetype _objc_msgSend_307( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer argList, + ) { + return __objc_msgSend_307( + obj, + sel, + format, + argList, + ); + } + + late final __objc_msgSend_307Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_307 = __objc_msgSend_307Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithFormat_locale_1 = + _registerName1("initWithFormat:locale:"); + instancetype _objc_msgSend_308( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer locale, + ) { + return __objc_msgSend_308( + obj, + sel, + format, + locale, + ); + } + + late final __objc_msgSend_308Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_308 = __objc_msgSend_308Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithFormat_locale_arguments_1 = + _registerName1("initWithFormat:locale:arguments:"); + instancetype _objc_msgSend_309( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer locale, + ffi.Pointer argList, + ) { + return __objc_msgSend_309( + obj, + sel, + format, + locale, + argList, + ); + } + + late final __objc_msgSend_309Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_309 = __objc_msgSend_309Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithValidatedFormat_validFormatSpecifiers_error_1 = + _registerName1("initWithValidatedFormat:validFormatSpecifiers:error:"); + instancetype _objc_msgSend_310( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer validFormatSpecifiers, + ffi.Pointer> error, + ) { + return __objc_msgSend_310( + obj, + sel, + format, + validFormatSpecifiers, + error, + ); + } + + late final __objc_msgSend_310Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_310 = __objc_msgSend_310Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithValidatedFormat_validFormatSpecifiers_locale_error_1 = + _registerName1( + "initWithValidatedFormat:validFormatSpecifiers:locale:error:"); + instancetype _objc_msgSend_311( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer validFormatSpecifiers, + ffi.Pointer locale, + ffi.Pointer> error, + ) { + return __objc_msgSend_311( + obj, + sel, + format, + validFormatSpecifiers, + locale, + error, + ); + } + + late final __objc_msgSend_311Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_311 = __objc_msgSend_311Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithValidatedFormat_validFormatSpecifiers_arguments_error_1 = + _registerName1( + "initWithValidatedFormat:validFormatSpecifiers:arguments:error:"); + instancetype _objc_msgSend_312( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer validFormatSpecifiers, + ffi.Pointer argList, + ffi.Pointer> error, + ) { + return __objc_msgSend_312( + obj, + sel, + format, + validFormatSpecifiers, + argList, + error, + ); + } + + late final __objc_msgSend_312Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_312 = __objc_msgSend_312Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithValidatedFormat_validFormatSpecifiers_locale_arguments_error_1 = + _registerName1( + "initWithValidatedFormat:validFormatSpecifiers:locale:arguments:error:"); + instancetype _objc_msgSend_313( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + ffi.Pointer validFormatSpecifiers, + ffi.Pointer locale, + ffi.Pointer argList, + ffi.Pointer> error, + ) { + return __objc_msgSend_313( + obj, + sel, + format, + validFormatSpecifiers, + locale, + argList, + error, + ); + } + + late final __objc_msgSend_313Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_313 = __objc_msgSend_313Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithData_encoding_1 = + _registerName1("initWithData:encoding:"); + instancetype _objc_msgSend_314( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + int encoding, + ) { + return __objc_msgSend_314( + obj, + sel, + data, + encoding, + ); + } + + late final __objc_msgSend_314Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_314 = __objc_msgSend_314Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_initWithBytes_length_encoding_1 = + _registerName1("initWithBytes:length:encoding:"); + instancetype _objc_msgSend_315( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int len, + int encoding, + ) { + return __objc_msgSend_315( + obj, + sel, + bytes, + len, + encoding, + ); + } + + late final __objc_msgSend_315Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_315 = __objc_msgSend_315Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int)>(); + + late final _sel_initWithBytesNoCopy_length_encoding_freeWhenDone_1 = + _registerName1("initWithBytesNoCopy:length:encoding:freeWhenDone:"); + instancetype _objc_msgSend_316( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int len, + int encoding, + bool freeBuffer, + ) { + return __objc_msgSend_316( + obj, + sel, + bytes, + len, + encoding, + freeBuffer, + ); + } + + late final __objc_msgSend_316Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_316 = __objc_msgSend_316Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, bool)>(); + + late final _sel_initWithBytesNoCopy_length_encoding_deallocator_1 = + _registerName1("initWithBytesNoCopy:length:encoding:deallocator:"); + instancetype _objc_msgSend_317( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int len, + int encoding, + ffi.Pointer<_ObjCBlock> deallocator, + ) { + return __objc_msgSend_317( + obj, + sel, + bytes, + len, + encoding, + deallocator, + ); + } + + late final __objc_msgSend_317Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_317 = __objc_msgSend_317Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_string1 = _registerName1("string"); + late final _sel_stringWithString_1 = _registerName1("stringWithString:"); + late final _sel_stringWithCharacters_length_1 = + _registerName1("stringWithCharacters:length:"); + late final _sel_stringWithUTF8String_1 = + _registerName1("stringWithUTF8String:"); + late final _sel_stringWithFormat_1 = _registerName1("stringWithFormat:"); + late final _sel_localizedStringWithFormat_1 = + _registerName1("localizedStringWithFormat:"); + late final _sel_stringWithValidatedFormat_validFormatSpecifiers_error_1 = + _registerName1("stringWithValidatedFormat:validFormatSpecifiers:error:"); + late final _sel_localizedStringWithValidatedFormat_validFormatSpecifiers_error_1 = + _registerName1( + "localizedStringWithValidatedFormat:validFormatSpecifiers:error:"); + late final _sel_initWithCString_encoding_1 = + _registerName1("initWithCString:encoding:"); + instancetype _objc_msgSend_318( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer nullTerminatedCString, + int encoding, + ) { + return __objc_msgSend_318( + obj, + sel, + nullTerminatedCString, + encoding, + ); + } + + late final __objc_msgSend_318Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_318 = __objc_msgSend_318Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_stringWithCString_encoding_1 = + _registerName1("stringWithCString:encoding:"); + late final _sel_initWithContentsOfURL_encoding_error_1 = + _registerName1("initWithContentsOfURL:encoding:error:"); + instancetype _objc_msgSend_319( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int enc, + ffi.Pointer> error, + ) { + return __objc_msgSend_319( + obj, + sel, + url, + enc, + error, + ); + } + + late final __objc_msgSend_319Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_319 = __objc_msgSend_319Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_initWithContentsOfFile_encoding_error_1 = + _registerName1("initWithContentsOfFile:encoding:error:"); + instancetype _objc_msgSend_320( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + int enc, + ffi.Pointer> error, + ) { + return __objc_msgSend_320( + obj, + sel, + path, + enc, + error, + ); + } + + late final __objc_msgSend_320Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_320 = __objc_msgSend_320Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_stringWithContentsOfURL_encoding_error_1 = + _registerName1("stringWithContentsOfURL:encoding:error:"); + late final _sel_stringWithContentsOfFile_encoding_error_1 = + _registerName1("stringWithContentsOfFile:encoding:error:"); + late final _sel_initWithContentsOfURL_usedEncoding_error_1 = + _registerName1("initWithContentsOfURL:usedEncoding:error:"); + instancetype _objc_msgSend_321( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer enc, + ffi.Pointer> error, + ) { + return __objc_msgSend_321( + obj, + sel, + url, + enc, + error, + ); + } + + late final __objc_msgSend_321Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_321 = __objc_msgSend_321Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithContentsOfFile_usedEncoding_error_1 = + _registerName1("initWithContentsOfFile:usedEncoding:error:"); + instancetype _objc_msgSend_322( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer enc, + ffi.Pointer> error, + ) { + return __objc_msgSend_322( + obj, + sel, + path, + enc, + error, + ); + } + + late final __objc_msgSend_322Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_322 = __objc_msgSend_322Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_stringWithContentsOfURL_usedEncoding_error_1 = + _registerName1("stringWithContentsOfURL:usedEncoding:error:"); + late final _sel_stringWithContentsOfFile_usedEncoding_error_1 = + _registerName1("stringWithContentsOfFile:usedEncoding:error:"); + late final _sel_stringEncodingForData_encodingOptions_convertedString_usedLossyConversion_1 = + _registerName1( + "stringEncodingForData:encodingOptions:convertedString:usedLossyConversion:"); + int _objc_msgSend_323( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ffi.Pointer opts, + ffi.Pointer> string, + ffi.Pointer usedLossyConversion, + ) { + return __objc_msgSend_323( + obj, + sel, + data, + opts, + string, + usedLossyConversion, + ); + } + + late final __objc_msgSend_323Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_323 = __objc_msgSend_323Ptr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer)>(); + + late final _sel_propertyList1 = _registerName1("propertyList"); + late final _sel_propertyListFromStringsFileFormat1 = + _registerName1("propertyListFromStringsFileFormat"); + ffi.Pointer _objc_msgSend_324( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_324( + obj, + sel, + ); + } + + late final __objc_msgSend_324Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_324 = __objc_msgSend_324Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_cString1 = _registerName1("cString"); + late final _sel_lossyCString1 = _registerName1("lossyCString"); + late final _sel_cStringLength1 = _registerName1("cStringLength"); + late final _sel_getCString_1 = _registerName1("getCString:"); + late final _sel_getCString_maxLength_1 = + _registerName1("getCString:maxLength:"); + void _objc_msgSend_325( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int maxLength, + ) { + return __objc_msgSend_325( + obj, + sel, + bytes, + maxLength, + ); + } + + late final __objc_msgSend_325Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_325 = __objc_msgSend_325Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_getCString_maxLength_range_remainingRange_1 = + _registerName1("getCString:maxLength:range:remainingRange:"); + void _objc_msgSend_326( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int maxLength, + _NSRange aRange, + ffi.Pointer<_NSRange> leftoverRange, + ) { + return __objc_msgSend_326( + obj, + sel, + bytes, + maxLength, + aRange, + leftoverRange, + ); + } + + late final __objc_msgSend_326Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + _NSRange, + ffi.Pointer<_NSRange>)>>('objc_msgSend'); + late final __objc_msgSend_326 = __objc_msgSend_326Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange, ffi.Pointer<_NSRange>)>(); + + late final _sel_stringWithContentsOfFile_1 = + _registerName1("stringWithContentsOfFile:"); + late final _sel_stringWithContentsOfURL_1 = + _registerName1("stringWithContentsOfURL:"); + late final _sel_initWithCStringNoCopy_length_freeWhenDone_1 = + _registerName1("initWithCStringNoCopy:length:freeWhenDone:"); + ffi.Pointer _objc_msgSend_327( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer bytes, + int length, + bool freeBuffer, + ) { + return __objc_msgSend_327( + obj, + sel, + bytes, + length, + freeBuffer, + ); + } + + late final __objc_msgSend_327Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_327 = __objc_msgSend_327Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, bool)>(); + + late final _sel_initWithCString_length_1 = + _registerName1("initWithCString:length:"); + late final _sel_initWithCString_1 = _registerName1("initWithCString:"); + late final _sel_stringWithCString_length_1 = + _registerName1("stringWithCString:length:"); + late final _sel_stringWithCString_1 = _registerName1("stringWithCString:"); + late final _sel_getCharacters_1 = _registerName1("getCharacters:"); + void _objc_msgSend_328( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + ) { + return __objc_msgSend_328( + obj, + sel, + buffer, + ); + } + + late final __objc_msgSend_328Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_328 = __objc_msgSend_328Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_variantFittingPresentationWidth_1 = + _registerName1("variantFittingPresentationWidth:"); + ffi.Pointer _objc_msgSend_329( + ffi.Pointer obj, + ffi.Pointer sel, + int width, + ) { + return __objc_msgSend_329( + obj, + sel, + width, + ); + } + + late final __objc_msgSend_329Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_329 = __objc_msgSend_329Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_pathWithComponents_1 = _registerName1("pathWithComponents:"); + ffi.Pointer _objc_msgSend_330( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer components, + ) { + return __objc_msgSend_330( + obj, + sel, + components, + ); + } + + late final __objc_msgSend_330Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_330 = __objc_msgSend_330Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_isAbsolutePath1 = _registerName1("isAbsolutePath"); + late final _sel_stringByDeletingLastPathComponent1 = + _registerName1("stringByDeletingLastPathComponent"); + late final _sel_stringByAppendingPathComponent_1 = + _registerName1("stringByAppendingPathComponent:"); + late final _sel_stringByDeletingPathExtension1 = + _registerName1("stringByDeletingPathExtension"); + late final _sel_stringByAppendingPathExtension_1 = + _registerName1("stringByAppendingPathExtension:"); + late final _sel_stringByAbbreviatingWithTildeInPath1 = + _registerName1("stringByAbbreviatingWithTildeInPath"); + late final _sel_stringByExpandingTildeInPath1 = + _registerName1("stringByExpandingTildeInPath"); + late final _sel_stringByStandardizingPath1 = + _registerName1("stringByStandardizingPath"); + late final _sel_stringByResolvingSymlinksInPath1 = + _registerName1("stringByResolvingSymlinksInPath"); + late final _sel_stringsByAppendingPaths_1 = + _registerName1("stringsByAppendingPaths:"); + late final _sel_completePathIntoString_caseSensitive_matchesIntoArray_filterTypes_1 = + _registerName1( + "completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:"); + int _objc_msgSend_331( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> outputName, + bool flag, + ffi.Pointer> outputArray, + ffi.Pointer filterTypes, + ) { + return __objc_msgSend_331( + obj, + sel, + outputName, + flag, + outputArray, + filterTypes, + ); + } + + late final __objc_msgSend_331Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Bool, + ffi.Pointer>, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_331 = __objc_msgSend_331Ptr.asFunction< + int Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + bool, + ffi.Pointer>, + ffi.Pointer)>(); + + late final _sel_stringByAddingPercentEncodingWithAllowedCharacters_1 = + _registerName1("stringByAddingPercentEncodingWithAllowedCharacters:"); + late final _sel_stringByRemovingPercentEncoding1 = + _registerName1("stringByRemovingPercentEncoding"); + late final _sel_stringByAddingPercentEscapesUsingEncoding_1 = + _registerName1("stringByAddingPercentEscapesUsingEncoding:"); + late final _sel_stringByReplacingPercentEscapesUsingEncoding_1 = + _registerName1("stringByReplacingPercentEscapesUsingEncoding:"); + late final _class_NSOrthography1 = _getClass1("NSOrthography"); + late final _sel_dominantScript1 = _registerName1("dominantScript"); + late final _sel_languageMap1 = _registerName1("languageMap"); + late final _sel_initWithDominantScript_languageMap_1 = + _registerName1("initWithDominantScript:languageMap:"); + instancetype _objc_msgSend_332( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer script, + ffi.Pointer map, + ) { + return __objc_msgSend_332( + obj, + sel, + script, + map, + ); + } + + late final __objc_msgSend_332Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_332 = __objc_msgSend_332Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_languagesForScript_1 = _registerName1("languagesForScript:"); + late final _sel_dominantLanguageForScript_1 = + _registerName1("dominantLanguageForScript:"); + late final _sel_dominantLanguage1 = _registerName1("dominantLanguage"); + late final _sel_allScripts1 = _registerName1("allScripts"); + late final _sel_allLanguages1 = _registerName1("allLanguages"); + late final _sel_defaultOrthographyForLanguage_1 = + _registerName1("defaultOrthographyForLanguage:"); + late final _sel_orthographyWithDominantScript_languageMap_1 = + _registerName1("orthographyWithDominantScript:languageMap:"); + late final _sel_linguisticTagsInRange_scheme_options_orthography_tokenRanges_1 = + _registerName1( + "linguisticTagsInRange:scheme:options:orthography:tokenRanges:"); + ffi.Pointer _objc_msgSend_333( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer scheme, + int options, + ffi.Pointer orthography, + ffi.Pointer> tokenRanges, + ) { + return __objc_msgSend_333( + obj, + sel, + range, + scheme, + options, + orthography, + tokenRanges, + ); + } + + late final __objc_msgSend_333Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_333 = __objc_msgSend_333Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_enumerateLinguisticTagsInRange_scheme_options_orthography_usingBlock_1 = + _registerName1( + "enumerateLinguisticTagsInRange:scheme:options:orthography:usingBlock:"); + void _objc_msgSend_334( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer scheme, + int options, + ffi.Pointer orthography, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_334( + obj, + sel, + range, + scheme, + options, + orthography, + block, + ); + } + + late final __objc_msgSend_334Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_334 = __objc_msgSend_334Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_anyObject1 = _registerName1("anyObject"); + late final _sel_intersectsSet_1 = _registerName1("intersectsSet:"); + bool _objc_msgSend_335( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherSet, + ) { + return __objc_msgSend_335( + obj, + sel, + otherSet, + ); + } + + late final __objc_msgSend_335Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_335 = __objc_msgSend_335Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_isEqualToSet_1 = _registerName1("isEqualToSet:"); + late final _sel_isSubsetOfSet_1 = _registerName1("isSubsetOfSet:"); + late final _sel_setByAddingObject_1 = _registerName1("setByAddingObject:"); + ffi.Pointer _objc_msgSend_336( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + ) { + return __objc_msgSend_336( + obj, + sel, + anObject, + ); + } + + late final __objc_msgSend_336Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_336 = __objc_msgSend_336Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setByAddingObjectsFromSet_1 = + _registerName1("setByAddingObjectsFromSet:"); + ffi.Pointer _objc_msgSend_337( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_337( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_337Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_337 = __objc_msgSend_337Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setByAddingObjectsFromArray_1 = + _registerName1("setByAddingObjectsFromArray:"); + ffi.Pointer _objc_msgSend_338( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_338( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_338Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_338 = __objc_msgSend_338Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + void _objc_msgSend_339( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_339( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_339Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_339 = __objc_msgSend_339Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + void _objc_msgSend_340( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_340( + obj, + sel, + opts, + block, + ); + } + + late final __objc_msgSend_340Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_340 = __objc_msgSend_340Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_objectsPassingTest_1 = _registerName1("objectsPassingTest:"); + ffi.Pointer _objc_msgSend_341( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_341( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_341Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_341 = __objc_msgSend_341Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_objectsWithOptions_passingTest_1 = + _registerName1("objectsWithOptions:passingTest:"); + ffi.Pointer _objc_msgSend_342( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> predicate, + ) { + return __objc_msgSend_342( + obj, + sel, + opts, + predicate, + ); + } + + late final __objc_msgSend_342Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_342 = __objc_msgSend_342Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_set1 = _registerName1("set"); + late final _sel_setWithObject_1 = _registerName1("setWithObject:"); + late final _sel_setWithObjects_count_1 = + _registerName1("setWithObjects:count:"); + late final _sel_setWithObjects_1 = _registerName1("setWithObjects:"); + late final _sel_setWithSet_1 = _registerName1("setWithSet:"); + instancetype _objc_msgSend_343( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + ) { + return __objc_msgSend_343( + obj, + sel, + set1, + ); + } + + late final __objc_msgSend_343Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_343 = __objc_msgSend_343Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_setWithArray_1 = _registerName1("setWithArray:"); + late final _sel_initWithSet_1 = _registerName1("initWithSet:"); + late final _sel_initWithSet_copyItems_1 = + _registerName1("initWithSet:copyItems:"); + instancetype _objc_msgSend_344( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + bool flag, + ) { + return __objc_msgSend_344( + obj, + sel, + set1, + flag, + ); + } + + late final __objc_msgSend_344Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_344 = __objc_msgSend_344Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_filteredSetUsingPredicate_1 = + _registerName1("filteredSetUsingPredicate:"); + ffi.Pointer _objc_msgSend_345( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer predicate, + ) { + return __objc_msgSend_345( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_345Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_345 = __objc_msgSend_345Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_invocationWithMethodSignature_1 = + _registerName1("invocationWithMethodSignature:"); + ffi.Pointer _objc_msgSend_346( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer sig, + ) { + return __objc_msgSend_346( + obj, + sel, + sig, + ); + } + + late final __objc_msgSend_346Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_346 = __objc_msgSend_346Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_methodSignature1 = _registerName1("methodSignature"); + ffi.Pointer _objc_msgSend_347( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_347( + obj, + sel, + ); + } + + late final __objc_msgSend_347Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_347 = __objc_msgSend_347Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_retainArguments1 = _registerName1("retainArguments"); + late final _sel_argumentsRetained1 = _registerName1("argumentsRetained"); + late final _sel_target1 = _registerName1("target"); + late final _sel_setTarget_1 = _registerName1("setTarget:"); + void _objc_msgSend_348( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_348( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_348Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_348 = __objc_msgSend_348Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_selector1 = _registerName1("selector"); + ffi.Pointer _objc_msgSend_349( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_349( + obj, + sel, + ); + } + + late final __objc_msgSend_349Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_349 = __objc_msgSend_349Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setSelector_1 = _registerName1("setSelector:"); + void _objc_msgSend_350( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_350( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_350Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_350 = __objc_msgSend_350Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_getReturnValue_1 = _registerName1("getReturnValue:"); + late final _sel_setReturnValue_1 = _registerName1("setReturnValue:"); + late final _sel_getArgument_atIndex_1 = + _registerName1("getArgument:atIndex:"); + void _objc_msgSend_351( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer argumentLocation, + int idx, + ) { + return __objc_msgSend_351( + obj, + sel, + argumentLocation, + idx, + ); + } + + late final __objc_msgSend_351Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_351 = __objc_msgSend_351Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_setArgument_atIndex_1 = + _registerName1("setArgument:atIndex:"); + late final _sel_invoke1 = _registerName1("invoke"); + late final _sel_invokeWithTarget_1 = _registerName1("invokeWithTarget:"); + late final _sel_invokeUsingIMP_1 = _registerName1("invokeUsingIMP:"); + void _objc_msgSend_352( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> imp, + ) { + return __objc_msgSend_352( + obj, + sel, + imp, + ); + } + + late final __objc_msgSend_352Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>)>>( + 'objc_msgSend'); + late final __objc_msgSend_352 = __objc_msgSend_352Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_forwardInvocation_1 = _registerName1("forwardInvocation:"); + void _objc_msgSend_353( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anInvocation, + ) { + return __objc_msgSend_353( + obj, + sel, + anInvocation, + ); + } + + late final __objc_msgSend_353Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_353 = __objc_msgSend_353Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_methodSignatureForSelector_1 = + _registerName1("methodSignatureForSelector:"); + ffi.Pointer _objc_msgSend_354( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ) { + return __objc_msgSend_354( + obj, + sel, + aSelector, + ); + } + + late final __objc_msgSend_354Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_354 = __objc_msgSend_354Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_instanceMethodSignatureForSelector_1 = + _registerName1("instanceMethodSignatureForSelector:"); + late final _sel_allowsWeakReference1 = _registerName1("allowsWeakReference"); + late final _sel_retainWeakReference1 = _registerName1("retainWeakReference"); + late final _sel_isSubclassOfClass_1 = _registerName1("isSubclassOfClass:"); + late final _sel_resolveClassMethod_1 = _registerName1("resolveClassMethod:"); + late final _sel_resolveInstanceMethod_1 = + _registerName1("resolveInstanceMethod:"); + late final _sel_superclass1 = _registerName1("superclass"); + late final _sel_class1 = _registerName1("class"); + late final _sel_debugDescription1 = _registerName1("debugDescription"); + late final _sel_version1 = _registerName1("version"); + late final _sel_setVersion_1 = _registerName1("setVersion:"); + void _objc_msgSend_355( + ffi.Pointer obj, + ffi.Pointer sel, + int aVersion, + ) { + return __objc_msgSend_355( + obj, + sel, + aVersion, + ); + } + + late final __objc_msgSend_355Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_355 = __objc_msgSend_355Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_classForCoder1 = _registerName1("classForCoder"); + late final _sel_replacementObjectForCoder_1 = + _registerName1("replacementObjectForCoder:"); + late final _sel_awakeAfterUsingCoder_1 = + _registerName1("awakeAfterUsingCoder:"); + late final _sel_poseAsClass_1 = _registerName1("poseAsClass:"); + late final _sel_autoContentAccessingProxy1 = + _registerName1("autoContentAccessingProxy"); + late final _sel_attemptRecoveryFromError_optionIndex_delegate_didRecoverSelector_contextInfo_1 = + _registerName1( + "attemptRecoveryFromError:optionIndex:delegate:didRecoverSelector:contextInfo:"); + void _objc_msgSend_356( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer error, + int recoveryOptionIndex, + ffi.Pointer delegate, + ffi.Pointer didRecoverSelector, + ffi.Pointer contextInfo, + ) { + return __objc_msgSend_356( + obj, + sel, + error, + recoveryOptionIndex, + delegate, + didRecoverSelector, + contextInfo, + ); + } + + late final __objc_msgSend_356Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_356 = __objc_msgSend_356Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_attemptRecoveryFromError_optionIndex_1 = + _registerName1("attemptRecoveryFromError:optionIndex:"); + bool _objc_msgSend_357( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer error, + int recoveryOptionIndex, + ) { + return __objc_msgSend_357( + obj, + sel, + error, + recoveryOptionIndex, + ); + } + + late final __objc_msgSend_357Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_357 = __objc_msgSend_357Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_performSelector_withObject_afterDelay_inModes_1 = + _registerName1("performSelector:withObject:afterDelay:inModes:"); + void _objc_msgSend_358( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer anArgument, + double delay, + ffi.Pointer modes, + ) { + return __objc_msgSend_358( + obj, + sel, + aSelector, + anArgument, + delay, + modes, + ); + } + + late final __objc_msgSend_358Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_358 = __objc_msgSend_358Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + double, + ffi.Pointer)>(); + + late final _sel_performSelector_withObject_afterDelay_1 = + _registerName1("performSelector:withObject:afterDelay:"); + void _objc_msgSend_359( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer anArgument, + double delay, + ) { + return __objc_msgSend_359( + obj, + sel, + aSelector, + anArgument, + delay, + ); + } + + late final __objc_msgSend_359Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_359 = __objc_msgSend_359Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_URL_resourceDataDidBecomeAvailable_1 = + _registerName1("URL:resourceDataDidBecomeAvailable:"); + void _objc_msgSend_360( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer sender, + ffi.Pointer newBytes, + ) { + return __objc_msgSend_360( + obj, + sel, + sender, + newBytes, + ); + } + + late final __objc_msgSend_360Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_360 = __objc_msgSend_360Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_URLResourceDidFinishLoading_1 = + _registerName1("URLResourceDidFinishLoading:"); + void _objc_msgSend_361( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer sender, + ) { + return __objc_msgSend_361( + obj, + sel, + sender, + ); + } + + late final __objc_msgSend_361Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_361 = __objc_msgSend_361Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLResourceDidCancelLoading_1 = + _registerName1("URLResourceDidCancelLoading:"); + late final _sel_URL_resourceDidFailLoadingWithReason_1 = + _registerName1("URL:resourceDidFailLoadingWithReason:"); + void _objc_msgSend_362( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer sender, + ffi.Pointer reason, + ) { + return __objc_msgSend_362( + obj, + sel, + sender, + reason, + ); + } + + late final __objc_msgSend_362Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_362 = __objc_msgSend_362Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSFileManager1 = _getClass1("NSFileManager"); + late final _sel_defaultManager1 = _registerName1("defaultManager"); + ffi.Pointer _objc_msgSend_363( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_363( + obj, + sel, + ); + } + + late final __objc_msgSend_363Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_363 = __objc_msgSend_363Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_mountedVolumeURLsIncludingResourceValuesForKeys_options_1 = + _registerName1( + "mountedVolumeURLsIncludingResourceValuesForKeys:options:"); + ffi.Pointer _objc_msgSend_364( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer propertyKeys, + int options, + ) { + return __objc_msgSend_364( + obj, + sel, + propertyKeys, + options, + ); + } + + late final __objc_msgSend_364Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_364 = __objc_msgSend_364Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_unmountVolumeAtURL_options_completionHandler_1 = + _registerName1("unmountVolumeAtURL:options:completionHandler:"); + void _objc_msgSend_365( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int mask, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_365( + obj, + sel, + url, + mask, + completionHandler, + ); + } + + late final __objc_msgSend_365Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_365 = __objc_msgSend_365Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_contentsOfDirectoryAtURL_includingPropertiesForKeys_options_error_1 = + _registerName1( + "contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error:"); + ffi.Pointer _objc_msgSend_366( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer keys, + int mask, + ffi.Pointer> error, + ) { + return __objc_msgSend_366( + obj, + sel, + url, + keys, + mask, + error, + ); + } + + late final __objc_msgSend_366Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_366 = __objc_msgSend_366Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_URLsForDirectory_inDomains_1 = + _registerName1("URLsForDirectory:inDomains:"); + ffi.Pointer _objc_msgSend_367( + ffi.Pointer obj, + ffi.Pointer sel, + int directory, + int domainMask, + ) { + return __objc_msgSend_367( + obj, + sel, + directory, + domainMask, + ); + } + + late final __objc_msgSend_367Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int32, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_367 = __objc_msgSend_367Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int, int)>(); + + late final _sel_URLForDirectory_inDomain_appropriateForURL_create_error_1 = + _registerName1( + "URLForDirectory:inDomain:appropriateForURL:create:error:"); + ffi.Pointer _objc_msgSend_368( + ffi.Pointer obj, + ffi.Pointer sel, + int directory, + int domain, + ffi.Pointer url, + bool shouldCreate, + ffi.Pointer> error, + ) { + return __objc_msgSend_368( + obj, + sel, + directory, + domain, + url, + shouldCreate, + error, + ); + } + + late final __objc_msgSend_368Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Pointer, + ffi.Bool, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_368 = __objc_msgSend_368Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + int, + ffi.Pointer, + bool, + ffi.Pointer>)>(); + + late final _sel_getRelationship_ofDirectoryAtURL_toItemAtURL_error_1 = + _registerName1("getRelationship:ofDirectoryAtURL:toItemAtURL:error:"); + bool _objc_msgSend_369( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer outRelationship, + ffi.Pointer directoryURL, + ffi.Pointer otherURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_369( + obj, + sel, + outRelationship, + directoryURL, + otherURL, + error, + ); + } + + late final __objc_msgSend_369Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_369 = __objc_msgSend_369Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_getRelationship_ofDirectory_inDomain_toItemAtURL_error_1 = + _registerName1("getRelationship:ofDirectory:inDomain:toItemAtURL:error:"); + bool _objc_msgSend_370( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer outRelationship, + int directory, + int domainMask, + ffi.Pointer url, + ffi.Pointer> error, + ) { + return __objc_msgSend_370( + obj, + sel, + outRelationship, + directory, + domainMask, + url, + error, + ); + } + + late final __objc_msgSend_370Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_370 = __objc_msgSend_370Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + int, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_createDirectoryAtURL_withIntermediateDirectories_attributes_error_1 = + _registerName1( + "createDirectoryAtURL:withIntermediateDirectories:attributes:error:"); + bool _objc_msgSend_371( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + bool createIntermediates, + ffi.Pointer attributes, + ffi.Pointer> error, + ) { + return __objc_msgSend_371( + obj, + sel, + url, + createIntermediates, + attributes, + error, + ); + } + + late final __objc_msgSend_371Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_371 = __objc_msgSend_371Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_createSymbolicLinkAtURL_withDestinationURL_error_1 = + _registerName1("createSymbolicLinkAtURL:withDestinationURL:error:"); + bool _objc_msgSend_372( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer destURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_372( + obj, + sel, + url, + destURL, + error, + ); + } + + late final __objc_msgSend_372Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_372 = __objc_msgSend_372Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_delegate1 = _registerName1("delegate"); + late final _sel_setDelegate_1 = _registerName1("setDelegate:"); + late final _sel_setAttributes_ofItemAtPath_error_1 = + _registerName1("setAttributes:ofItemAtPath:error:"); + bool _objc_msgSend_373( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attributes, + ffi.Pointer path, + ffi.Pointer> error, + ) { + return __objc_msgSend_373( + obj, + sel, + attributes, + path, + error, + ); + } + + late final __objc_msgSend_373Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_373 = __objc_msgSend_373Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_createDirectoryAtPath_withIntermediateDirectories_attributes_error_1 = + _registerName1( + "createDirectoryAtPath:withIntermediateDirectories:attributes:error:"); + bool _objc_msgSend_374( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool createIntermediates, + ffi.Pointer attributes, + ffi.Pointer> error, + ) { + return __objc_msgSend_374( + obj, + sel, + path, + createIntermediates, + attributes, + error, + ); + } + + late final __objc_msgSend_374Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_374 = __objc_msgSend_374Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_contentsOfDirectoryAtPath_error_1 = + _registerName1("contentsOfDirectoryAtPath:error:"); + ffi.Pointer _objc_msgSend_375( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer> error, + ) { + return __objc_msgSend_375( + obj, + sel, + path, + error, + ); + } + + late final __objc_msgSend_375Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_375 = __objc_msgSend_375Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_subpathsOfDirectoryAtPath_error_1 = + _registerName1("subpathsOfDirectoryAtPath:error:"); + late final _sel_attributesOfItemAtPath_error_1 = + _registerName1("attributesOfItemAtPath:error:"); + ffi.Pointer _objc_msgSend_376( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer> error, + ) { + return __objc_msgSend_376( + obj, + sel, + path, + error, + ); + } + + late final __objc_msgSend_376Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_376 = __objc_msgSend_376Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_attributesOfFileSystemForPath_error_1 = + _registerName1("attributesOfFileSystemForPath:error:"); + late final _sel_createSymbolicLinkAtPath_withDestinationPath_error_1 = + _registerName1("createSymbolicLinkAtPath:withDestinationPath:error:"); + bool _objc_msgSend_377( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer destPath, + ffi.Pointer> error, + ) { + return __objc_msgSend_377( + obj, + sel, + path, + destPath, + error, + ); + } + + late final __objc_msgSend_377Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_377 = __objc_msgSend_377Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_destinationOfSymbolicLinkAtPath_error_1 = + _registerName1("destinationOfSymbolicLinkAtPath:error:"); + ffi.Pointer _objc_msgSend_378( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer> error, + ) { + return __objc_msgSend_378( + obj, + sel, + path, + error, + ); + } + + late final __objc_msgSend_378Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_378 = __objc_msgSend_378Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_copyItemAtPath_toPath_error_1 = + _registerName1("copyItemAtPath:toPath:error:"); + late final _sel_moveItemAtPath_toPath_error_1 = + _registerName1("moveItemAtPath:toPath:error:"); + late final _sel_linkItemAtPath_toPath_error_1 = + _registerName1("linkItemAtPath:toPath:error:"); + late final _sel_removeItemAtPath_error_1 = + _registerName1("removeItemAtPath:error:"); + bool _objc_msgSend_379( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer> error, + ) { + return __objc_msgSend_379( + obj, + sel, + path, + error, + ); + } + + late final __objc_msgSend_379Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_379 = __objc_msgSend_379Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_copyItemAtURL_toURL_error_1 = + _registerName1("copyItemAtURL:toURL:error:"); + late final _sel_moveItemAtURL_toURL_error_1 = + _registerName1("moveItemAtURL:toURL:error:"); + late final _sel_linkItemAtURL_toURL_error_1 = + _registerName1("linkItemAtURL:toURL:error:"); + late final _sel_removeItemAtURL_error_1 = + _registerName1("removeItemAtURL:error:"); + late final _sel_trashItemAtURL_resultingItemURL_error_1 = + _registerName1("trashItemAtURL:resultingItemURL:error:"); + bool _objc_msgSend_380( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer> outResultingURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_380( + obj, + sel, + url, + outResultingURL, + error, + ); + } + + late final __objc_msgSend_380Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_380 = __objc_msgSend_380Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_fileAttributesAtPath_traverseLink_1 = + _registerName1("fileAttributesAtPath:traverseLink:"); + ffi.Pointer _objc_msgSend_381( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool yorn, + ) { + return __objc_msgSend_381( + obj, + sel, + path, + yorn, + ); + } + + late final __objc_msgSend_381Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_381 = __objc_msgSend_381Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_changeFileAttributes_atPath_1 = + _registerName1("changeFileAttributes:atPath:"); + bool _objc_msgSend_382( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attributes, + ffi.Pointer path, + ) { + return __objc_msgSend_382( + obj, + sel, + attributes, + path, + ); + } + + late final __objc_msgSend_382Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_382 = __objc_msgSend_382Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_directoryContentsAtPath_1 = + _registerName1("directoryContentsAtPath:"); + late final _sel_fileSystemAttributesAtPath_1 = + _registerName1("fileSystemAttributesAtPath:"); + late final _sel_pathContentOfSymbolicLinkAtPath_1 = + _registerName1("pathContentOfSymbolicLinkAtPath:"); + late final _sel_createSymbolicLinkAtPath_pathContent_1 = + _registerName1("createSymbolicLinkAtPath:pathContent:"); + bool _objc_msgSend_383( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer otherpath, + ) { + return __objc_msgSend_383( + obj, + sel, + path, + otherpath, + ); + } + + late final __objc_msgSend_383Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_383 = __objc_msgSend_383Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_createDirectoryAtPath_attributes_1 = + _registerName1("createDirectoryAtPath:attributes:"); + bool _objc_msgSend_384( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer attributes, + ) { + return __objc_msgSend_384( + obj, + sel, + path, + attributes, + ); + } + + late final __objc_msgSend_384Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_384 = __objc_msgSend_384Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_linkPath_toPath_handler_1 = + _registerName1("linkPath:toPath:handler:"); + bool _objc_msgSend_385( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer src, + ffi.Pointer dest, + ffi.Pointer handler, + ) { + return __objc_msgSend_385( + obj, + sel, + src, + dest, + handler, + ); + } + + late final __objc_msgSend_385Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_385 = __objc_msgSend_385Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_copyPath_toPath_handler_1 = + _registerName1("copyPath:toPath:handler:"); + late final _sel_movePath_toPath_handler_1 = + _registerName1("movePath:toPath:handler:"); + late final _sel_removeFileAtPath_handler_1 = + _registerName1("removeFileAtPath:handler:"); + bool _objc_msgSend_386( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer handler, + ) { + return __objc_msgSend_386( + obj, + sel, + path, + handler, + ); + } + + late final __objc_msgSend_386Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_386 = __objc_msgSend_386Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_currentDirectoryPath1 = + _registerName1("currentDirectoryPath"); + late final _sel_changeCurrentDirectoryPath_1 = + _registerName1("changeCurrentDirectoryPath:"); + late final _sel_fileExistsAtPath_1 = _registerName1("fileExistsAtPath:"); + late final _sel_fileExistsAtPath_isDirectory_1 = + _registerName1("fileExistsAtPath:isDirectory:"); + bool _objc_msgSend_387( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer isDirectory, + ) { + return __objc_msgSend_387( + obj, + sel, + path, + isDirectory, + ); + } + + late final __objc_msgSend_387Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_387 = __objc_msgSend_387Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_isReadableFileAtPath_1 = + _registerName1("isReadableFileAtPath:"); + late final _sel_isWritableFileAtPath_1 = + _registerName1("isWritableFileAtPath:"); + late final _sel_isExecutableFileAtPath_1 = + _registerName1("isExecutableFileAtPath:"); + late final _sel_isDeletableFileAtPath_1 = + _registerName1("isDeletableFileAtPath:"); + late final _sel_contentsEqualAtPath_andPath_1 = + _registerName1("contentsEqualAtPath:andPath:"); + late final _sel_displayNameAtPath_1 = _registerName1("displayNameAtPath:"); + late final _sel_componentsToDisplayForPath_1 = + _registerName1("componentsToDisplayForPath:"); + late final _sel_enumeratorAtPath_1 = _registerName1("enumeratorAtPath:"); + late final _sel_enumeratorAtURL_includingPropertiesForKeys_options_errorHandler_1 = + _registerName1( + "enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:"); + ffi.Pointer _objc_msgSend_388( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer keys, + int mask, + ffi.Pointer<_ObjCBlock> handler, + ) { + return __objc_msgSend_388( + obj, + sel, + url, + keys, + mask, + handler, + ); + } + + late final __objc_msgSend_388Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_388 = __objc_msgSend_388Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_subpathsAtPath_1 = _registerName1("subpathsAtPath:"); + late final _sel_contentsAtPath_1 = _registerName1("contentsAtPath:"); + ffi.Pointer _objc_msgSend_389( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_389( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_389Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_389 = __objc_msgSend_389Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_createFileAtPath_contents_attributes_1 = + _registerName1("createFileAtPath:contents:attributes:"); + bool _objc_msgSend_390( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ffi.Pointer data, + ffi.Pointer attr, + ) { + return __objc_msgSend_390( + obj, + sel, + path, + data, + attr, + ); + } + + late final __objc_msgSend_390Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_390 = __objc_msgSend_390Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_fileSystemRepresentationWithPath_1 = + _registerName1("fileSystemRepresentationWithPath:"); + ffi.Pointer _objc_msgSend_391( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_391( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_391Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_391 = __objc_msgSend_391Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_stringWithFileSystemRepresentation_length_1 = + _registerName1("stringWithFileSystemRepresentation:length:"); + ffi.Pointer _objc_msgSend_392( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer str, + int len, + ) { + return __objc_msgSend_392( + obj, + sel, + str, + len, + ); + } + + late final __objc_msgSend_392Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_392 = __objc_msgSend_392Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_replaceItemAtURL_withItemAtURL_backupItemName_options_resultingItemURL_error_1 = + _registerName1( + "replaceItemAtURL:withItemAtURL:backupItemName:options:resultingItemURL:error:"); + bool _objc_msgSend_393( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer originalItemURL, + ffi.Pointer newItemURL, + ffi.Pointer backupItemName, + int options, + ffi.Pointer> resultingURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_393( + obj, + sel, + originalItemURL, + newItemURL, + backupItemName, + options, + resultingURL, + error, + ); + } + + late final __objc_msgSend_393Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_393 = __objc_msgSend_393Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_setUbiquitous_itemAtURL_destinationURL_error_1 = + _registerName1("setUbiquitous:itemAtURL:destinationURL:error:"); + bool _objc_msgSend_394( + ffi.Pointer obj, + ffi.Pointer sel, + bool flag, + ffi.Pointer url, + ffi.Pointer destinationURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_394( + obj, + sel, + flag, + url, + destinationURL, + error, + ); + } + + late final __objc_msgSend_394Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_394 = __objc_msgSend_394Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_isUbiquitousItemAtURL_1 = + _registerName1("isUbiquitousItemAtURL:"); + bool _objc_msgSend_395( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_395( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_395Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_395 = __objc_msgSend_395Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_startDownloadingUbiquitousItemAtURL_error_1 = + _registerName1("startDownloadingUbiquitousItemAtURL:error:"); + late final _sel_evictUbiquitousItemAtURL_error_1 = + _registerName1("evictUbiquitousItemAtURL:error:"); + late final _sel_URLForUbiquityContainerIdentifier_1 = + _registerName1("URLForUbiquityContainerIdentifier:"); + late final _sel_URLForPublishingUbiquitousItemAtURL_expirationDate_error_1 = + _registerName1( + "URLForPublishingUbiquitousItemAtURL:expirationDate:error:"); + ffi.Pointer _objc_msgSend_396( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer> outDate, + ffi.Pointer> error, + ) { + return __objc_msgSend_396( + obj, + sel, + url, + outDate, + error, + ); + } + + late final __objc_msgSend_396Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_396 = __objc_msgSend_396Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_ubiquityIdentityToken1 = + _registerName1("ubiquityIdentityToken"); + late final _sel_getFileProviderServicesForItemAtURL_completionHandler_1 = + _registerName1("getFileProviderServicesForItemAtURL:completionHandler:"); + void _objc_msgSend_397( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_397( + obj, + sel, + url, + completionHandler, + ); + } + + late final __objc_msgSend_397Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_397 = __objc_msgSend_397Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_containerURLForSecurityApplicationGroupIdentifier_1 = + _registerName1("containerURLForSecurityApplicationGroupIdentifier:"); + late final _sel_homeDirectoryForCurrentUser1 = + _registerName1("homeDirectoryForCurrentUser"); + late final _sel_temporaryDirectory1 = _registerName1("temporaryDirectory"); + late final _sel_homeDirectoryForUser_1 = + _registerName1("homeDirectoryForUser:"); + late final _sel_fileManager_shouldProceedAfterError_1 = + _registerName1("fileManager:shouldProceedAfterError:"); + bool _objc_msgSend_398( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer fm, + ffi.Pointer errorInfo, + ) { + return __objc_msgSend_398( + obj, + sel, + fm, + errorInfo, + ); + } + + late final __objc_msgSend_398Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_398 = __objc_msgSend_398Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_fileManager_willProcessPath_1 = + _registerName1("fileManager:willProcessPath:"); + void _objc_msgSend_399( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer fm, + ffi.Pointer path, + ) { + return __objc_msgSend_399( + obj, + sel, + fm, + path, + ); + } + + late final __objc_msgSend_399Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_399 = __objc_msgSend_399Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_validateValue_forKey_error_1 = + _registerName1("validateValue:forKey:error:"); + late final _class_NSMutableArray1 = _getClass1("NSMutableArray"); + late final _sel_addObject_1 = _registerName1("addObject:"); + late final _sel_insertObject_atIndex_1 = + _registerName1("insertObject:atIndex:"); + void _objc_msgSend_400( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + int index, + ) { + return __objc_msgSend_400( + obj, + sel, + anObject, + index, + ); + } + + late final __objc_msgSend_400Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_400 = __objc_msgSend_400Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_removeLastObject1 = _registerName1("removeLastObject"); + late final _sel_removeObjectAtIndex_1 = + _registerName1("removeObjectAtIndex:"); + void _objc_msgSend_401( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ) { + return __objc_msgSend_401( + obj, + sel, + index, + ); + } + + late final __objc_msgSend_401Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_401 = __objc_msgSend_401Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_replaceObjectAtIndex_withObject_1 = + _registerName1("replaceObjectAtIndex:withObject:"); + void _objc_msgSend_402( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ffi.Pointer anObject, + ) { + return __objc_msgSend_402( + obj, + sel, + index, + anObject, + ); + } + + late final __objc_msgSend_402Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_402 = __objc_msgSend_402Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_initWithCapacity_1 = _registerName1("initWithCapacity:"); + late final _sel_addObjectsFromArray_1 = + _registerName1("addObjectsFromArray:"); + void _objc_msgSend_403( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherArray, + ) { + return __objc_msgSend_403( + obj, + sel, + otherArray, + ); + } + + late final __objc_msgSend_403Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_403 = __objc_msgSend_403Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_exchangeObjectAtIndex_withObjectAtIndex_1 = + _registerName1("exchangeObjectAtIndex:withObjectAtIndex:"); + void _objc_msgSend_404( + ffi.Pointer obj, + ffi.Pointer sel, + int idx1, + int idx2, + ) { + return __objc_msgSend_404( + obj, + sel, + idx1, + idx2, + ); + } + + late final __objc_msgSend_404Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_404 = __objc_msgSend_404Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, int)>(); + + late final _sel_removeAllObjects1 = _registerName1("removeAllObjects"); + late final _sel_removeObject_inRange_1 = + _registerName1("removeObject:inRange:"); + void _objc_msgSend_405( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + _NSRange range, + ) { + return __objc_msgSend_405( + obj, + sel, + anObject, + range, + ); + } + + late final __objc_msgSend_405Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_405 = __objc_msgSend_405Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + late final _sel_removeObject_1 = _registerName1("removeObject:"); + late final _sel_removeObjectIdenticalTo_inRange_1 = + _registerName1("removeObjectIdenticalTo:inRange:"); + late final _sel_removeObjectIdenticalTo_1 = + _registerName1("removeObjectIdenticalTo:"); + late final _sel_removeObjectsFromIndices_numIndices_1 = + _registerName1("removeObjectsFromIndices:numIndices:"); + void _objc_msgSend_406( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indices, + int cnt, + ) { + return __objc_msgSend_406( + obj, + sel, + indices, + cnt, + ); + } + + late final __objc_msgSend_406Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_406 = __objc_msgSend_406Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_removeObjectsInArray_1 = + _registerName1("removeObjectsInArray:"); + late final _sel_removeObjectsInRange_1 = + _registerName1("removeObjectsInRange:"); + void _objc_msgSend_407( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_407( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_407Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_407 = __objc_msgSend_407Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_replaceObjectsInRange_withObjectsFromArray_range_1 = + _registerName1("replaceObjectsInRange:withObjectsFromArray:range:"); + void _objc_msgSend_408( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer otherArray, + _NSRange otherRange, + ) { + return __objc_msgSend_408( + obj, + sel, + range, + otherArray, + otherRange, + ); + } + + late final __objc_msgSend_408Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_408 = __objc_msgSend_408Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer, _NSRange)>(); + + late final _sel_replaceObjectsInRange_withObjectsFromArray_1 = + _registerName1("replaceObjectsInRange:withObjectsFromArray:"); + void _objc_msgSend_409( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer otherArray, + ) { + return __objc_msgSend_409( + obj, + sel, + range, + otherArray, + ); + } + + late final __objc_msgSend_409Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_409 = __objc_msgSend_409Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer)>(); + + late final _sel_setArray_1 = _registerName1("setArray:"); + late final _sel_sortUsingFunction_context_1 = + _registerName1("sortUsingFunction:context:"); + void _objc_msgSend_410( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>> + compare, + ffi.Pointer context, + ) { + return __objc_msgSend_410( + obj, + sel, + compare, + context, + ); + } + + late final __objc_msgSend_410Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_410 = __objc_msgSend_410Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>, + ffi.Pointer)>(); + + late final _sel_sortUsingSelector_1 = _registerName1("sortUsingSelector:"); + late final _sel_insertObjects_atIndexes_1 = + _registerName1("insertObjects:atIndexes:"); + void _objc_msgSend_411( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer objects, + ffi.Pointer indexes, + ) { + return __objc_msgSend_411( + obj, + sel, + objects, + indexes, + ); + } + + late final __objc_msgSend_411Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_411 = __objc_msgSend_411Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_removeObjectsAtIndexes_1 = + _registerName1("removeObjectsAtIndexes:"); + void _objc_msgSend_412( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + ) { + return __objc_msgSend_412( + obj, + sel, + indexes, + ); + } + + late final __objc_msgSend_412Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_412 = __objc_msgSend_412Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_replaceObjectsAtIndexes_withObjects_1 = + _registerName1("replaceObjectsAtIndexes:withObjects:"); + void _objc_msgSend_413( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + ffi.Pointer objects, + ) { + return __objc_msgSend_413( + obj, + sel, + indexes, + objects, + ); + } + + late final __objc_msgSend_413Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_413 = __objc_msgSend_413Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setObject_atIndexedSubscript_1 = + _registerName1("setObject:atIndexedSubscript:"); + late final _sel_sortUsingComparator_1 = + _registerName1("sortUsingComparator:"); + void _objc_msgSend_414( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> cmptr, + ) { + return __objc_msgSend_414( + obj, + sel, + cmptr, + ); + } + + late final __objc_msgSend_414Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_414 = __objc_msgSend_414Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_sortWithOptions_usingComparator_1 = + _registerName1("sortWithOptions:usingComparator:"); + void _objc_msgSend_415( + ffi.Pointer obj, + ffi.Pointer sel, + int opts, + ffi.Pointer<_ObjCBlock> cmptr, + ) { + return __objc_msgSend_415( + obj, + sel, + opts, + cmptr, + ); + } + + late final __objc_msgSend_415Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_415 = __objc_msgSend_415Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_arrayWithCapacity_1 = _registerName1("arrayWithCapacity:"); + ffi.Pointer _objc_msgSend_416( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_416( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_416Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_416 = __objc_msgSend_416Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + ffi.Pointer _objc_msgSend_417( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_417( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_417Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_417 = __objc_msgSend_417Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_applyDifference_1 = _registerName1("applyDifference:"); + late final _sel_sortUsingDescriptors_1 = + _registerName1("sortUsingDescriptors:"); + late final _sel_filterUsingPredicate_1 = + _registerName1("filterUsingPredicate:"); + void _objc_msgSend_418( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer predicate, + ) { + return __objc_msgSend_418( + obj, + sel, + predicate, + ); + } + + late final __objc_msgSend_418Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_418 = __objc_msgSend_418Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_mutableArrayValueForKey_1 = + _registerName1("mutableArrayValueForKey:"); + late final _class_NSMutableOrderedSet1 = _getClass1("NSMutableOrderedSet"); + late final _class_NSOrderedSet1 = _getClass1("NSOrderedSet"); + late final _sel_isEqualToOrderedSet_1 = + _registerName1("isEqualToOrderedSet:"); + bool _objc_msgSend_419( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_419( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_419Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_419 = __objc_msgSend_419Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_intersectsOrderedSet_1 = + _registerName1("intersectsOrderedSet:"); + late final _sel_isSubsetOfOrderedSet_1 = + _registerName1("isSubsetOfOrderedSet:"); + late final _sel_reversedOrderedSet1 = _registerName1("reversedOrderedSet"); + ffi.Pointer _objc_msgSend_420( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_420( + obj, + sel, + ); + } + + late final __objc_msgSend_420Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_420 = __objc_msgSend_420Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_orderedSet1 = _registerName1("orderedSet"); + late final _sel_orderedSetWithObject_1 = + _registerName1("orderedSetWithObject:"); + late final _sel_orderedSetWithObjects_count_1 = + _registerName1("orderedSetWithObjects:count:"); + late final _sel_orderedSetWithObjects_1 = + _registerName1("orderedSetWithObjects:"); + late final _sel_orderedSetWithOrderedSet_1 = + _registerName1("orderedSetWithOrderedSet:"); + instancetype _objc_msgSend_421( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + ) { + return __objc_msgSend_421( + obj, + sel, + set1, + ); + } + + late final __objc_msgSend_421Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_421 = __objc_msgSend_421Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_orderedSetWithOrderedSet_range_copyItems_1 = + _registerName1("orderedSetWithOrderedSet:range:copyItems:"); + instancetype _objc_msgSend_422( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + _NSRange range, + bool flag, + ) { + return __objc_msgSend_422( + obj, + sel, + set1, + range, + flag, + ); + } + + late final __objc_msgSend_422Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_422 = __objc_msgSend_422Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange, bool)>(); + + late final _sel_orderedSetWithArray_1 = + _registerName1("orderedSetWithArray:"); + late final _sel_orderedSetWithArray_range_copyItems_1 = + _registerName1("orderedSetWithArray:range:copyItems:"); + instancetype _objc_msgSend_423( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer array, + _NSRange range, + bool flag, + ) { + return __objc_msgSend_423( + obj, + sel, + array, + range, + flag, + ); + } + + late final __objc_msgSend_423Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_423 = __objc_msgSend_423Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange, bool)>(); + + late final _sel_orderedSetWithSet_1 = _registerName1("orderedSetWithSet:"); + late final _sel_orderedSetWithSet_copyItems_1 = + _registerName1("orderedSetWithSet:copyItems:"); + late final _sel_initWithObject_1 = _registerName1("initWithObject:"); + late final _sel_initWithOrderedSet_1 = _registerName1("initWithOrderedSet:"); + late final _sel_initWithOrderedSet_copyItems_1 = + _registerName1("initWithOrderedSet:copyItems:"); + instancetype _objc_msgSend_424( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + bool flag, + ) { + return __objc_msgSend_424( + obj, + sel, + set1, + flag, + ); + } + + late final __objc_msgSend_424Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_424 = __objc_msgSend_424Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_initWithOrderedSet_range_copyItems_1 = + _registerName1("initWithOrderedSet:range:copyItems:"); + late final _sel_initWithArray_range_copyItems_1 = + _registerName1("initWithArray:range:copyItems:"); + late final _sel_differenceFromOrderedSet_withOptions_usingEquivalenceTest_1 = + _registerName1( + "differenceFromOrderedSet:withOptions:usingEquivalenceTest:"); + ffi.Pointer _objc_msgSend_425( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + int options, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_425( + obj, + sel, + other, + options, + block, + ); + } + + late final __objc_msgSend_425Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_425 = __objc_msgSend_425Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_differenceFromOrderedSet_withOptions_1 = + _registerName1("differenceFromOrderedSet:withOptions:"); + ffi.Pointer _objc_msgSend_426( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + int options, + ) { + return __objc_msgSend_426( + obj, + sel, + other, + options, + ); + } + + late final __objc_msgSend_426Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_426 = __objc_msgSend_426Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_differenceFromOrderedSet_1 = + _registerName1("differenceFromOrderedSet:"); + late final _sel_orderedSetByApplyingDifference_1 = + _registerName1("orderedSetByApplyingDifference:"); + ffi.Pointer _objc_msgSend_427( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer difference, + ) { + return __objc_msgSend_427( + obj, + sel, + difference, + ); + } + + late final __objc_msgSend_427Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_427 = __objc_msgSend_427Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_filteredOrderedSetUsingPredicate_1 = + _registerName1("filteredOrderedSetUsingPredicate:"); + ffi.Pointer _objc_msgSend_428( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer p, + ) { + return __objc_msgSend_428( + obj, + sel, + p, + ); + } + + late final __objc_msgSend_428Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_428 = __objc_msgSend_428Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_addObjects_count_1 = _registerName1("addObjects:count:"); + void _objc_msgSend_429( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> objects, + int count, + ) { + return __objc_msgSend_429( + obj, + sel, + objects, + count, + ); + } + + late final __objc_msgSend_429Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_429 = __objc_msgSend_429Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer>, int)>(); + + late final _sel_moveObjectsAtIndexes_toIndex_1 = + _registerName1("moveObjectsAtIndexes:toIndex:"); + void _objc_msgSend_430( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + int idx, + ) { + return __objc_msgSend_430( + obj, + sel, + indexes, + idx, + ); + } + + late final __objc_msgSend_430Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_430 = __objc_msgSend_430Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_setObject_atIndex_1 = _registerName1("setObject:atIndex:"); + late final _sel_replaceObjectsInRange_withObjects_count_1 = + _registerName1("replaceObjectsInRange:withObjects:count:"); + void _objc_msgSend_431( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer> objects, + int count, + ) { + return __objc_msgSend_431( + obj, + sel, + range, + objects, + count, + ); + } + + late final __objc_msgSend_431Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer>, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_431 = __objc_msgSend_431Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer>, int)>(); + + late final _sel_intersectOrderedSet_1 = + _registerName1("intersectOrderedSet:"); + void _objc_msgSend_432( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_432( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_432Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_432 = __objc_msgSend_432Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_minusOrderedSet_1 = _registerName1("minusOrderedSet:"); + late final _sel_unionOrderedSet_1 = _registerName1("unionOrderedSet:"); + late final _sel_intersectSet_1 = _registerName1("intersectSet:"); + void _objc_msgSend_433( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_433( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_433Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_433 = __objc_msgSend_433Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_minusSet_1 = _registerName1("minusSet:"); + late final _sel_unionSet_1 = _registerName1("unionSet:"); + late final _sel_sortRange_options_usingComparator_1 = + _registerName1("sortRange:options:usingComparator:"); + void _objc_msgSend_434( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + int opts, + ffi.Pointer<_ObjCBlock> cmptr, + ) { + return __objc_msgSend_434( + obj, + sel, + range, + opts, + cmptr, + ); + } + + late final __objc_msgSend_434Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_434 = __objc_msgSend_434Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_orderedSetWithCapacity_1 = + _registerName1("orderedSetWithCapacity:"); + late final _sel_mutableOrderedSetValueForKey_1 = + _registerName1("mutableOrderedSetValueForKey:"); + ffi.Pointer _objc_msgSend_435( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_435( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_435Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_435 = __objc_msgSend_435Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSMutableSet1 = _getClass1("NSMutableSet"); + late final _sel_setSet_1 = _registerName1("setSet:"); + late final _sel_setWithCapacity_1 = _registerName1("setWithCapacity:"); + late final _sel_mutableSetValueForKey_1 = + _registerName1("mutableSetValueForKey:"); + ffi.Pointer _objc_msgSend_436( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ) { + return __objc_msgSend_436( + obj, + sel, + key, + ); + } + + late final __objc_msgSend_436Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_436 = __objc_msgSend_436Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_valueForKeyPath_1 = _registerName1("valueForKeyPath:"); + late final _sel_setValue_forKeyPath_1 = + _registerName1("setValue:forKeyPath:"); + late final _sel_validateValue_forKeyPath_error_1 = + _registerName1("validateValue:forKeyPath:error:"); + late final _sel_mutableArrayValueForKeyPath_1 = + _registerName1("mutableArrayValueForKeyPath:"); + late final _sel_mutableOrderedSetValueForKeyPath_1 = + _registerName1("mutableOrderedSetValueForKeyPath:"); + late final _sel_mutableSetValueForKeyPath_1 = + _registerName1("mutableSetValueForKeyPath:"); + late final _sel_valueForUndefinedKey_1 = + _registerName1("valueForUndefinedKey:"); + late final _sel_setValue_forUndefinedKey_1 = + _registerName1("setValue:forUndefinedKey:"); + late final _sel_setNilValueForKey_1 = _registerName1("setNilValueForKey:"); + late final _sel_dictionaryWithValuesForKeys_1 = + _registerName1("dictionaryWithValuesForKeys:"); + ffi.Pointer _objc_msgSend_437( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keys, + ) { + return __objc_msgSend_437( + obj, + sel, + keys, + ); + } + + late final __objc_msgSend_437Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_437 = __objc_msgSend_437Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setValuesForKeysWithDictionary_1 = + _registerName1("setValuesForKeysWithDictionary:"); + void _objc_msgSend_438( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keyedValues, + ) { + return __objc_msgSend_438( + obj, + sel, + keyedValues, + ); + } + + late final __objc_msgSend_438Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_438 = __objc_msgSend_438Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_storedValueForKey_1 = _registerName1("storedValueForKey:"); + late final _sel_takeStoredValue_forKey_1 = + _registerName1("takeStoredValue:forKey:"); + late final _sel_takeValue_forKey_1 = _registerName1("takeValue:forKey:"); + late final _sel_takeValue_forKeyPath_1 = + _registerName1("takeValue:forKeyPath:"); + late final _sel_handleQueryWithUnboundKey_1 = + _registerName1("handleQueryWithUnboundKey:"); + late final _sel_handleTakeValue_forUnboundKey_1 = + _registerName1("handleTakeValue:forUnboundKey:"); + late final _sel_unableToSetNilForKey_1 = + _registerName1("unableToSetNilForKey:"); + late final _sel_valuesForKeys_1 = _registerName1("valuesForKeys:"); + late final _sel_takeValuesFromDictionary_1 = + _registerName1("takeValuesFromDictionary:"); + late final _sel_observeValueForKeyPath_ofObject_change_context_1 = + _registerName1("observeValueForKeyPath:ofObject:change:context:"); + void _objc_msgSend_439( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keyPath, + ffi.Pointer object, + ffi.Pointer change, + ffi.Pointer context, + ) { + return __objc_msgSend_439( + obj, + sel, + keyPath, + object, + change, + context, + ); + } + + late final __objc_msgSend_439Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_439 = __objc_msgSend_439Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_willChangeValueForKey_1 = + _registerName1("willChangeValueForKey:"); + late final _sel_didChangeValueForKey_1 = + _registerName1("didChangeValueForKey:"); + late final _sel_willChange_valuesAtIndexes_forKey_1 = + _registerName1("willChange:valuesAtIndexes:forKey:"); + void _objc_msgSend_440( + ffi.Pointer obj, + ffi.Pointer sel, + int changeKind, + ffi.Pointer indexes, + ffi.Pointer key, + ) { + return __objc_msgSend_440( + obj, + sel, + changeKind, + indexes, + key, + ); + } + + late final __objc_msgSend_440Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_440 = __objc_msgSend_440Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_didChange_valuesAtIndexes_forKey_1 = + _registerName1("didChange:valuesAtIndexes:forKey:"); + late final _sel_willChangeValueForKey_withSetMutation_usingObjects_1 = + _registerName1("willChangeValueForKey:withSetMutation:usingObjects:"); + void _objc_msgSend_441( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + int mutationKind, + ffi.Pointer objects, + ) { + return __objc_msgSend_441( + obj, + sel, + key, + mutationKind, + objects, + ); + } + + late final __objc_msgSend_441Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_441 = __objc_msgSend_441Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_didChangeValueForKey_withSetMutation_usingObjects_1 = + _registerName1("didChangeValueForKey:withSetMutation:usingObjects:"); + late final _sel_observationInfo1 = _registerName1("observationInfo"); + late final _sel_setObservationInfo_1 = _registerName1("setObservationInfo:"); + void _objc_msgSend_442( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_442( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_442Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_442 = __objc_msgSend_442Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_classForKeyedArchiver1 = + _registerName1("classForKeyedArchiver"); + late final _class_NSKeyedArchiver1 = _getClass1("NSKeyedArchiver"); + late final _sel_initRequiringSecureCoding_1 = + _registerName1("initRequiringSecureCoding:"); + late final _sel_archivedDataWithRootObject_requiringSecureCoding_error_1 = + _registerName1("archivedDataWithRootObject:requiringSecureCoding:error:"); + ffi.Pointer _objc_msgSend_443( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer object, + bool requiresSecureCoding, + ffi.Pointer> error, + ) { + return __objc_msgSend_443( + obj, + sel, + object, + requiresSecureCoding, + error, + ); + } + + late final __objc_msgSend_443Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_443 = __objc_msgSend_443Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer>)>(); + + late final _class_NSMutableData1 = _getClass1("NSMutableData"); + late final _sel_mutableBytes1 = _registerName1("mutableBytes"); + late final _sel_setLength_1 = _registerName1("setLength:"); + void _objc_msgSend_444( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_444( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_444Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_444 = __objc_msgSend_444Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_appendBytes_length_1 = _registerName1("appendBytes:length:"); + late final _sel_appendData_1 = _registerName1("appendData:"); + late final _sel_increaseLengthBy_1 = _registerName1("increaseLengthBy:"); + late final _sel_replaceBytesInRange_withBytes_1 = + _registerName1("replaceBytesInRange:withBytes:"); + void _objc_msgSend_445( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer bytes, + ) { + return __objc_msgSend_445( + obj, + sel, + range, + bytes, + ); + } + + late final __objc_msgSend_445Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_445 = __objc_msgSend_445Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer)>(); + + late final _sel_resetBytesInRange_1 = _registerName1("resetBytesInRange:"); + late final _sel_setData_1 = _registerName1("setData:"); + late final _sel_replaceBytesInRange_withBytes_length_1 = + _registerName1("replaceBytesInRange:withBytes:length:"); + void _objc_msgSend_446( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer replacementBytes, + int replacementLength, + ) { + return __objc_msgSend_446( + obj, + sel, + range, + replacementBytes, + replacementLength, + ); + } + + late final __objc_msgSend_446Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_446 = __objc_msgSend_446Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer, int)>(); + + late final _sel_dataWithCapacity_1 = _registerName1("dataWithCapacity:"); + late final _sel_dataWithLength_1 = _registerName1("dataWithLength:"); + late final _sel_initWithLength_1 = _registerName1("initWithLength:"); + late final _sel_decompressUsingAlgorithm_error_1 = + _registerName1("decompressUsingAlgorithm:error:"); + bool _objc_msgSend_447( + ffi.Pointer obj, + ffi.Pointer sel, + int algorithm, + ffi.Pointer> error, + ) { + return __objc_msgSend_447( + obj, + sel, + algorithm, + error, + ); + } + + late final __objc_msgSend_447Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_447 = __objc_msgSend_447Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer>)>(); + + late final _sel_compressUsingAlgorithm_error_1 = + _registerName1("compressUsingAlgorithm:error:"); + late final _sel_initForWritingWithMutableData_1 = + _registerName1("initForWritingWithMutableData:"); + instancetype _objc_msgSend_448( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ) { + return __objc_msgSend_448( + obj, + sel, + data, + ); + } + + late final __objc_msgSend_448Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_448 = __objc_msgSend_448Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_archivedDataWithRootObject_1 = + _registerName1("archivedDataWithRootObject:"); + ffi.Pointer _objc_msgSend_449( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer rootObject, + ) { + return __objc_msgSend_449( + obj, + sel, + rootObject, + ); + } + + late final __objc_msgSend_449Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_449 = __objc_msgSend_449Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_archiveRootObject_toFile_1 = + _registerName1("archiveRootObject:toFile:"); + late final _sel_outputFormat1 = _registerName1("outputFormat"); + int _objc_msgSend_450( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_450( + obj, + sel, + ); + } + + late final __objc_msgSend_450Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_450 = __objc_msgSend_450Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setOutputFormat_1 = _registerName1("setOutputFormat:"); + void _objc_msgSend_451( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_451( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_451Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_451 = __objc_msgSend_451Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_encodedData1 = _registerName1("encodedData"); + late final _sel_finishEncoding1 = _registerName1("finishEncoding"); + late final _sel_setClassName_forClass_1 = + _registerName1("setClassName:forClass:"); + void _objc_msgSend_452( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer codedName, + ffi.Pointer cls, + ) { + return __objc_msgSend_452( + obj, + sel, + codedName, + cls, + ); + } + + late final __objc_msgSend_452Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_452 = __objc_msgSend_452Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_classNameForClass_1 = _registerName1("classNameForClass:"); + late final _sel_setRequiresSecureCoding_1 = + _registerName1("setRequiresSecureCoding:"); + void _objc_msgSend_453( + ffi.Pointer obj, + ffi.Pointer sel, + bool value, + ) { + return __objc_msgSend_453( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_453Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_453 = __objc_msgSend_453Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_replacementObjectForKeyedArchiver_1 = + _registerName1("replacementObjectForKeyedArchiver:"); + ffi.Pointer _objc_msgSend_454( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer archiver, + ) { + return __objc_msgSend_454( + obj, + sel, + archiver, + ); + } + + late final __objc_msgSend_454Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_454 = __objc_msgSend_454Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_performSelectorOnMainThread_withObject_waitUntilDone_modes_1 = + _registerName1( + "performSelectorOnMainThread:withObject:waitUntilDone:modes:"); + void _objc_msgSend_455( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer arg, + bool wait, + ffi.Pointer array, + ) { + return __objc_msgSend_455( + obj, + sel, + aSelector, + arg, + wait, + array, + ); + } + + late final __objc_msgSend_455Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_455 = __objc_msgSend_455Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer)>(); + + late final _sel_performSelectorOnMainThread_withObject_waitUntilDone_1 = + _registerName1("performSelectorOnMainThread:withObject:waitUntilDone:"); + void _objc_msgSend_456( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer arg, + bool wait, + ) { + return __objc_msgSend_456( + obj, + sel, + aSelector, + arg, + wait, + ); + } + + late final __objc_msgSend_456Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_456 = __objc_msgSend_456Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _class_NSThread1 = _getClass1("NSThread"); + late final _sel_currentThread1 = _registerName1("currentThread"); + ffi.Pointer _objc_msgSend_457( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_457( + obj, + sel, + ); + } + + late final __objc_msgSend_457Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_457 = __objc_msgSend_457Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_detachNewThreadWithBlock_1 = + _registerName1("detachNewThreadWithBlock:"); + void _objc_msgSend_458( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_458( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_458Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_458 = __objc_msgSend_458Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_detachNewThreadSelector_toTarget_withObject_1 = + _registerName1("detachNewThreadSelector:toTarget:withObject:"); + void _objc_msgSend_459( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer selector, + ffi.Pointer target, + ffi.Pointer argument, + ) { + return __objc_msgSend_459( + obj, + sel, + selector, + target, + argument, + ); + } + + late final __objc_msgSend_459Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_459 = __objc_msgSend_459Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_isMultiThreaded1 = _registerName1("isMultiThreaded"); + late final _class_NSMutableDictionary1 = _getClass1("NSMutableDictionary"); + late final _sel_removeObjectForKey_1 = _registerName1("removeObjectForKey:"); + late final _sel_setObject_forKey_1 = _registerName1("setObject:forKey:"); + void _objc_msgSend_460( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer anObject, + ffi.Pointer aKey, + ) { + return __objc_msgSend_460( + obj, + sel, + anObject, + aKey, + ); + } + + late final __objc_msgSend_460Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_460 = __objc_msgSend_460Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_addEntriesFromDictionary_1 = + _registerName1("addEntriesFromDictionary:"); + late final _sel_removeObjectsForKeys_1 = + _registerName1("removeObjectsForKeys:"); + late final _sel_setDictionary_1 = _registerName1("setDictionary:"); + late final _sel_setObject_forKeyedSubscript_1 = + _registerName1("setObject:forKeyedSubscript:"); + late final _sel_dictionaryWithCapacity_1 = + _registerName1("dictionaryWithCapacity:"); + ffi.Pointer _objc_msgSend_461( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + ) { + return __objc_msgSend_461( + obj, + sel, + path, + ); + } + + late final __objc_msgSend_461Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_461 = __objc_msgSend_461Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + ffi.Pointer _objc_msgSend_462( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_462( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_462Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_462 = __objc_msgSend_462Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dictionaryWithSharedKeySet_1 = + _registerName1("dictionaryWithSharedKeySet:"); + ffi.Pointer _objc_msgSend_463( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer keyset, + ) { + return __objc_msgSend_463( + obj, + sel, + keyset, + ); + } + + late final __objc_msgSend_463Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_463 = __objc_msgSend_463Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_threadDictionary1 = _registerName1("threadDictionary"); + ffi.Pointer _objc_msgSend_464( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_464( + obj, + sel, + ); + } + + late final __objc_msgSend_464Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_464 = __objc_msgSend_464Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_sleepUntilDate_1 = _registerName1("sleepUntilDate:"); + void _objc_msgSend_465( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + ) { + return __objc_msgSend_465( + obj, + sel, + date, + ); + } + + late final __objc_msgSend_465Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_465 = __objc_msgSend_465Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_sleepForTimeInterval_1 = + _registerName1("sleepForTimeInterval:"); + void _objc_msgSend_466( + ffi.Pointer obj, + ffi.Pointer sel, + double ti, + ) { + return __objc_msgSend_466( + obj, + sel, + ti, + ); + } + + late final __objc_msgSend_466Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_466 = __objc_msgSend_466Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_exit1 = _registerName1("exit"); + late final _sel_threadPriority1 = _registerName1("threadPriority"); + late final _sel_setThreadPriority_1 = _registerName1("setThreadPriority:"); + void _objc_msgSend_467( + ffi.Pointer obj, + ffi.Pointer sel, + double value, + ) { + return __objc_msgSend_467( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_467Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_467 = __objc_msgSend_467Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_qualityOfService1 = _registerName1("qualityOfService"); + int _objc_msgSend_468( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_468( + obj, + sel, + ); + } + + late final __objc_msgSend_468Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_468 = __objc_msgSend_468Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setQualityOfService_1 = + _registerName1("setQualityOfService:"); + void _objc_msgSend_469( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_469( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_469Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_469 = __objc_msgSend_469Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_callStackReturnAddresses1 = + _registerName1("callStackReturnAddresses"); + late final _sel_callStackSymbols1 = _registerName1("callStackSymbols"); + late final _sel_name1 = _registerName1("name"); + late final _sel_setName_1 = _registerName1("setName:"); + void _objc_msgSend_470( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_470( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_470Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_470 = __objc_msgSend_470Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_stackSize1 = _registerName1("stackSize"); + late final _sel_setStackSize_1 = _registerName1("setStackSize:"); + late final _sel_isMainThread1 = _registerName1("isMainThread"); + late final _sel_mainThread1 = _registerName1("mainThread"); + late final _sel_initWithTarget_selector_object_1 = + _registerName1("initWithTarget:selector:object:"); + instancetype _objc_msgSend_471( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer target, + ffi.Pointer selector, + ffi.Pointer argument, + ) { + return __objc_msgSend_471( + obj, + sel, + target, + selector, + argument, + ); + } + + late final __objc_msgSend_471Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_471 = __objc_msgSend_471Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithBlock_1 = _registerName1("initWithBlock:"); + instancetype _objc_msgSend_472( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_472( + obj, + sel, + block, + ); + } + + late final __objc_msgSend_472Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_472 = __objc_msgSend_472Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_isExecuting1 = _registerName1("isExecuting"); + late final _sel_isFinished1 = _registerName1("isFinished"); + late final _sel_isCancelled1 = _registerName1("isCancelled"); + late final _sel_cancel1 = _registerName1("cancel"); + late final _sel_start1 = _registerName1("start"); + late final _sel_main1 = _registerName1("main"); + late final _sel_performSelector_onThread_withObject_waitUntilDone_modes_1 = + _registerName1( + "performSelector:onThread:withObject:waitUntilDone:modes:"); + void _objc_msgSend_473( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer thr, + ffi.Pointer arg, + bool wait, + ffi.Pointer array, + ) { + return __objc_msgSend_473( + obj, + sel, + aSelector, + thr, + arg, + wait, + array, + ); + } + + late final __objc_msgSend_473Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_473 = __objc_msgSend_473Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool, + ffi.Pointer)>(); + + late final _sel_performSelector_onThread_withObject_waitUntilDone_1 = + _registerName1("performSelector:onThread:withObject:waitUntilDone:"); + void _objc_msgSend_474( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer thr, + ffi.Pointer arg, + bool wait, + ) { + return __objc_msgSend_474( + obj, + sel, + aSelector, + thr, + arg, + wait, + ); + } + + late final __objc_msgSend_474Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_474 = __objc_msgSend_474Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool)>(); + + late final _sel_performSelectorInBackground_withObject_1 = + _registerName1("performSelectorInBackground:withObject:"); + late final _class_NSItemProvider1 = _getClass1("NSItemProvider"); + late final _class_NSProgress1 = _getClass1("NSProgress"); + late final _sel_currentProgress1 = _registerName1("currentProgress"); + ffi.Pointer _objc_msgSend_475( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_475( + obj, + sel, + ); + } + + late final __objc_msgSend_475Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_475 = __objc_msgSend_475Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_progressWithTotalUnitCount_1 = + _registerName1("progressWithTotalUnitCount:"); + ffi.Pointer _objc_msgSend_476( + ffi.Pointer obj, + ffi.Pointer sel, + int unitCount, + ) { + return __objc_msgSend_476( + obj, + sel, + unitCount, + ); + } + + late final __objc_msgSend_476Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int64)>>('objc_msgSend'); + late final __objc_msgSend_476 = __objc_msgSend_476Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_discreteProgressWithTotalUnitCount_1 = + _registerName1("discreteProgressWithTotalUnitCount:"); + late final _sel_progressWithTotalUnitCount_parent_pendingUnitCount_1 = + _registerName1("progressWithTotalUnitCount:parent:pendingUnitCount:"); + ffi.Pointer _objc_msgSend_477( + ffi.Pointer obj, + ffi.Pointer sel, + int unitCount, + ffi.Pointer parent, + int portionOfParentTotalUnitCount, + ) { + return __objc_msgSend_477( + obj, + sel, + unitCount, + parent, + portionOfParentTotalUnitCount, + ); + } + + late final __objc_msgSend_477Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int64, + ffi.Pointer, + ffi.Int64)>>('objc_msgSend'); + late final __objc_msgSend_477 = __objc_msgSend_477Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer, int)>(); + + late final _sel_initWithParent_userInfo_1 = + _registerName1("initWithParent:userInfo:"); + instancetype _objc_msgSend_478( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer parentProgressOrNil, + ffi.Pointer userInfoOrNil, + ) { + return __objc_msgSend_478( + obj, + sel, + parentProgressOrNil, + userInfoOrNil, + ); + } + + late final __objc_msgSend_478Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_478 = __objc_msgSend_478Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_becomeCurrentWithPendingUnitCount_1 = + _registerName1("becomeCurrentWithPendingUnitCount:"); + void _objc_msgSend_479( + ffi.Pointer obj, + ffi.Pointer sel, + int unitCount, + ) { + return __objc_msgSend_479( + obj, + sel, + unitCount, + ); + } + + late final __objc_msgSend_479Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int64)>>('objc_msgSend'); + late final __objc_msgSend_479 = __objc_msgSend_479Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_performAsCurrentWithPendingUnitCount_usingBlock_1 = + _registerName1("performAsCurrentWithPendingUnitCount:usingBlock:"); + void _objc_msgSend_480( + ffi.Pointer obj, + ffi.Pointer sel, + int unitCount, + ffi.Pointer<_ObjCBlock> work, + ) { + return __objc_msgSend_480( + obj, + sel, + unitCount, + work, + ); + } + + late final __objc_msgSend_480Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int64, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_480 = __objc_msgSend_480Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_resignCurrent1 = _registerName1("resignCurrent"); + late final _sel_addChild_withPendingUnitCount_1 = + _registerName1("addChild:withPendingUnitCount:"); + void _objc_msgSend_481( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer child, + int inUnitCount, + ) { + return __objc_msgSend_481( + obj, + sel, + child, + inUnitCount, + ); + } + + late final __objc_msgSend_481Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int64)>>('objc_msgSend'); + late final __objc_msgSend_481 = __objc_msgSend_481Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_totalUnitCount1 = _registerName1("totalUnitCount"); + int _objc_msgSend_482( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_482( + obj, + sel, + ); + } + + late final __objc_msgSend_482Ptr = _lookup< + ffi.NativeFunction< + ffi.Int64 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_482 = __objc_msgSend_482Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setTotalUnitCount_1 = _registerName1("setTotalUnitCount:"); + void _objc_msgSend_483( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_483( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_483Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int64)>>('objc_msgSend'); + late final __objc_msgSend_483 = __objc_msgSend_483Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_completedUnitCount1 = _registerName1("completedUnitCount"); + late final _sel_setCompletedUnitCount_1 = + _registerName1("setCompletedUnitCount:"); + late final _sel_setLocalizedDescription_1 = + _registerName1("setLocalizedDescription:"); + late final _sel_localizedAdditionalDescription1 = + _registerName1("localizedAdditionalDescription"); + late final _sel_setLocalizedAdditionalDescription_1 = + _registerName1("setLocalizedAdditionalDescription:"); + late final _sel_isCancellable1 = _registerName1("isCancellable"); + late final _sel_setCancellable_1 = _registerName1("setCancellable:"); + late final _sel_isPausable1 = _registerName1("isPausable"); + late final _sel_setPausable_1 = _registerName1("setPausable:"); + late final _sel_isPaused1 = _registerName1("isPaused"); + late final _sel_cancellationHandler1 = _registerName1("cancellationHandler"); + ffi.Pointer<_ObjCBlock> _objc_msgSend_484( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_484( + obj, + sel, + ); + } + + late final __objc_msgSend_484Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_484 = __objc_msgSend_484Ptr.asFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setCancellationHandler_1 = + _registerName1("setCancellationHandler:"); + void _objc_msgSend_485( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> value, + ) { + return __objc_msgSend_485( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_485Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_485 = __objc_msgSend_485Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_pausingHandler1 = _registerName1("pausingHandler"); + late final _sel_setPausingHandler_1 = _registerName1("setPausingHandler:"); + late final _sel_resumingHandler1 = _registerName1("resumingHandler"); + late final _sel_setResumingHandler_1 = _registerName1("setResumingHandler:"); + late final _sel_setUserInfoObject_forKey_1 = + _registerName1("setUserInfoObject:forKey:"); + late final _sel_isIndeterminate1 = _registerName1("isIndeterminate"); + late final _sel_fractionCompleted1 = _registerName1("fractionCompleted"); + late final _sel_pause1 = _registerName1("pause"); + late final _sel_resume1 = _registerName1("resume"); + late final _sel_kind1 = _registerName1("kind"); + late final _sel_setKind_1 = _registerName1("setKind:"); + late final _sel_estimatedTimeRemaining1 = + _registerName1("estimatedTimeRemaining"); + late final _sel_setEstimatedTimeRemaining_1 = + _registerName1("setEstimatedTimeRemaining:"); + void _objc_msgSend_486( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_486( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_486Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_486 = __objc_msgSend_486Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_throughput1 = _registerName1("throughput"); + late final _sel_setThroughput_1 = _registerName1("setThroughput:"); + late final _sel_fileOperationKind1 = _registerName1("fileOperationKind"); + late final _sel_setFileOperationKind_1 = + _registerName1("setFileOperationKind:"); + late final _sel_fileURL1 = _registerName1("fileURL"); + late final _sel_setFileURL_1 = _registerName1("setFileURL:"); + void _objc_msgSend_487( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_487( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_487Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_487 = __objc_msgSend_487Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_fileTotalCount1 = _registerName1("fileTotalCount"); + late final _sel_setFileTotalCount_1 = _registerName1("setFileTotalCount:"); + late final _sel_fileCompletedCount1 = _registerName1("fileCompletedCount"); + late final _sel_setFileCompletedCount_1 = + _registerName1("setFileCompletedCount:"); + late final _sel_publish1 = _registerName1("publish"); + late final _sel_unpublish1 = _registerName1("unpublish"); + late final _sel_addSubscriberForFileURL_withPublishingHandler_1 = + _registerName1("addSubscriberForFileURL:withPublishingHandler:"); + ffi.Pointer _objc_msgSend_488( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer<_ObjCBlock> publishingHandler, + ) { + return __objc_msgSend_488( + obj, + sel, + url, + publishingHandler, + ); + } + + late final __objc_msgSend_488Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_488 = __objc_msgSend_488Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_removeSubscriber_1 = _registerName1("removeSubscriber:"); + late final _sel_isOld1 = _registerName1("isOld"); + late final _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler_1 = + _registerName1( + "registerDataRepresentationForTypeIdentifier:visibility:loadHandler:"); + void _objc_msgSend_489( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + int visibility, + ffi.Pointer<_ObjCBlock> loadHandler, + ) { + return __objc_msgSend_489( + obj, + sel, + typeIdentifier, + visibility, + loadHandler, + ); + } + + late final __objc_msgSend_489Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_489 = __objc_msgSend_489Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_1 = + _registerName1( + "registerFileRepresentationForTypeIdentifier:fileOptions:visibility:loadHandler:"); + void _objc_msgSend_490( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + int fileOptions, + int visibility, + ffi.Pointer<_ObjCBlock> loadHandler, + ) { + return __objc_msgSend_490( + obj, + sel, + typeIdentifier, + fileOptions, + visibility, + loadHandler, + ); + } + + late final __objc_msgSend_490Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_490 = __objc_msgSend_490Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_registeredTypeIdentifiers1 = + _registerName1("registeredTypeIdentifiers"); + late final _sel_registeredTypeIdentifiersWithFileOptions_1 = + _registerName1("registeredTypeIdentifiersWithFileOptions:"); + ffi.Pointer _objc_msgSend_491( + ffi.Pointer obj, + ffi.Pointer sel, + int fileOptions, + ) { + return __objc_msgSend_491( + obj, + sel, + fileOptions, + ); + } + + late final __objc_msgSend_491Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_491 = __objc_msgSend_491Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_hasItemConformingToTypeIdentifier_1 = + _registerName1("hasItemConformingToTypeIdentifier:"); + late final _sel_hasRepresentationConformingToTypeIdentifier_fileOptions_1 = + _registerName1( + "hasRepresentationConformingToTypeIdentifier:fileOptions:"); + bool _objc_msgSend_492( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + int fileOptions, + ) { + return __objc_msgSend_492( + obj, + sel, + typeIdentifier, + fileOptions, + ); + } + + late final __objc_msgSend_492Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_492 = __objc_msgSend_492Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_loadDataRepresentationForTypeIdentifier_completionHandler_1 = + _registerName1( + "loadDataRepresentationForTypeIdentifier:completionHandler:"); + ffi.Pointer _objc_msgSend_493( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_493( + obj, + sel, + typeIdentifier, + completionHandler, + ); + } + + late final __objc_msgSend_493Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_493 = __objc_msgSend_493Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_loadFileRepresentationForTypeIdentifier_completionHandler_1 = + _registerName1( + "loadFileRepresentationForTypeIdentifier:completionHandler:"); + ffi.Pointer _objc_msgSend_494( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_494( + obj, + sel, + typeIdentifier, + completionHandler, + ); + } + + late final __objc_msgSend_494Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_494 = __objc_msgSend_494Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_1 = + _registerName1( + "loadInPlaceFileRepresentationForTypeIdentifier:completionHandler:"); + ffi.Pointer _objc_msgSend_495( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_495( + obj, + sel, + typeIdentifier, + completionHandler, + ); + } + + late final __objc_msgSend_495Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_495 = __objc_msgSend_495Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_suggestedName1 = _registerName1("suggestedName"); + late final _sel_setSuggestedName_1 = _registerName1("setSuggestedName:"); + late final _sel_registerObject_visibility_1 = + _registerName1("registerObject:visibility:"); + void _objc_msgSend_496( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer object, + int visibility, + ) { + return __objc_msgSend_496( + obj, + sel, + object, + visibility, + ); + } + + late final __objc_msgSend_496Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_496 = __objc_msgSend_496Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_registerObjectOfClass_visibility_loadHandler_1 = + _registerName1("registerObjectOfClass:visibility:loadHandler:"); + void _objc_msgSend_497( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aClass, + int visibility, + ffi.Pointer<_ObjCBlock> loadHandler, + ) { + return __objc_msgSend_497( + obj, + sel, + aClass, + visibility, + loadHandler, + ); + } + + late final __objc_msgSend_497Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_497 = __objc_msgSend_497Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_canLoadObjectOfClass_1 = + _registerName1("canLoadObjectOfClass:"); + late final _sel_loadObjectOfClass_completionHandler_1 = + _registerName1("loadObjectOfClass:completionHandler:"); + ffi.Pointer _objc_msgSend_498( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aClass, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_498( + obj, + sel, + aClass, + completionHandler, + ); + } + + late final __objc_msgSend_498Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_498 = __objc_msgSend_498Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_initWithItem_typeIdentifier_1 = + _registerName1("initWithItem:typeIdentifier:"); + late final _sel_registerItemForTypeIdentifier_loadHandler_1 = + _registerName1("registerItemForTypeIdentifier:loadHandler:"); + void _objc_msgSend_499( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + ffi.Pointer<_ObjCBlock> loadHandler, + ) { + return __objc_msgSend_499( + obj, + sel, + typeIdentifier, + loadHandler, + ); + } + + late final __objc_msgSend_499Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_499 = __objc_msgSend_499Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_loadItemForTypeIdentifier_options_completionHandler_1 = + _registerName1("loadItemForTypeIdentifier:options:completionHandler:"); + void _objc_msgSend_500( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer typeIdentifier, + ffi.Pointer options, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_500( + obj, + sel, + typeIdentifier, + options, + completionHandler, + ); + } + + late final __objc_msgSend_500Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_500 = __objc_msgSend_500Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_previewImageHandler1 = _registerName1("previewImageHandler"); + ffi.Pointer<_ObjCBlock> _objc_msgSend_501( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_501( + obj, + sel, + ); + } + + late final __objc_msgSend_501Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_501 = __objc_msgSend_501Ptr.asFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setPreviewImageHandler_1 = + _registerName1("setPreviewImageHandler:"); + void _objc_msgSend_502( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> value, + ) { + return __objc_msgSend_502( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_502Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_502 = __objc_msgSend_502Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_loadPreviewImageWithOptions_completionHandler_1 = + _registerName1("loadPreviewImageWithOptions:completionHandler:"); + void _objc_msgSend_503( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer options, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_503( + obj, + sel, + options, + completionHandler, + ); + } + + late final __objc_msgSend_503Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_503 = __objc_msgSend_503Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _class_NSMutableString1 = _getClass1("NSMutableString"); + late final _sel_replaceCharactersInRange_withString_1 = + _registerName1("replaceCharactersInRange:withString:"); + void _objc_msgSend_504( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer aString, + ) { + return __objc_msgSend_504( + obj, + sel, + range, + aString, + ); + } + + late final __objc_msgSend_504Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_504 = __objc_msgSend_504Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer)>(); + + late final _sel_insertString_atIndex_1 = + _registerName1("insertString:atIndex:"); + void _objc_msgSend_505( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aString, + int loc, + ) { + return __objc_msgSend_505( + obj, + sel, + aString, + loc, + ); + } + + late final __objc_msgSend_505Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_505 = __objc_msgSend_505Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_deleteCharactersInRange_1 = + _registerName1("deleteCharactersInRange:"); + late final _sel_appendString_1 = _registerName1("appendString:"); + late final _sel_appendFormat_1 = _registerName1("appendFormat:"); + late final _sel_setString_1 = _registerName1("setString:"); + late final _sel_replaceOccurrencesOfString_withString_options_range_1 = + _registerName1("replaceOccurrencesOfString:withString:options:range:"); + int _objc_msgSend_506( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer target, + ffi.Pointer replacement, + int options, + _NSRange searchRange, + ) { + return __objc_msgSend_506( + obj, + sel, + target, + replacement, + options, + searchRange, + ); + } + + late final __objc_msgSend_506Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_506 = __objc_msgSend_506Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, _NSRange)>(); + + late final _sel_applyTransform_reverse_range_updatedRange_1 = + _registerName1("applyTransform:reverse:range:updatedRange:"); + bool _objc_msgSend_507( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer transform, + bool reverse, + _NSRange range, + ffi.Pointer<_NSRange> resultingRange, + ) { + return __objc_msgSend_507( + obj, + sel, + transform, + reverse, + range, + resultingRange, + ); + } + + late final __objc_msgSend_507Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool, + _NSRange, + ffi.Pointer<_NSRange>)>>('objc_msgSend'); + late final __objc_msgSend_507 = __objc_msgSend_507Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool, _NSRange, ffi.Pointer<_NSRange>)>(); + + ffi.Pointer _objc_msgSend_508( + ffi.Pointer obj, + ffi.Pointer sel, + int capacity, + ) { + return __objc_msgSend_508( + obj, + sel, + capacity, + ); + } + + late final __objc_msgSend_508Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_508 = __objc_msgSend_508Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_stringWithCapacity_1 = _registerName1("stringWithCapacity:"); + late final _class_NSNotification1 = _getClass1("NSNotification"); + late final _sel_object1 = _registerName1("object"); + late final _sel_initWithName_object_userInfo_1 = + _registerName1("initWithName:object:userInfo:"); + instancetype _objc_msgSend_509( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer object, + ffi.Pointer userInfo, + ) { + return __objc_msgSend_509( + obj, + sel, + name, + object, + userInfo, + ); + } + + late final __objc_msgSend_509Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_509 = __objc_msgSend_509Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_notificationWithName_object_1 = + _registerName1("notificationWithName:object:"); + late final _sel_notificationWithName_object_userInfo_1 = + _registerName1("notificationWithName:object:userInfo:"); + late final _class_NSBundle1 = _getClass1("NSBundle"); + late final _sel_mainBundle1 = _registerName1("mainBundle"); + ffi.Pointer _objc_msgSend_510( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_510( + obj, + sel, + ); + } + + late final __objc_msgSend_510Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_510 = __objc_msgSend_510Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_bundleWithPath_1 = _registerName1("bundleWithPath:"); + late final _sel_initWithPath_1 = _registerName1("initWithPath:"); + late final _sel_bundleWithURL_1 = _registerName1("bundleWithURL:"); + late final _sel_initWithURL_1 = _registerName1("initWithURL:"); + late final _sel_bundleForClass_1 = _registerName1("bundleForClass:"); + ffi.Pointer _objc_msgSend_511( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aClass, + ) { + return __objc_msgSend_511( + obj, + sel, + aClass, + ); + } + + late final __objc_msgSend_511Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_511 = __objc_msgSend_511Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_bundleWithIdentifier_1 = + _registerName1("bundleWithIdentifier:"); + ffi.Pointer _objc_msgSend_512( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer identifier, + ) { + return __objc_msgSend_512( + obj, + sel, + identifier, + ); + } + + late final __objc_msgSend_512Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_512 = __objc_msgSend_512Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_allBundles1 = _registerName1("allBundles"); + late final _sel_allFrameworks1 = _registerName1("allFrameworks"); + late final _sel_isLoaded1 = _registerName1("isLoaded"); + late final _sel_unload1 = _registerName1("unload"); + late final _sel_preflightAndReturnError_1 = + _registerName1("preflightAndReturnError:"); + late final _sel_loadAndReturnError_1 = _registerName1("loadAndReturnError:"); + late final _sel_bundleURL1 = _registerName1("bundleURL"); + late final _sel_resourceURL1 = _registerName1("resourceURL"); + late final _sel_executableURL1 = _registerName1("executableURL"); + late final _sel_URLForAuxiliaryExecutable_1 = + _registerName1("URLForAuxiliaryExecutable:"); + late final _sel_privateFrameworksURL1 = + _registerName1("privateFrameworksURL"); + late final _sel_sharedFrameworksURL1 = _registerName1("sharedFrameworksURL"); + late final _sel_sharedSupportURL1 = _registerName1("sharedSupportURL"); + late final _sel_builtInPlugInsURL1 = _registerName1("builtInPlugInsURL"); + late final _sel_appStoreReceiptURL1 = _registerName1("appStoreReceiptURL"); + late final _sel_bundlePath1 = _registerName1("bundlePath"); + late final _sel_resourcePath1 = _registerName1("resourcePath"); + late final _sel_executablePath1 = _registerName1("executablePath"); + late final _sel_pathForAuxiliaryExecutable_1 = + _registerName1("pathForAuxiliaryExecutable:"); + late final _sel_privateFrameworksPath1 = + _registerName1("privateFrameworksPath"); + late final _sel_sharedFrameworksPath1 = + _registerName1("sharedFrameworksPath"); + late final _sel_sharedSupportPath1 = _registerName1("sharedSupportPath"); + late final _sel_builtInPlugInsPath1 = _registerName1("builtInPlugInsPath"); + late final _sel_URLForResource_withExtension_subdirectory_inBundleWithURL_1 = + _registerName1( + "URLForResource:withExtension:subdirectory:inBundleWithURL:"); + ffi.Pointer _objc_msgSend_513( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer ext, + ffi.Pointer subpath, + ffi.Pointer bundleURL, + ) { + return __objc_msgSend_513( + obj, + sel, + name, + ext, + subpath, + bundleURL, + ); + } + + late final __objc_msgSend_513Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_513 = __objc_msgSend_513Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLsForResourcesWithExtension_subdirectory_inBundleWithURL_1 = + _registerName1( + "URLsForResourcesWithExtension:subdirectory:inBundleWithURL:"); + ffi.Pointer _objc_msgSend_514( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer ext, + ffi.Pointer subpath, + ffi.Pointer bundleURL, + ) { + return __objc_msgSend_514( + obj, + sel, + ext, + subpath, + bundleURL, + ); + } + + late final __objc_msgSend_514Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_514 = __objc_msgSend_514Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLForResource_withExtension_1 = + _registerName1("URLForResource:withExtension:"); + ffi.Pointer _objc_msgSend_515( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer ext, + ) { + return __objc_msgSend_515( + obj, + sel, + name, + ext, + ); + } + + late final __objc_msgSend_515Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_515 = __objc_msgSend_515Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLForResource_withExtension_subdirectory_1 = + _registerName1("URLForResource:withExtension:subdirectory:"); + ffi.Pointer _objc_msgSend_516( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer ext, + ffi.Pointer subpath, + ) { + return __objc_msgSend_516( + obj, + sel, + name, + ext, + subpath, + ); + } + + late final __objc_msgSend_516Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_516 = __objc_msgSend_516Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLForResource_withExtension_subdirectory_localization_1 = + _registerName1("URLForResource:withExtension:subdirectory:localization:"); + ffi.Pointer _objc_msgSend_517( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer ext, + ffi.Pointer subpath, + ffi.Pointer localizationName, + ) { + return __objc_msgSend_517( + obj, + sel, + name, + ext, + subpath, + localizationName, + ); + } + + late final __objc_msgSend_517Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_517 = __objc_msgSend_517Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLsForResourcesWithExtension_subdirectory_1 = + _registerName1("URLsForResourcesWithExtension:subdirectory:"); + ffi.Pointer _objc_msgSend_518( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer ext, + ffi.Pointer subpath, + ) { + return __objc_msgSend_518( + obj, + sel, + ext, + subpath, + ); + } + + late final __objc_msgSend_518Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_518 = __objc_msgSend_518Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLsForResourcesWithExtension_subdirectory_localization_1 = + _registerName1( + "URLsForResourcesWithExtension:subdirectory:localization:"); + ffi.Pointer _objc_msgSend_519( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer ext, + ffi.Pointer subpath, + ffi.Pointer localizationName, + ) { + return __objc_msgSend_519( + obj, + sel, + ext, + subpath, + localizationName, + ); + } + + late final __objc_msgSend_519Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_519 = __objc_msgSend_519Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_pathForResource_ofType_inDirectory_1 = + _registerName1("pathForResource:ofType:inDirectory:"); + ffi.Pointer _objc_msgSend_520( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer ext, + ffi.Pointer bundlePath, + ) { + return __objc_msgSend_520( + obj, + sel, + name, + ext, + bundlePath, + ); + } + + late final __objc_msgSend_520Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_520 = __objc_msgSend_520Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_pathsForResourcesOfType_inDirectory_1 = + _registerName1("pathsForResourcesOfType:inDirectory:"); + late final _sel_pathForResource_ofType_1 = + _registerName1("pathForResource:ofType:"); + late final _sel_pathForResource_ofType_inDirectory_forLocalization_1 = + _registerName1("pathForResource:ofType:inDirectory:forLocalization:"); + ffi.Pointer _objc_msgSend_521( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer ext, + ffi.Pointer subpath, + ffi.Pointer localizationName, + ) { + return __objc_msgSend_521( + obj, + sel, + name, + ext, + subpath, + localizationName, + ); + } + + late final __objc_msgSend_521Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_521 = __objc_msgSend_521Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_pathsForResourcesOfType_inDirectory_forLocalization_1 = + _registerName1("pathsForResourcesOfType:inDirectory:forLocalization:"); + late final _sel_localizedStringForKey_value_table_1 = + _registerName1("localizedStringForKey:value:table:"); + late final _class_NSAttributedString1 = _getClass1("NSAttributedString"); + late final _sel_attributesAtIndex_effectiveRange_1 = + _registerName1("attributesAtIndex:effectiveRange:"); + ffi.Pointer _objc_msgSend_522( + ffi.Pointer obj, + ffi.Pointer sel, + int location, + ffi.Pointer<_NSRange> range, + ) { + return __objc_msgSend_522( + obj, + sel, + location, + range, + ); + } + + late final __objc_msgSend_522Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_NSRange>)>>('objc_msgSend'); + late final __objc_msgSend_522 = __objc_msgSend_522Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_NSRange>)>(); + + late final _sel_attribute_atIndex_effectiveRange_1 = + _registerName1("attribute:atIndex:effectiveRange:"); + ffi.Pointer _objc_msgSend_523( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrName, + int location, + ffi.Pointer<_NSRange> range, + ) { + return __objc_msgSend_523( + obj, + sel, + attrName, + location, + range, + ); + } + + late final __objc_msgSend_523Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_NSRange>)>>('objc_msgSend'); + late final __objc_msgSend_523 = __objc_msgSend_523Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_NSRange>)>(); + + late final _sel_attributedSubstringFromRange_1 = + _registerName1("attributedSubstringFromRange:"); + ffi.Pointer _objc_msgSend_524( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_524( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_524Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_524 = __objc_msgSend_524Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_attributesAtIndex_longestEffectiveRange_inRange_1 = + _registerName1("attributesAtIndex:longestEffectiveRange:inRange:"); + ffi.Pointer _objc_msgSend_525( + ffi.Pointer obj, + ffi.Pointer sel, + int location, + ffi.Pointer<_NSRange> range, + _NSRange rangeLimit, + ) { + return __objc_msgSend_525( + obj, + sel, + location, + range, + rangeLimit, + ); + } + + late final __objc_msgSend_525Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_NSRange>, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_525 = __objc_msgSend_525Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer<_NSRange>, _NSRange)>(); + + late final _sel_attribute_atIndex_longestEffectiveRange_inRange_1 = + _registerName1("attribute:atIndex:longestEffectiveRange:inRange:"); + ffi.Pointer _objc_msgSend_526( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrName, + int location, + ffi.Pointer<_NSRange> range, + _NSRange rangeLimit, + ) { + return __objc_msgSend_526( + obj, + sel, + attrName, + location, + range, + rangeLimit, + ); + } + + late final __objc_msgSend_526Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer<_NSRange>, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_526 = __objc_msgSend_526Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_NSRange>, + _NSRange)>(); + + late final _sel_isEqualToAttributedString_1 = + _registerName1("isEqualToAttributedString:"); + bool _objc_msgSend_527( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer other, + ) { + return __objc_msgSend_527( + obj, + sel, + other, + ); + } + + late final __objc_msgSend_527Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_527 = __objc_msgSend_527Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithString_attributes_1 = + _registerName1("initWithString:attributes:"); + late final _sel_initWithAttributedString_1 = + _registerName1("initWithAttributedString:"); + instancetype _objc_msgSend_528( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrStr, + ) { + return __objc_msgSend_528( + obj, + sel, + attrStr, + ); + } + + late final __objc_msgSend_528Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_528 = __objc_msgSend_528Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_enumerateAttributesInRange_options_usingBlock_1 = + _registerName1("enumerateAttributesInRange:options:usingBlock:"); + void _objc_msgSend_529( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange enumerationRange, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_529( + obj, + sel, + enumerationRange, + opts, + block, + ); + } + + late final __objc_msgSend_529Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Int32, ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_529 = __objc_msgSend_529Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + int, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_enumerateAttribute_inRange_options_usingBlock_1 = + _registerName1("enumerateAttribute:inRange:options:usingBlock:"); + void _objc_msgSend_530( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrName, + _NSRange enumerationRange, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_530( + obj, + sel, + attrName, + enumerationRange, + opts, + block, + ); + } + + late final __objc_msgSend_530Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_530 = __objc_msgSend_530Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange, int, ffi.Pointer<_ObjCBlock>)>(); + + late final _class_NSAttributedStringMarkdownParsingOptions1 = + _getClass1("NSAttributedStringMarkdownParsingOptions"); + late final _sel_allowsExtendedAttributes1 = + _registerName1("allowsExtendedAttributes"); + late final _sel_setAllowsExtendedAttributes_1 = + _registerName1("setAllowsExtendedAttributes:"); + late final _sel_interpretedSyntax1 = _registerName1("interpretedSyntax"); + int _objc_msgSend_531( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_531( + obj, + sel, + ); + } + + late final __objc_msgSend_531Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_531 = __objc_msgSend_531Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setInterpretedSyntax_1 = + _registerName1("setInterpretedSyntax:"); + void _objc_msgSend_532( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_532( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_532Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_532 = __objc_msgSend_532Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_failurePolicy1 = _registerName1("failurePolicy"); + int _objc_msgSend_533( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_533( + obj, + sel, + ); + } + + late final __objc_msgSend_533Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_533 = __objc_msgSend_533Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setFailurePolicy_1 = _registerName1("setFailurePolicy:"); + void _objc_msgSend_534( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_534( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_534Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_534 = __objc_msgSend_534Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_setLanguageCode_1 = _registerName1("setLanguageCode:"); + late final _sel_appliesSourcePositionAttributes1 = + _registerName1("appliesSourcePositionAttributes"); + late final _sel_setAppliesSourcePositionAttributes_1 = + _registerName1("setAppliesSourcePositionAttributes:"); + late final _sel_initWithContentsOfMarkdownFileAtURL_options_baseURL_error_1 = + _registerName1( + "initWithContentsOfMarkdownFileAtURL:options:baseURL:error:"); + instancetype _objc_msgSend_535( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer markdownFile, + ffi.Pointer options, + ffi.Pointer baseURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_535( + obj, + sel, + markdownFile, + options, + baseURL, + error, + ); + } + + late final __objc_msgSend_535Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_535 = __objc_msgSend_535Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithMarkdown_options_baseURL_error_1 = + _registerName1("initWithMarkdown:options:baseURL:error:"); + instancetype _objc_msgSend_536( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer markdown, + ffi.Pointer options, + ffi.Pointer baseURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_536( + obj, + sel, + markdown, + options, + baseURL, + error, + ); + } + + late final __objc_msgSend_536Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_536 = __objc_msgSend_536Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithMarkdownString_options_baseURL_error_1 = + _registerName1("initWithMarkdownString:options:baseURL:error:"); + instancetype _objc_msgSend_537( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer markdownString, + ffi.Pointer options, + ffi.Pointer baseURL, + ffi.Pointer> error, + ) { + return __objc_msgSend_537( + obj, + sel, + markdownString, + options, + baseURL, + error, + ); + } + + late final __objc_msgSend_537Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_537 = __objc_msgSend_537Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_initWithFormat_options_locale_1 = + _registerName1("initWithFormat:options:locale:"); + instancetype _objc_msgSend_538( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + int options, + ffi.Pointer locale, + ) { + return __objc_msgSend_538( + obj, + sel, + format, + options, + locale, + ); + } + + late final __objc_msgSend_538Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_538 = __objc_msgSend_538Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_initWithFormat_options_locale_arguments_1 = + _registerName1("initWithFormat:options:locale:arguments:"); + instancetype _objc_msgSend_539( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + int options, + ffi.Pointer locale, + ffi.Pointer arguments, + ) { + return __objc_msgSend_539( + obj, + sel, + format, + options, + locale, + arguments, + ); + } + + late final __objc_msgSend_539Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_539 = __objc_msgSend_539Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_localizedAttributedStringWithFormat_1 = + _registerName1("localizedAttributedStringWithFormat:"); + late final _sel_localizedAttributedStringWithFormat_options_1 = + _registerName1("localizedAttributedStringWithFormat:options:"); + instancetype _objc_msgSend_540( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer format, + int options, + ) { + return __objc_msgSend_540( + obj, + sel, + format, + options, + ); + } + + late final __objc_msgSend_540Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_540 = __objc_msgSend_540Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_attributedStringByInflectingString1 = + _registerName1("attributedStringByInflectingString"); + ffi.Pointer _objc_msgSend_541( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_541( + obj, + sel, + ); + } + + late final __objc_msgSend_541Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_541 = __objc_msgSend_541Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_localizedAttributedStringForKey_value_table_1 = + _registerName1("localizedAttributedStringForKey:value:table:"); + ffi.Pointer _objc_msgSend_542( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ffi.Pointer value, + ffi.Pointer tableName, + ) { + return __objc_msgSend_542( + obj, + sel, + key, + value, + tableName, + ); + } + + late final __objc_msgSend_542Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_542 = __objc_msgSend_542Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_bundleIdentifier1 = _registerName1("bundleIdentifier"); + late final _sel_infoDictionary1 = _registerName1("infoDictionary"); + late final _sel_localizedInfoDictionary1 = + _registerName1("localizedInfoDictionary"); + late final _sel_objectForInfoDictionaryKey_1 = + _registerName1("objectForInfoDictionaryKey:"); + late final _sel_classNamed_1 = _registerName1("classNamed:"); + late final _sel_principalClass1 = _registerName1("principalClass"); + late final _sel_preferredLocalizations1 = + _registerName1("preferredLocalizations"); + late final _sel_localizations1 = _registerName1("localizations"); + late final _sel_developmentLocalization1 = + _registerName1("developmentLocalization"); + late final _sel_preferredLocalizationsFromArray_1 = + _registerName1("preferredLocalizationsFromArray:"); + late final _sel_preferredLocalizationsFromArray_forPreferences_1 = + _registerName1("preferredLocalizationsFromArray:forPreferences:"); + ffi.Pointer _objc_msgSend_543( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer localizationsArray, + ffi.Pointer preferencesArray, + ) { + return __objc_msgSend_543( + obj, + sel, + localizationsArray, + preferencesArray, + ); + } + + late final __objc_msgSend_543Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_543 = __objc_msgSend_543Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_executableArchitectures1 = + _registerName1("executableArchitectures"); + late final _sel_setPreservationPriority_forTags_1 = + _registerName1("setPreservationPriority:forTags:"); + void _objc_msgSend_544( + ffi.Pointer obj, + ffi.Pointer sel, + double priority, + ffi.Pointer tags, + ) { + return __objc_msgSend_544( + obj, + sel, + priority, + tags, + ); + } + + late final __objc_msgSend_544Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Double, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_544 = __objc_msgSend_544Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, double, + ffi.Pointer)>(); + + late final _sel_preservationPriorityForTag_1 = + _registerName1("preservationPriorityForTag:"); + late final _class_NSMutableAttributedString1 = + _getClass1("NSMutableAttributedString"); + late final _sel_setAttributes_range_1 = + _registerName1("setAttributes:range:"); + void _objc_msgSend_545( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrs, + _NSRange range, + ) { + return __objc_msgSend_545( + obj, + sel, + attrs, + range, + ); + } + + late final __objc_msgSend_545Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_545 = __objc_msgSend_545Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + late final _sel_mutableString1 = _registerName1("mutableString"); + ffi.Pointer _objc_msgSend_546( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_546( + obj, + sel, + ); + } + + late final __objc_msgSend_546Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_546 = __objc_msgSend_546Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_addAttribute_value_range_1 = + _registerName1("addAttribute:value:range:"); + void _objc_msgSend_547( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer value, + _NSRange range, + ) { + return __objc_msgSend_547( + obj, + sel, + name, + value, + range, + ); + } + + late final __objc_msgSend_547Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_547 = __objc_msgSend_547Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_addAttributes_range_1 = + _registerName1("addAttributes:range:"); + late final _sel_removeAttribute_range_1 = + _registerName1("removeAttribute:range:"); + void _objc_msgSend_548( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + _NSRange range, + ) { + return __objc_msgSend_548( + obj, + sel, + name, + range, + ); + } + + late final __objc_msgSend_548Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_548 = __objc_msgSend_548Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + late final _sel_replaceCharactersInRange_withAttributedString_1 = + _registerName1("replaceCharactersInRange:withAttributedString:"); + void _objc_msgSend_549( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer attrString, + ) { + return __objc_msgSend_549( + obj, + sel, + range, + attrString, + ); + } + + late final __objc_msgSend_549Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + _NSRange, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_549 = __objc_msgSend_549Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, _NSRange, + ffi.Pointer)>(); + + late final _sel_insertAttributedString_atIndex_1 = + _registerName1("insertAttributedString:atIndex:"); + void _objc_msgSend_550( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrString, + int loc, + ) { + return __objc_msgSend_550( + obj, + sel, + attrString, + loc, + ); + } + + late final __objc_msgSend_550Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_550 = __objc_msgSend_550Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_appendAttributedString_1 = + _registerName1("appendAttributedString:"); + void _objc_msgSend_551( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer attrString, + ) { + return __objc_msgSend_551( + obj, + sel, + attrString, + ); + } + + late final __objc_msgSend_551Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_551 = __objc_msgSend_551Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_setAttributedString_1 = + _registerName1("setAttributedString:"); + late final _sel_beginEditing1 = _registerName1("beginEditing"); + late final _sel_endEditing1 = _registerName1("endEditing"); + late final _sel_appendLocalizedFormat_1 = + _registerName1("appendLocalizedFormat:"); + late final _class_NSDateFormatter1 = _getClass1("NSDateFormatter"); + late final _class_NSFormatter1 = _getClass1("NSFormatter"); + late final _sel_stringForObjectValue_1 = + _registerName1("stringForObjectValue:"); + late final _sel_attributedStringForObjectValue_withDefaultAttributes_1 = + _registerName1("attributedStringForObjectValue:withDefaultAttributes:"); + ffi.Pointer _objc_msgSend_552( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer obj1, + ffi.Pointer attrs, + ) { + return __objc_msgSend_552( + obj, + sel, + obj1, + attrs, + ); + } + + late final __objc_msgSend_552Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_552 = __objc_msgSend_552Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_editingStringForObjectValue_1 = + _registerName1("editingStringForObjectValue:"); + late final _sel_getObjectValue_forString_errorDescription_1 = + _registerName1("getObjectValue:forString:errorDescription:"); + bool _objc_msgSend_553( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> obj1, + ffi.Pointer string, + ffi.Pointer> error, + ) { + return __objc_msgSend_553( + obj, + sel, + obj1, + string, + error, + ); + } + + late final __objc_msgSend_553Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_553 = __objc_msgSend_553Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_isPartialStringValid_newEditingString_errorDescription_1 = + _registerName1("isPartialStringValid:newEditingString:errorDescription:"); + bool _objc_msgSend_554( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer partialString, + ffi.Pointer> newString, + ffi.Pointer> error, + ) { + return __objc_msgSend_554( + obj, + sel, + partialString, + newString, + error, + ); + } + + late final __objc_msgSend_554Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_554 = __objc_msgSend_554Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_isPartialStringValid_proposedSelectedRange_originalString_originalSelectedRange_errorDescription_1 = + _registerName1( + "isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:"); + bool _objc_msgSend_555( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> partialStringPtr, + ffi.Pointer<_NSRange> proposedSelRangePtr, + ffi.Pointer origString, + _NSRange origSelRange, + ffi.Pointer> error, + ) { + return __objc_msgSend_555( + obj, + sel, + partialStringPtr, + proposedSelRangePtr, + origString, + origSelRange, + error, + ); + } + + late final __objc_msgSend_555Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer<_NSRange>, + ffi.Pointer, + _NSRange, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_555 = __objc_msgSend_555Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer<_NSRange>, + ffi.Pointer, + _NSRange, + ffi.Pointer>)>(); + + late final _sel_formattingContext1 = _registerName1("formattingContext"); + int _objc_msgSend_556( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_556( + obj, + sel, + ); + } + + late final __objc_msgSend_556Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_556 = __objc_msgSend_556Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setFormattingContext_1 = + _registerName1("setFormattingContext:"); + void _objc_msgSend_557( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_557( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_557Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_557 = __objc_msgSend_557Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_getObjectValue_forString_range_error_1 = + _registerName1("getObjectValue:forString:range:error:"); + bool _objc_msgSend_558( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> obj1, + ffi.Pointer string, + ffi.Pointer<_NSRange> rangep, + ffi.Pointer> error, + ) { + return __objc_msgSend_558( + obj, + sel, + obj1, + string, + rangep, + error, + ); + } + + late final __objc_msgSend_558Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer<_NSRange>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_558 = __objc_msgSend_558Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer<_NSRange>, + ffi.Pointer>)>(); + + late final _sel_stringFromDate_1 = _registerName1("stringFromDate:"); + ffi.Pointer _objc_msgSend_559( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + ) { + return __objc_msgSend_559( + obj, + sel, + date, + ); + } + + late final __objc_msgSend_559Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_559 = __objc_msgSend_559Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dateFromString_1 = _registerName1("dateFromString:"); + ffi.Pointer _objc_msgSend_560( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + ) { + return __objc_msgSend_560( + obj, + sel, + string, + ); + } + + late final __objc_msgSend_560Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_560 = __objc_msgSend_560Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_localizedStringFromDate_dateStyle_timeStyle_1 = + _registerName1("localizedStringFromDate:dateStyle:timeStyle:"); + ffi.Pointer _objc_msgSend_561( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + int dstyle, + int tstyle, + ) { + return __objc_msgSend_561( + obj, + sel, + date, + dstyle, + tstyle, + ); + } + + late final __objc_msgSend_561Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_561 = __objc_msgSend_561Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, int)>(); + + late final _sel_dateFormatFromTemplate_options_locale_1 = + _registerName1("dateFormatFromTemplate:options:locale:"); + ffi.Pointer _objc_msgSend_562( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer tmplate, + int opts, + ffi.Pointer locale, + ) { + return __objc_msgSend_562( + obj, + sel, + tmplate, + opts, + locale, + ); + } + + late final __objc_msgSend_562Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_562 = __objc_msgSend_562Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_defaultFormatterBehavior1 = + _registerName1("defaultFormatterBehavior"); + int _objc_msgSend_563( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_563( + obj, + sel, + ); + } + + late final __objc_msgSend_563Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_563 = __objc_msgSend_563Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setDefaultFormatterBehavior_1 = + _registerName1("setDefaultFormatterBehavior:"); + void _objc_msgSend_564( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_564( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_564Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_564 = __objc_msgSend_564Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_setLocalizedDateFormatFromTemplate_1 = + _registerName1("setLocalizedDateFormatFromTemplate:"); + late final _sel_dateFormat1 = _registerName1("dateFormat"); + late final _sel_setDateFormat_1 = _registerName1("setDateFormat:"); + late final _sel_dateStyle1 = _registerName1("dateStyle"); + int _objc_msgSend_565( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_565( + obj, + sel, + ); + } + + late final __objc_msgSend_565Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_565 = __objc_msgSend_565Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setDateStyle_1 = _registerName1("setDateStyle:"); + void _objc_msgSend_566( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_566( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_566Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_566 = __objc_msgSend_566Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_timeStyle1 = _registerName1("timeStyle"); + late final _sel_setTimeStyle_1 = _registerName1("setTimeStyle:"); + late final _sel_locale1 = _registerName1("locale"); + late final _sel_setLocale_1 = _registerName1("setLocale:"); + void _objc_msgSend_567( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_567( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_567Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_567 = __objc_msgSend_567Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_generatesCalendarDates1 = + _registerName1("generatesCalendarDates"); + late final _sel_setGeneratesCalendarDates_1 = + _registerName1("setGeneratesCalendarDates:"); + late final _sel_formatterBehavior1 = _registerName1("formatterBehavior"); + late final _sel_setFormatterBehavior_1 = + _registerName1("setFormatterBehavior:"); + late final _class_NSTimeZone1 = _getClass1("NSTimeZone"); + late final _sel_secondsFromGMTForDate_1 = + _registerName1("secondsFromGMTForDate:"); + int _objc_msgSend_568( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aDate, + ) { + return __objc_msgSend_568( + obj, + sel, + aDate, + ); + } + + late final __objc_msgSend_568Ptr = _lookup< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_568 = __objc_msgSend_568Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_abbreviationForDate_1 = + _registerName1("abbreviationForDate:"); + late final _sel_isDaylightSavingTimeForDate_1 = + _registerName1("isDaylightSavingTimeForDate:"); + late final _sel_daylightSavingTimeOffsetForDate_1 = + _registerName1("daylightSavingTimeOffsetForDate:"); + late final _sel_nextDaylightSavingTimeTransitionAfterDate_1 = + _registerName1("nextDaylightSavingTimeTransitionAfterDate:"); + late final _sel_systemTimeZone1 = _registerName1("systemTimeZone"); + ffi.Pointer _objc_msgSend_569( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_569( + obj, + sel, + ); + } + + late final __objc_msgSend_569Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_569 = __objc_msgSend_569Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_resetSystemTimeZone1 = _registerName1("resetSystemTimeZone"); + late final _sel_defaultTimeZone1 = _registerName1("defaultTimeZone"); + late final _sel_setDefaultTimeZone_1 = _registerName1("setDefaultTimeZone:"); + void _objc_msgSend_570( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_570( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_570Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_570 = __objc_msgSend_570Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_localTimeZone1 = _registerName1("localTimeZone"); + late final _sel_knownTimeZoneNames1 = _registerName1("knownTimeZoneNames"); + late final _sel_abbreviationDictionary1 = + _registerName1("abbreviationDictionary"); + late final _sel_setAbbreviationDictionary_1 = + _registerName1("setAbbreviationDictionary:"); + void _objc_msgSend_571( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_571( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_571Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_571 = __objc_msgSend_571Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_timeZoneDataVersion1 = _registerName1("timeZoneDataVersion"); + late final _sel_secondsFromGMT1 = _registerName1("secondsFromGMT"); + late final _sel_abbreviation1 = _registerName1("abbreviation"); + late final _sel_isDaylightSavingTime1 = + _registerName1("isDaylightSavingTime"); + late final _sel_daylightSavingTimeOffset1 = + _registerName1("daylightSavingTimeOffset"); + late final _sel_nextDaylightSavingTimeTransition1 = + _registerName1("nextDaylightSavingTimeTransition"); + late final _sel_isEqualToTimeZone_1 = _registerName1("isEqualToTimeZone:"); + bool _objc_msgSend_572( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aTimeZone, + ) { + return __objc_msgSend_572( + obj, + sel, + aTimeZone, + ); + } + + late final __objc_msgSend_572Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_572 = __objc_msgSend_572Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_localizedName_locale_1 = + _registerName1("localizedName:locale:"); + ffi.Pointer _objc_msgSend_573( + ffi.Pointer obj, + ffi.Pointer sel, + int style, + ffi.Pointer locale, + ) { + return __objc_msgSend_573( + obj, + sel, + style, + locale, + ); + } + + late final __objc_msgSend_573Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_573 = __objc_msgSend_573Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_timeZoneWithName_1 = _registerName1("timeZoneWithName:"); + late final _sel_timeZoneWithName_data_1 = + _registerName1("timeZoneWithName:data:"); + instancetype _objc_msgSend_574( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer tzName, + ffi.Pointer aData, + ) { + return __objc_msgSend_574( + obj, + sel, + tzName, + aData, + ); + } + + late final __objc_msgSend_574Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_574 = __objc_msgSend_574Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithName_1 = _registerName1("initWithName:"); + late final _sel_initWithName_data_1 = _registerName1("initWithName:data:"); + late final _sel_timeZoneForSecondsFromGMT_1 = + _registerName1("timeZoneForSecondsFromGMT:"); + instancetype _objc_msgSend_575( + ffi.Pointer obj, + ffi.Pointer sel, + int seconds, + ) { + return __objc_msgSend_575( + obj, + sel, + seconds, + ); + } + + late final __objc_msgSend_575Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_575 = __objc_msgSend_575Ptr.asFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_timeZoneWithAbbreviation_1 = + _registerName1("timeZoneWithAbbreviation:"); + late final _sel_timeZone1 = _registerName1("timeZone"); + late final _sel_setTimeZone_1 = _registerName1("setTimeZone:"); + late final _class_NSCalendar1 = _getClass1("NSCalendar"); + late final _sel_currentCalendar1 = _registerName1("currentCalendar"); + ffi.Pointer _objc_msgSend_576( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_576( + obj, + sel, + ); + } + + late final __objc_msgSend_576Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_576 = __objc_msgSend_576Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_autoupdatingCurrentCalendar1 = + _registerName1("autoupdatingCurrentCalendar"); + late final _sel_calendarWithIdentifier_1 = + _registerName1("calendarWithIdentifier:"); + ffi.Pointer _objc_msgSend_577( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer calendarIdentifierConstant, + ) { + return __objc_msgSend_577( + obj, + sel, + calendarIdentifierConstant, + ); + } + + late final __objc_msgSend_577Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_577 = __objc_msgSend_577Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithCalendarIdentifier_1 = + _registerName1("initWithCalendarIdentifier:"); + late final _sel_firstWeekday1 = _registerName1("firstWeekday"); + late final _sel_setFirstWeekday_1 = _registerName1("setFirstWeekday:"); + late final _sel_minimumDaysInFirstWeek1 = + _registerName1("minimumDaysInFirstWeek"); + late final _sel_setMinimumDaysInFirstWeek_1 = + _registerName1("setMinimumDaysInFirstWeek:"); + late final _sel_eraSymbols1 = _registerName1("eraSymbols"); + late final _sel_longEraSymbols1 = _registerName1("longEraSymbols"); + late final _sel_monthSymbols1 = _registerName1("monthSymbols"); + late final _sel_shortMonthSymbols1 = _registerName1("shortMonthSymbols"); + late final _sel_veryShortMonthSymbols1 = + _registerName1("veryShortMonthSymbols"); + late final _sel_standaloneMonthSymbols1 = + _registerName1("standaloneMonthSymbols"); + late final _sel_shortStandaloneMonthSymbols1 = + _registerName1("shortStandaloneMonthSymbols"); + late final _sel_veryShortStandaloneMonthSymbols1 = + _registerName1("veryShortStandaloneMonthSymbols"); + late final _sel_weekdaySymbols1 = _registerName1("weekdaySymbols"); + late final _sel_shortWeekdaySymbols1 = _registerName1("shortWeekdaySymbols"); + late final _sel_veryShortWeekdaySymbols1 = + _registerName1("veryShortWeekdaySymbols"); + late final _sel_standaloneWeekdaySymbols1 = + _registerName1("standaloneWeekdaySymbols"); + late final _sel_shortStandaloneWeekdaySymbols1 = + _registerName1("shortStandaloneWeekdaySymbols"); + late final _sel_veryShortStandaloneWeekdaySymbols1 = + _registerName1("veryShortStandaloneWeekdaySymbols"); + late final _sel_quarterSymbols1 = _registerName1("quarterSymbols"); + late final _sel_shortQuarterSymbols1 = _registerName1("shortQuarterSymbols"); + late final _sel_standaloneQuarterSymbols1 = + _registerName1("standaloneQuarterSymbols"); + late final _sel_shortStandaloneQuarterSymbols1 = + _registerName1("shortStandaloneQuarterSymbols"); + late final _sel_AMSymbol1 = _registerName1("AMSymbol"); + late final _sel_PMSymbol1 = _registerName1("PMSymbol"); + late final _sel_minimumRangeOfUnit_1 = _registerName1("minimumRangeOfUnit:"); + _NSRange _objc_msgSend_578( + ffi.Pointer obj, + ffi.Pointer sel, + int unit, + ) { + return __objc_msgSend_578( + obj, + sel, + unit, + ); + } + + late final __objc_msgSend_578Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_578 = __objc_msgSend_578Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_maximumRangeOfUnit_1 = _registerName1("maximumRangeOfUnit:"); + late final _sel_rangeOfUnit_inUnit_forDate_1 = + _registerName1("rangeOfUnit:inUnit:forDate:"); + _NSRange _objc_msgSend_579( + ffi.Pointer obj, + ffi.Pointer sel, + int smaller, + int larger, + ffi.Pointer date, + ) { + return __objc_msgSend_579( + obj, + sel, + smaller, + larger, + date, + ); + } + + late final __objc_msgSend_579Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Int32, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_579 = __objc_msgSend_579Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, int, int, + ffi.Pointer)>(); + + late final _sel_ordinalityOfUnit_inUnit_forDate_1 = + _registerName1("ordinalityOfUnit:inUnit:forDate:"); + int _objc_msgSend_580( + ffi.Pointer obj, + ffi.Pointer sel, + int smaller, + int larger, + ffi.Pointer date, + ) { + return __objc_msgSend_580( + obj, + sel, + smaller, + larger, + date, + ); + } + + late final __objc_msgSend_580Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_580 = __objc_msgSend_580Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int, int, + ffi.Pointer)>(); + + late final _sel_rangeOfUnit_startDate_interval_forDate_1 = + _registerName1("rangeOfUnit:startDate:interval:forDate:"); + bool _objc_msgSend_581( + ffi.Pointer obj, + ffi.Pointer sel, + int unit, + ffi.Pointer> datep, + ffi.Pointer tip, + ffi.Pointer date, + ) { + return __objc_msgSend_581( + obj, + sel, + unit, + datep, + tip, + date, + ); + } + + late final __objc_msgSend_581Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_581 = __objc_msgSend_581Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSDateComponents1 = _getClass1("NSDateComponents"); + late final _sel_calendar1 = _registerName1("calendar"); + late final _sel_setCalendar_1 = _registerName1("setCalendar:"); + void _objc_msgSend_582( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_582( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_582Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_582 = __objc_msgSend_582Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_era1 = _registerName1("era"); + late final _sel_setEra_1 = _registerName1("setEra:"); + void _objc_msgSend_583( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_583( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_583Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_583 = __objc_msgSend_583Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_year1 = _registerName1("year"); + late final _sel_setYear_1 = _registerName1("setYear:"); + late final _sel_month1 = _registerName1("month"); + late final _sel_setMonth_1 = _registerName1("setMonth:"); + late final _sel_day1 = _registerName1("day"); + late final _sel_setDay_1 = _registerName1("setDay:"); + late final _sel_hour1 = _registerName1("hour"); + late final _sel_setHour_1 = _registerName1("setHour:"); + late final _sel_minute1 = _registerName1("minute"); + late final _sel_setMinute_1 = _registerName1("setMinute:"); + late final _sel_second1 = _registerName1("second"); + late final _sel_setSecond_1 = _registerName1("setSecond:"); + late final _sel_nanosecond1 = _registerName1("nanosecond"); + late final _sel_setNanosecond_1 = _registerName1("setNanosecond:"); + late final _sel_weekday1 = _registerName1("weekday"); + late final _sel_setWeekday_1 = _registerName1("setWeekday:"); + late final _sel_weekdayOrdinal1 = _registerName1("weekdayOrdinal"); + late final _sel_setWeekdayOrdinal_1 = _registerName1("setWeekdayOrdinal:"); + late final _sel_quarter1 = _registerName1("quarter"); + late final _sel_setQuarter_1 = _registerName1("setQuarter:"); + late final _sel_weekOfMonth1 = _registerName1("weekOfMonth"); + late final _sel_setWeekOfMonth_1 = _registerName1("setWeekOfMonth:"); + late final _sel_weekOfYear1 = _registerName1("weekOfYear"); + late final _sel_setWeekOfYear_1 = _registerName1("setWeekOfYear:"); + late final _sel_yearForWeekOfYear1 = _registerName1("yearForWeekOfYear"); + late final _sel_setYearForWeekOfYear_1 = + _registerName1("setYearForWeekOfYear:"); + late final _sel_isLeapMonth1 = _registerName1("isLeapMonth"); + late final _sel_setLeapMonth_1 = _registerName1("setLeapMonth:"); + late final _sel_week1 = _registerName1("week"); + late final _sel_setWeek_1 = _registerName1("setWeek:"); + late final _sel_setValue_forComponent_1 = + _registerName1("setValue:forComponent:"); + void _objc_msgSend_584( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + int unit, + ) { + return __objc_msgSend_584( + obj, + sel, + value, + unit, + ); + } + + late final __objc_msgSend_584Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Long, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_584 = __objc_msgSend_584Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, int)>(); + + late final _sel_valueForComponent_1 = _registerName1("valueForComponent:"); + int _objc_msgSend_585( + ffi.Pointer obj, + ffi.Pointer sel, + int unit, + ) { + return __objc_msgSend_585( + obj, + sel, + unit, + ); + } + + late final __objc_msgSend_585Ptr = _lookup< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_585 = __objc_msgSend_585Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_isValidDate1 = _registerName1("isValidDate"); + late final _sel_isValidDateInCalendar_1 = + _registerName1("isValidDateInCalendar:"); + bool _objc_msgSend_586( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer calendar, + ) { + return __objc_msgSend_586( + obj, + sel, + calendar, + ); + } + + late final __objc_msgSend_586Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_586 = __objc_msgSend_586Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_dateFromComponents_1 = _registerName1("dateFromComponents:"); + ffi.Pointer _objc_msgSend_587( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer comps, + ) { + return __objc_msgSend_587( + obj, + sel, + comps, + ); + } + + late final __objc_msgSend_587Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_587 = __objc_msgSend_587Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_components_fromDate_1 = + _registerName1("components:fromDate:"); + ffi.Pointer _objc_msgSend_588( + ffi.Pointer obj, + ffi.Pointer sel, + int unitFlags, + ffi.Pointer date, + ) { + return __objc_msgSend_588( + obj, + sel, + unitFlags, + date, + ); + } + + late final __objc_msgSend_588Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_588 = __objc_msgSend_588Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_dateByAddingComponents_toDate_options_1 = + _registerName1("dateByAddingComponents:toDate:options:"); + ffi.Pointer _objc_msgSend_589( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer comps, + ffi.Pointer date, + int opts, + ) { + return __objc_msgSend_589( + obj, + sel, + comps, + date, + opts, + ); + } + + late final __objc_msgSend_589Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_589 = __objc_msgSend_589Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_components_fromDate_toDate_options_1 = + _registerName1("components:fromDate:toDate:options:"); + ffi.Pointer _objc_msgSend_590( + ffi.Pointer obj, + ffi.Pointer sel, + int unitFlags, + ffi.Pointer startingDate, + ffi.Pointer resultDate, + int opts, + ) { + return __objc_msgSend_590( + obj, + sel, + unitFlags, + startingDate, + resultDate, + opts, + ); + } + + late final __objc_msgSend_590Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_590 = __objc_msgSend_590Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_getEra_year_month_day_fromDate_1 = + _registerName1("getEra:year:month:day:fromDate:"); + void _objc_msgSend_591( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer eraValuePointer, + ffi.Pointer yearValuePointer, + ffi.Pointer monthValuePointer, + ffi.Pointer dayValuePointer, + ffi.Pointer date, + ) { + return __objc_msgSend_591( + obj, + sel, + eraValuePointer, + yearValuePointer, + monthValuePointer, + dayValuePointer, + date, + ); + } + + late final __objc_msgSend_591Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_591 = __objc_msgSend_591Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_getEra_yearForWeekOfYear_weekOfYear_weekday_fromDate_1 = + _registerName1("getEra:yearForWeekOfYear:weekOfYear:weekday:fromDate:"); + late final _sel_getHour_minute_second_nanosecond_fromDate_1 = + _registerName1("getHour:minute:second:nanosecond:fromDate:"); + late final _sel_component_fromDate_1 = _registerName1("component:fromDate:"); + int _objc_msgSend_592( + ffi.Pointer obj, + ffi.Pointer sel, + int unit, + ffi.Pointer date, + ) { + return __objc_msgSend_592( + obj, + sel, + unit, + date, + ); + } + + late final __objc_msgSend_592Ptr = _lookup< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_592 = __objc_msgSend_592Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_dateWithEra_year_month_day_hour_minute_second_nanosecond_1 = + _registerName1( + "dateWithEra:year:month:day:hour:minute:second:nanosecond:"); + ffi.Pointer _objc_msgSend_593( + ffi.Pointer obj, + ffi.Pointer sel, + int eraValue, + int yearValue, + int monthValue, + int dayValue, + int hourValue, + int minuteValue, + int secondValue, + int nanosecondValue, + ) { + return __objc_msgSend_593( + obj, + sel, + eraValue, + yearValue, + monthValue, + dayValue, + hourValue, + minuteValue, + secondValue, + nanosecondValue, + ); + } + + late final __objc_msgSend_593Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_593 = __objc_msgSend_593Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, int, int, int, int, int, int, int)>(); + + late final _sel_dateWithEra_yearForWeekOfYear_weekOfYear_weekday_hour_minute_second_nanosecond_1 = + _registerName1( + "dateWithEra:yearForWeekOfYear:weekOfYear:weekday:hour:minute:second:nanosecond:"); + late final _sel_startOfDayForDate_1 = _registerName1("startOfDayForDate:"); + late final _sel_componentsInTimeZone_fromDate_1 = + _registerName1("componentsInTimeZone:fromDate:"); + ffi.Pointer _objc_msgSend_594( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer timezone, + ffi.Pointer date, + ) { + return __objc_msgSend_594( + obj, + sel, + timezone, + date, + ); + } + + late final __objc_msgSend_594Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_594 = __objc_msgSend_594Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_compareDate_toDate_toUnitGranularity_1 = + _registerName1("compareDate:toDate:toUnitGranularity:"); + int _objc_msgSend_595( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date1, + ffi.Pointer date2, + int unit, + ) { + return __objc_msgSend_595( + obj, + sel, + date1, + date2, + unit, + ); + } + + late final __objc_msgSend_595Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_595 = __objc_msgSend_595Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_isDate_equalToDate_toUnitGranularity_1 = + _registerName1("isDate:equalToDate:toUnitGranularity:"); + bool _objc_msgSend_596( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date1, + ffi.Pointer date2, + int unit, + ) { + return __objc_msgSend_596( + obj, + sel, + date1, + date2, + unit, + ); + } + + late final __objc_msgSend_596Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_596 = __objc_msgSend_596Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_isDate_inSameDayAsDate_1 = + _registerName1("isDate:inSameDayAsDate:"); + bool _objc_msgSend_597( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date1, + ffi.Pointer date2, + ) { + return __objc_msgSend_597( + obj, + sel, + date1, + date2, + ); + } + + late final __objc_msgSend_597Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_597 = __objc_msgSend_597Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_isDateInToday_1 = _registerName1("isDateInToday:"); + late final _sel_isDateInYesterday_1 = _registerName1("isDateInYesterday:"); + late final _sel_isDateInTomorrow_1 = _registerName1("isDateInTomorrow:"); + late final _sel_isDateInWeekend_1 = _registerName1("isDateInWeekend:"); + late final _sel_rangeOfWeekendStartDate_interval_containingDate_1 = + _registerName1("rangeOfWeekendStartDate:interval:containingDate:"); + bool _objc_msgSend_598( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> datep, + ffi.Pointer tip, + ffi.Pointer date, + ) { + return __objc_msgSend_598( + obj, + sel, + datep, + tip, + date, + ); + } + + late final __objc_msgSend_598Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_598 = __objc_msgSend_598Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_nextWeekendStartDate_interval_options_afterDate_1 = + _registerName1("nextWeekendStartDate:interval:options:afterDate:"); + bool _objc_msgSend_599( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> datep, + ffi.Pointer tip, + int options, + ffi.Pointer date, + ) { + return __objc_msgSend_599( + obj, + sel, + datep, + tip, + options, + date, + ); + } + + late final __objc_msgSend_599Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_599 = __objc_msgSend_599Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_components_fromDateComponents_toDateComponents_options_1 = + _registerName1("components:fromDateComponents:toDateComponents:options:"); + ffi.Pointer _objc_msgSend_600( + ffi.Pointer obj, + ffi.Pointer sel, + int unitFlags, + ffi.Pointer startingDateComp, + ffi.Pointer resultDateComp, + int options, + ) { + return __objc_msgSend_600( + obj, + sel, + unitFlags, + startingDateComp, + resultDateComp, + options, + ); + } + + late final __objc_msgSend_600Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_600 = __objc_msgSend_600Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_dateByAddingUnit_value_toDate_options_1 = + _registerName1("dateByAddingUnit:value:toDate:options:"); + ffi.Pointer _objc_msgSend_601( + ffi.Pointer obj, + ffi.Pointer sel, + int unit, + int value, + ffi.Pointer date, + int options, + ) { + return __objc_msgSend_601( + obj, + sel, + unit, + value, + date, + options, + ); + } + + late final __objc_msgSend_601Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Long, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_601 = __objc_msgSend_601Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, int, ffi.Pointer, int)>(); + + late final _sel_enumerateDatesStartingAfterDate_matchingComponents_options_usingBlock_1 = + _registerName1( + "enumerateDatesStartingAfterDate:matchingComponents:options:usingBlock:"); + void _objc_msgSend_602( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer start, + ffi.Pointer comps, + int opts, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_602( + obj, + sel, + start, + comps, + opts, + block, + ); + } + + late final __objc_msgSend_602Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_602 = __objc_msgSend_602Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_nextDateAfterDate_matchingComponents_options_1 = + _registerName1("nextDateAfterDate:matchingComponents:options:"); + ffi.Pointer _objc_msgSend_603( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + ffi.Pointer comps, + int options, + ) { + return __objc_msgSend_603( + obj, + sel, + date, + comps, + options, + ); + } + + late final __objc_msgSend_603Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_603 = __objc_msgSend_603Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_nextDateAfterDate_matchingUnit_value_options_1 = + _registerName1("nextDateAfterDate:matchingUnit:value:options:"); + ffi.Pointer _objc_msgSend_604( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + int unit, + int value, + int options, + ) { + return __objc_msgSend_604( + obj, + sel, + date, + unit, + value, + options, + ); + } + + late final __objc_msgSend_604Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Long, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_604 = __objc_msgSend_604Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, int, int)>(); + + late final _sel_nextDateAfterDate_matchingHour_minute_second_options_1 = + _registerName1("nextDateAfterDate:matchingHour:minute:second:options:"); + ffi.Pointer _objc_msgSend_605( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + int hourValue, + int minuteValue, + int secondValue, + int options, + ) { + return __objc_msgSend_605( + obj, + sel, + date, + hourValue, + minuteValue, + secondValue, + options, + ); + } + + late final __objc_msgSend_605Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_605 = __objc_msgSend_605Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, int, int, int)>(); + + late final _sel_dateBySettingUnit_value_ofDate_options_1 = + _registerName1("dateBySettingUnit:value:ofDate:options:"); + late final _sel_dateBySettingHour_minute_second_ofDate_options_1 = + _registerName1("dateBySettingHour:minute:second:ofDate:options:"); + ffi.Pointer _objc_msgSend_606( + ffi.Pointer obj, + ffi.Pointer sel, + int h, + int m, + int s, + ffi.Pointer date, + int opts, + ) { + return __objc_msgSend_606( + obj, + sel, + h, + m, + s, + date, + opts, + ); + } + + late final __objc_msgSend_606Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Long, + ffi.Long, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_606 = __objc_msgSend_606Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, int, int, ffi.Pointer, int)>(); + + late final _sel_date_matchesComponents_1 = + _registerName1("date:matchesComponents:"); + bool _objc_msgSend_607( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + ffi.Pointer components, + ) { + return __objc_msgSend_607( + obj, + sel, + date, + components, + ); + } + + late final __objc_msgSend_607Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_607 = __objc_msgSend_607Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_isLenient1 = _registerName1("isLenient"); + late final _sel_setLenient_1 = _registerName1("setLenient:"); + late final _sel_twoDigitStartDate1 = _registerName1("twoDigitStartDate"); + late final _sel_setTwoDigitStartDate_1 = + _registerName1("setTwoDigitStartDate:"); + void _objc_msgSend_608( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_608( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_608Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_608 = __objc_msgSend_608Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_defaultDate1 = _registerName1("defaultDate"); + late final _sel_setDefaultDate_1 = _registerName1("setDefaultDate:"); + late final _sel_setEraSymbols_1 = _registerName1("setEraSymbols:"); + void _objc_msgSend_609( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_609( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_609Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_609 = __objc_msgSend_609Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_setMonthSymbols_1 = _registerName1("setMonthSymbols:"); + late final _sel_setShortMonthSymbols_1 = + _registerName1("setShortMonthSymbols:"); + late final _sel_setWeekdaySymbols_1 = _registerName1("setWeekdaySymbols:"); + late final _sel_setShortWeekdaySymbols_1 = + _registerName1("setShortWeekdaySymbols:"); + late final _sel_setAMSymbol_1 = _registerName1("setAMSymbol:"); + late final _sel_setPMSymbol_1 = _registerName1("setPMSymbol:"); + late final _sel_setLongEraSymbols_1 = _registerName1("setLongEraSymbols:"); + late final _sel_setVeryShortMonthSymbols_1 = + _registerName1("setVeryShortMonthSymbols:"); + late final _sel_setStandaloneMonthSymbols_1 = + _registerName1("setStandaloneMonthSymbols:"); + late final _sel_setShortStandaloneMonthSymbols_1 = + _registerName1("setShortStandaloneMonthSymbols:"); + late final _sel_setVeryShortStandaloneMonthSymbols_1 = + _registerName1("setVeryShortStandaloneMonthSymbols:"); + late final _sel_setVeryShortWeekdaySymbols_1 = + _registerName1("setVeryShortWeekdaySymbols:"); + late final _sel_setStandaloneWeekdaySymbols_1 = + _registerName1("setStandaloneWeekdaySymbols:"); + late final _sel_setShortStandaloneWeekdaySymbols_1 = + _registerName1("setShortStandaloneWeekdaySymbols:"); + late final _sel_setVeryShortStandaloneWeekdaySymbols_1 = + _registerName1("setVeryShortStandaloneWeekdaySymbols:"); + late final _sel_setQuarterSymbols_1 = _registerName1("setQuarterSymbols:"); + late final _sel_setShortQuarterSymbols_1 = + _registerName1("setShortQuarterSymbols:"); + late final _sel_setStandaloneQuarterSymbols_1 = + _registerName1("setStandaloneQuarterSymbols:"); + late final _sel_setShortStandaloneQuarterSymbols_1 = + _registerName1("setShortStandaloneQuarterSymbols:"); + late final _sel_gregorianStartDate1 = _registerName1("gregorianStartDate"); + late final _sel_setGregorianStartDate_1 = + _registerName1("setGregorianStartDate:"); + late final _sel_doesRelativeDateFormatting1 = + _registerName1("doesRelativeDateFormatting"); + late final _sel_setDoesRelativeDateFormatting_1 = + _registerName1("setDoesRelativeDateFormatting:"); + late final _sel_initWithDateFormat_allowNaturalLanguage_1 = + _registerName1("initWithDateFormat:allowNaturalLanguage:"); + late final _sel_allowsNaturalLanguage1 = + _registerName1("allowsNaturalLanguage"); + late final _class_NSNumberFormatter1 = _getClass1("NSNumberFormatter"); + late final _sel_stringFromNumber_1 = _registerName1("stringFromNumber:"); + ffi.Pointer _objc_msgSend_610( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer number, + ) { + return __objc_msgSend_610( + obj, + sel, + number, + ); + } + + late final __objc_msgSend_610Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_610 = __objc_msgSend_610Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_numberFromString_1 = _registerName1("numberFromString:"); + ffi.Pointer _objc_msgSend_611( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + ) { + return __objc_msgSend_611( + obj, + sel, + string, + ); + } + + late final __objc_msgSend_611Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_611 = __objc_msgSend_611Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_localizedStringFromNumber_numberStyle_1 = + _registerName1("localizedStringFromNumber:numberStyle:"); + ffi.Pointer _objc_msgSend_612( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer num, + int nstyle, + ) { + return __objc_msgSend_612( + obj, + sel, + num, + nstyle, + ); + } + + late final __objc_msgSend_612Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_612 = __objc_msgSend_612Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + int _objc_msgSend_613( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_613( + obj, + sel, + ); + } + + late final __objc_msgSend_613Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_613 = __objc_msgSend_613Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + void _objc_msgSend_614( + ffi.Pointer obj, + ffi.Pointer sel, + int behavior, + ) { + return __objc_msgSend_614( + obj, + sel, + behavior, + ); + } + + late final __objc_msgSend_614Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_614 = __objc_msgSend_614Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_numberStyle1 = _registerName1("numberStyle"); + int _objc_msgSend_615( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_615( + obj, + sel, + ); + } + + late final __objc_msgSend_615Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_615 = __objc_msgSend_615Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setNumberStyle_1 = _registerName1("setNumberStyle:"); + void _objc_msgSend_616( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_616( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_616Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_616 = __objc_msgSend_616Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_generatesDecimalNumbers1 = + _registerName1("generatesDecimalNumbers"); + late final _sel_setGeneratesDecimalNumbers_1 = + _registerName1("setGeneratesDecimalNumbers:"); + void _objc_msgSend_617( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_617( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_617Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_617 = __objc_msgSend_617Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_negativeFormat1 = _registerName1("negativeFormat"); + late final _sel_setNegativeFormat_1 = _registerName1("setNegativeFormat:"); + late final _sel_textAttributesForNegativeValues1 = + _registerName1("textAttributesForNegativeValues"); + late final _sel_setTextAttributesForNegativeValues_1 = + _registerName1("setTextAttributesForNegativeValues:"); + late final _sel_positiveFormat1 = _registerName1("positiveFormat"); + late final _sel_setPositiveFormat_1 = _registerName1("setPositiveFormat:"); + late final _sel_textAttributesForPositiveValues1 = + _registerName1("textAttributesForPositiveValues"); + late final _sel_setTextAttributesForPositiveValues_1 = + _registerName1("setTextAttributesForPositiveValues:"); + late final _sel_allowsFloats1 = _registerName1("allowsFloats"); + late final _sel_setAllowsFloats_1 = _registerName1("setAllowsFloats:"); + late final _sel_setDecimalSeparator_1 = + _registerName1("setDecimalSeparator:"); + late final _sel_alwaysShowsDecimalSeparator1 = + _registerName1("alwaysShowsDecimalSeparator"); + late final _sel_setAlwaysShowsDecimalSeparator_1 = + _registerName1("setAlwaysShowsDecimalSeparator:"); + late final _sel_currencyDecimalSeparator1 = + _registerName1("currencyDecimalSeparator"); + late final _sel_setCurrencyDecimalSeparator_1 = + _registerName1("setCurrencyDecimalSeparator:"); + late final _sel_usesGroupingSeparator1 = + _registerName1("usesGroupingSeparator"); + late final _sel_setUsesGroupingSeparator_1 = + _registerName1("setUsesGroupingSeparator:"); + late final _sel_setGroupingSeparator_1 = + _registerName1("setGroupingSeparator:"); + late final _sel_zeroSymbol1 = _registerName1("zeroSymbol"); + late final _sel_setZeroSymbol_1 = _registerName1("setZeroSymbol:"); + late final _sel_textAttributesForZero1 = + _registerName1("textAttributesForZero"); + late final _sel_setTextAttributesForZero_1 = + _registerName1("setTextAttributesForZero:"); + late final _sel_nilSymbol1 = _registerName1("nilSymbol"); + late final _sel_setNilSymbol_1 = _registerName1("setNilSymbol:"); + late final _sel_textAttributesForNil1 = + _registerName1("textAttributesForNil"); + late final _sel_setTextAttributesForNil_1 = + _registerName1("setTextAttributesForNil:"); + late final _sel_notANumberSymbol1 = _registerName1("notANumberSymbol"); + late final _sel_setNotANumberSymbol_1 = + _registerName1("setNotANumberSymbol:"); + late final _sel_textAttributesForNotANumber1 = + _registerName1("textAttributesForNotANumber"); + late final _sel_setTextAttributesForNotANumber_1 = + _registerName1("setTextAttributesForNotANumber:"); + late final _sel_positiveInfinitySymbol1 = + _registerName1("positiveInfinitySymbol"); + late final _sel_setPositiveInfinitySymbol_1 = + _registerName1("setPositiveInfinitySymbol:"); + late final _sel_textAttributesForPositiveInfinity1 = + _registerName1("textAttributesForPositiveInfinity"); + late final _sel_setTextAttributesForPositiveInfinity_1 = + _registerName1("setTextAttributesForPositiveInfinity:"); + late final _sel_negativeInfinitySymbol1 = + _registerName1("negativeInfinitySymbol"); + late final _sel_setNegativeInfinitySymbol_1 = + _registerName1("setNegativeInfinitySymbol:"); + late final _sel_textAttributesForNegativeInfinity1 = + _registerName1("textAttributesForNegativeInfinity"); + late final _sel_setTextAttributesForNegativeInfinity_1 = + _registerName1("setTextAttributesForNegativeInfinity:"); + late final _sel_positivePrefix1 = _registerName1("positivePrefix"); + late final _sel_setPositivePrefix_1 = _registerName1("setPositivePrefix:"); + late final _sel_positiveSuffix1 = _registerName1("positiveSuffix"); + late final _sel_setPositiveSuffix_1 = _registerName1("setPositiveSuffix:"); + late final _sel_negativePrefix1 = _registerName1("negativePrefix"); + late final _sel_setNegativePrefix_1 = _registerName1("setNegativePrefix:"); + late final _sel_negativeSuffix1 = _registerName1("negativeSuffix"); + late final _sel_setNegativeSuffix_1 = _registerName1("setNegativeSuffix:"); + late final _sel_setCurrencyCode_1 = _registerName1("setCurrencyCode:"); + late final _sel_setCurrencySymbol_1 = _registerName1("setCurrencySymbol:"); + late final _sel_internationalCurrencySymbol1 = + _registerName1("internationalCurrencySymbol"); + late final _sel_setInternationalCurrencySymbol_1 = + _registerName1("setInternationalCurrencySymbol:"); + late final _sel_percentSymbol1 = _registerName1("percentSymbol"); + late final _sel_setPercentSymbol_1 = _registerName1("setPercentSymbol:"); + late final _sel_perMillSymbol1 = _registerName1("perMillSymbol"); + late final _sel_setPerMillSymbol_1 = _registerName1("setPerMillSymbol:"); + late final _sel_minusSign1 = _registerName1("minusSign"); + late final _sel_setMinusSign_1 = _registerName1("setMinusSign:"); + late final _sel_plusSign1 = _registerName1("plusSign"); + late final _sel_setPlusSign_1 = _registerName1("setPlusSign:"); + late final _sel_exponentSymbol1 = _registerName1("exponentSymbol"); + late final _sel_setExponentSymbol_1 = _registerName1("setExponentSymbol:"); + late final _sel_groupingSize1 = _registerName1("groupingSize"); + late final _sel_setGroupingSize_1 = _registerName1("setGroupingSize:"); + late final _sel_secondaryGroupingSize1 = + _registerName1("secondaryGroupingSize"); + late final _sel_setSecondaryGroupingSize_1 = + _registerName1("setSecondaryGroupingSize:"); + late final _sel_multiplier1 = _registerName1("multiplier"); + late final _sel_setMultiplier_1 = _registerName1("setMultiplier:"); + late final _sel_formatWidth1 = _registerName1("formatWidth"); + late final _sel_setFormatWidth_1 = _registerName1("setFormatWidth:"); + late final _sel_paddingCharacter1 = _registerName1("paddingCharacter"); + late final _sel_setPaddingCharacter_1 = + _registerName1("setPaddingCharacter:"); + late final _sel_paddingPosition1 = _registerName1("paddingPosition"); + int _objc_msgSend_618( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_618( + obj, + sel, + ); + } + + late final __objc_msgSend_618Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_618 = __objc_msgSend_618Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setPaddingPosition_1 = _registerName1("setPaddingPosition:"); + void _objc_msgSend_619( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_619( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_619Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_619 = __objc_msgSend_619Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_roundingMode1 = _registerName1("roundingMode"); + int _objc_msgSend_620( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_620( + obj, + sel, + ); + } + + late final __objc_msgSend_620Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_620 = __objc_msgSend_620Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setRoundingMode_1 = _registerName1("setRoundingMode:"); + void _objc_msgSend_621( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_621( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_621Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_621 = __objc_msgSend_621Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_roundingIncrement1 = _registerName1("roundingIncrement"); + late final _sel_setRoundingIncrement_1 = + _registerName1("setRoundingIncrement:"); + late final _sel_minimumIntegerDigits1 = + _registerName1("minimumIntegerDigits"); + late final _sel_setMinimumIntegerDigits_1 = + _registerName1("setMinimumIntegerDigits:"); + late final _sel_maximumIntegerDigits1 = + _registerName1("maximumIntegerDigits"); + late final _sel_setMaximumIntegerDigits_1 = + _registerName1("setMaximumIntegerDigits:"); + late final _sel_minimumFractionDigits1 = + _registerName1("minimumFractionDigits"); + late final _sel_setMinimumFractionDigits_1 = + _registerName1("setMinimumFractionDigits:"); + late final _sel_maximumFractionDigits1 = + _registerName1("maximumFractionDigits"); + late final _sel_setMaximumFractionDigits_1 = + _registerName1("setMaximumFractionDigits:"); + late final _sel_minimum1 = _registerName1("minimum"); + late final _sel_setMinimum_1 = _registerName1("setMinimum:"); + late final _sel_maximum1 = _registerName1("maximum"); + late final _sel_setMaximum_1 = _registerName1("setMaximum:"); + late final _sel_currencyGroupingSeparator1 = + _registerName1("currencyGroupingSeparator"); + late final _sel_setCurrencyGroupingSeparator_1 = + _registerName1("setCurrencyGroupingSeparator:"); + late final _sel_usesSignificantDigits1 = + _registerName1("usesSignificantDigits"); + late final _sel_setUsesSignificantDigits_1 = + _registerName1("setUsesSignificantDigits:"); + late final _sel_minimumSignificantDigits1 = + _registerName1("minimumSignificantDigits"); + late final _sel_setMinimumSignificantDigits_1 = + _registerName1("setMinimumSignificantDigits:"); + late final _sel_maximumSignificantDigits1 = + _registerName1("maximumSignificantDigits"); + late final _sel_setMaximumSignificantDigits_1 = + _registerName1("setMaximumSignificantDigits:"); + late final _sel_isPartialStringValidationEnabled1 = + _registerName1("isPartialStringValidationEnabled"); + late final _sel_setPartialStringValidationEnabled_1 = + _registerName1("setPartialStringValidationEnabled:"); + late final _sel_hasThousandSeparators1 = + _registerName1("hasThousandSeparators"); + late final _sel_setHasThousandSeparators_1 = + _registerName1("setHasThousandSeparators:"); + late final _sel_thousandSeparator1 = _registerName1("thousandSeparator"); + late final _sel_setThousandSeparator_1 = + _registerName1("setThousandSeparator:"); + late final _sel_localizesFormat1 = _registerName1("localizesFormat"); + late final _sel_setLocalizesFormat_1 = _registerName1("setLocalizesFormat:"); + late final _sel_format1 = _registerName1("format"); + late final _sel_setFormat_1 = _registerName1("setFormat:"); + late final _sel_attributedStringForZero1 = + _registerName1("attributedStringForZero"); + late final _sel_setAttributedStringForZero_1 = + _registerName1("setAttributedStringForZero:"); + void _objc_msgSend_622( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_622( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_622Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_622 = __objc_msgSend_622Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_attributedStringForNil1 = + _registerName1("attributedStringForNil"); + late final _sel_setAttributedStringForNil_1 = + _registerName1("setAttributedStringForNil:"); + late final _sel_attributedStringForNotANumber1 = + _registerName1("attributedStringForNotANumber"); + late final _sel_setAttributedStringForNotANumber_1 = + _registerName1("setAttributedStringForNotANumber:"); + late final _class_NSDecimalNumberHandler1 = + _getClass1("NSDecimalNumberHandler"); + late final _sel_defaultDecimalNumberHandler1 = + _registerName1("defaultDecimalNumberHandler"); + ffi.Pointer _objc_msgSend_623( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_623( + obj, + sel, + ); + } + + late final __objc_msgSend_623Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_623 = __objc_msgSend_623Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero_1 = + _registerName1( + "initWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:"); + instancetype _objc_msgSend_624( + ffi.Pointer obj, + ffi.Pointer sel, + int roundingMode, + int scale, + bool exact, + bool overflow, + bool underflow, + bool divideByZero, + ) { + return __objc_msgSend_624( + obj, + sel, + roundingMode, + scale, + exact, + overflow, + underflow, + divideByZero, + ); + } + + late final __objc_msgSend_624Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Short, + ffi.Bool, + ffi.Bool, + ffi.Bool, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_624 = __objc_msgSend_624Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, int, + int, bool, bool, bool, bool)>(); + + late final _sel_decimalNumberHandlerWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero_1 = + _registerName1( + "decimalNumberHandlerWithRoundingMode:scale:raiseOnExactness:raiseOnOverflow:raiseOnUnderflow:raiseOnDivideByZero:"); + late final _sel_roundingBehavior1 = _registerName1("roundingBehavior"); + late final _sel_setRoundingBehavior_1 = + _registerName1("setRoundingBehavior:"); + void _objc_msgSend_625( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_625( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_625Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_625 = __objc_msgSend_625Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSScanner1 = _getClass1("NSScanner"); + late final _sel_scanLocation1 = _registerName1("scanLocation"); + late final _sel_setScanLocation_1 = _registerName1("setScanLocation:"); + late final _sel_charactersToBeSkipped1 = + _registerName1("charactersToBeSkipped"); + late final _sel_setCharactersToBeSkipped_1 = + _registerName1("setCharactersToBeSkipped:"); + void _objc_msgSend_626( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_626( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_626Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_626 = __objc_msgSend_626Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_caseSensitive1 = _registerName1("caseSensitive"); + late final _sel_setCaseSensitive_1 = _registerName1("setCaseSensitive:"); + late final _sel_scanInt_1 = _registerName1("scanInt:"); + bool _objc_msgSend_627( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_627( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_627Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_627 = __objc_msgSend_627Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanInteger_1 = _registerName1("scanInteger:"); + bool _objc_msgSend_628( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_628( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_628Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_628 = __objc_msgSend_628Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanLongLong_1 = _registerName1("scanLongLong:"); + bool _objc_msgSend_629( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_629( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_629Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_629 = __objc_msgSend_629Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanUnsignedLongLong_1 = + _registerName1("scanUnsignedLongLong:"); + bool _objc_msgSend_630( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_630( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_630Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_630 = __objc_msgSend_630Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanFloat_1 = _registerName1("scanFloat:"); + bool _objc_msgSend_631( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_631( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_631Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_631 = __objc_msgSend_631Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanDouble_1 = _registerName1("scanDouble:"); + bool _objc_msgSend_632( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_632( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_632Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_632 = __objc_msgSend_632Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanHexInt_1 = _registerName1("scanHexInt:"); + bool _objc_msgSend_633( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ) { + return __objc_msgSend_633( + obj, + sel, + result, + ); + } + + late final __objc_msgSend_633Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_633 = __objc_msgSend_633Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_scanHexLongLong_1 = _registerName1("scanHexLongLong:"); + late final _sel_scanHexFloat_1 = _registerName1("scanHexFloat:"); + late final _sel_scanHexDouble_1 = _registerName1("scanHexDouble:"); + late final _sel_scanString_intoString_1 = + _registerName1("scanString:intoString:"); + bool _objc_msgSend_634( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + ffi.Pointer> result, + ) { + return __objc_msgSend_634( + obj, + sel, + string, + result, + ); + } + + late final __objc_msgSend_634Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_634 = __objc_msgSend_634Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_scanCharactersFromSet_intoString_1 = + _registerName1("scanCharactersFromSet:intoString:"); + bool _objc_msgSend_635( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer set1, + ffi.Pointer> result, + ) { + return __objc_msgSend_635( + obj, + sel, + set1, + result, + ); + } + + late final __objc_msgSend_635Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_635 = __objc_msgSend_635Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_scanUpToString_intoString_1 = + _registerName1("scanUpToString:intoString:"); + late final _sel_scanUpToCharactersFromSet_intoString_1 = + _registerName1("scanUpToCharactersFromSet:intoString:"); + late final _sel_isAtEnd1 = _registerName1("isAtEnd"); + late final _sel_scannerWithString_1 = _registerName1("scannerWithString:"); + late final _sel_localizedScannerWithString_1 = + _registerName1("localizedScannerWithString:"); + late final _sel_scanDecimal_1 = _registerName1("scanDecimal:"); + bool _objc_msgSend_636( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer dcm, + ) { + return __objc_msgSend_636( + obj, + sel, + dcm, + ); + } + + late final __objc_msgSend_636Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_636 = __objc_msgSend_636Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSException1 = _getClass1("NSException"); + late final _sel_exceptionWithName_reason_userInfo_1 = + _registerName1("exceptionWithName:reason:userInfo:"); + ffi.Pointer _objc_msgSend_637( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer reason, + ffi.Pointer userInfo, + ) { + return __objc_msgSend_637( + obj, + sel, + name, + reason, + userInfo, + ); + } + + late final __objc_msgSend_637Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_637 = __objc_msgSend_637Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithName_reason_userInfo_1 = + _registerName1("initWithName:reason:userInfo:"); + instancetype _objc_msgSend_638( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aName, + ffi.Pointer aReason, + ffi.Pointer aUserInfo, + ) { + return __objc_msgSend_638( + obj, + sel, + aName, + aReason, + aUserInfo, + ); + } + + late final __objc_msgSend_638Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_638 = __objc_msgSend_638Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_reason1 = _registerName1("reason"); + late final _sel_raise1 = _registerName1("raise"); + late final _sel_raise_format_1 = _registerName1("raise:format:"); + void _objc_msgSend_639( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer format, + ) { + return __objc_msgSend_639( + obj, + sel, + name, + format, + ); + } + + late final __objc_msgSend_639Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_639 = __objc_msgSend_639Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_raise_format_arguments_1 = + _registerName1("raise:format:arguments:"); + void _objc_msgSend_640( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer name, + ffi.Pointer format, + ffi.Pointer argList, + ) { + return __objc_msgSend_640( + obj, + sel, + name, + format, + argList, + ); + } + + late final __objc_msgSend_640Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_640 = __objc_msgSend_640Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSRunLoop1 = _getClass1("NSRunLoop"); + late final _sel_currentRunLoop1 = _registerName1("currentRunLoop"); + ffi.Pointer _objc_msgSend_641( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_641( + obj, + sel, + ); + } + + late final __objc_msgSend_641Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_641 = __objc_msgSend_641Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_mainRunLoop1 = _registerName1("mainRunLoop"); + late final _sel_currentMode1 = _registerName1("currentMode"); + late final _sel_getCFRunLoop1 = _registerName1("getCFRunLoop"); + ffi.Pointer<__CFRunLoop> _objc_msgSend_642( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_642( + obj, + sel, + ); + } + + late final __objc_msgSend_642Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<__CFRunLoop> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_642 = __objc_msgSend_642Ptr.asFunction< + ffi.Pointer<__CFRunLoop> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSTimer1 = _getClass1("NSTimer"); + late final _sel_timerWithTimeInterval_invocation_repeats_1 = + _registerName1("timerWithTimeInterval:invocation:repeats:"); + ffi.Pointer _objc_msgSend_643( + ffi.Pointer obj, + ffi.Pointer sel, + double ti, + ffi.Pointer invocation, + bool yesOrNo, + ) { + return __objc_msgSend_643( + obj, + sel, + ti, + invocation, + yesOrNo, + ); + } + + late final __objc_msgSend_643Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_643 = __objc_msgSend_643Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, double, ffi.Pointer, bool)>(); + + late final _sel_scheduledTimerWithTimeInterval_invocation_repeats_1 = + _registerName1("scheduledTimerWithTimeInterval:invocation:repeats:"); + late final _sel_timerWithTimeInterval_target_selector_userInfo_repeats_1 = + _registerName1("timerWithTimeInterval:target:selector:userInfo:repeats:"); + ffi.Pointer _objc_msgSend_644( + ffi.Pointer obj, + ffi.Pointer sel, + double ti, + ffi.Pointer aTarget, + ffi.Pointer aSelector, + ffi.Pointer userInfo, + bool yesOrNo, + ) { + return __objc_msgSend_644( + obj, + sel, + ti, + aTarget, + aSelector, + userInfo, + yesOrNo, + ); + } + + late final __objc_msgSend_644Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_644 = __objc_msgSend_644Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + double, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool)>(); + + late final _sel_scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_1 = + _registerName1( + "scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:"); + late final _sel_timerWithTimeInterval_repeats_block_1 = + _registerName1("timerWithTimeInterval:repeats:block:"); + ffi.Pointer _objc_msgSend_645( + ffi.Pointer obj, + ffi.Pointer sel, + double interval, + bool repeats, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_645( + obj, + sel, + interval, + repeats, + block, + ); + } + + late final __objc_msgSend_645Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Bool, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_645 = __objc_msgSend_645Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, double, bool, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_scheduledTimerWithTimeInterval_repeats_block_1 = + _registerName1("scheduledTimerWithTimeInterval:repeats:block:"); + late final _sel_initWithFireDate_interval_repeats_block_1 = + _registerName1("initWithFireDate:interval:repeats:block:"); + instancetype _objc_msgSend_646( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + double interval, + bool repeats, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_646( + obj, + sel, + date, + interval, + repeats, + block, + ); + } + + late final __objc_msgSend_646Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Bool, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_646 = __objc_msgSend_646Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, double, bool, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_initWithFireDate_interval_target_selector_userInfo_repeats_1 = + _registerName1( + "initWithFireDate:interval:target:selector:userInfo:repeats:"); + instancetype _objc_msgSend_647( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer date, + double ti, + ffi.Pointer t, + ffi.Pointer s, + ffi.Pointer ui, + bool rep, + ) { + return __objc_msgSend_647( + obj, + sel, + date, + ti, + t, + s, + ui, + rep, + ); + } + + late final __objc_msgSend_647Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_647 = __objc_msgSend_647Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + double, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + bool)>(); + + late final _sel_fire1 = _registerName1("fire"); + late final _sel_fireDate1 = _registerName1("fireDate"); + late final _sel_setFireDate_1 = _registerName1("setFireDate:"); + late final _sel_timeInterval1 = _registerName1("timeInterval"); + late final _sel_tolerance1 = _registerName1("tolerance"); + late final _sel_setTolerance_1 = _registerName1("setTolerance:"); + late final _sel_invalidate1 = _registerName1("invalidate"); + late final _sel_isValid1 = _registerName1("isValid"); + late final _sel_addTimer_forMode_1 = _registerName1("addTimer:forMode:"); + void _objc_msgSend_648( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer timer, + ffi.Pointer mode, + ) { + return __objc_msgSend_648( + obj, + sel, + timer, + mode, + ); + } + + late final __objc_msgSend_648Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_648 = __objc_msgSend_648Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSPort1 = _getClass1("NSPort"); + ffi.Pointer _objc_msgSend_649( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_649( + obj, + sel, + ); + } + + late final __objc_msgSend_649Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_649 = __objc_msgSend_649Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_scheduleInRunLoop_forMode_1 = + _registerName1("scheduleInRunLoop:forMode:"); + void _objc_msgSend_650( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer runLoop, + ffi.Pointer mode, + ) { + return __objc_msgSend_650( + obj, + sel, + runLoop, + mode, + ); + } + + late final __objc_msgSend_650Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_650 = __objc_msgSend_650Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_removeFromRunLoop_forMode_1 = + _registerName1("removeFromRunLoop:forMode:"); + late final _sel_reservedSpaceLength1 = _registerName1("reservedSpaceLength"); + late final _sel_sendBeforeDate_components_from_reserved_1 = + _registerName1("sendBeforeDate:components:from:reserved:"); + bool _objc_msgSend_651( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer limitDate, + ffi.Pointer components, + ffi.Pointer receivePort, + int headerSpaceReserved, + ) { + return __objc_msgSend_651( + obj, + sel, + limitDate, + components, + receivePort, + headerSpaceReserved, + ); + } + + late final __objc_msgSend_651Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_651 = __objc_msgSend_651Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_sendBeforeDate_msgid_components_from_reserved_1 = + _registerName1("sendBeforeDate:msgid:components:from:reserved:"); + bool _objc_msgSend_652( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer limitDate, + int msgID, + ffi.Pointer components, + ffi.Pointer receivePort, + int headerSpaceReserved, + ) { + return __objc_msgSend_652( + obj, + sel, + limitDate, + msgID, + components, + receivePort, + headerSpaceReserved, + ); + } + + late final __objc_msgSend_652Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_652 = __objc_msgSend_652Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _class_NSConnection1 = _getClass1("NSConnection"); + late final _sel_addConnection_toRunLoop_forMode_1 = + _registerName1("addConnection:toRunLoop:forMode:"); + void _objc_msgSend_653( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer conn, + ffi.Pointer runLoop, + ffi.Pointer mode, + ) { + return __objc_msgSend_653( + obj, + sel, + conn, + runLoop, + mode, + ); + } + + late final __objc_msgSend_653Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_653 = __objc_msgSend_653Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeConnection_fromRunLoop_forMode_1 = + _registerName1("removeConnection:fromRunLoop:forMode:"); + late final _sel_addPort_forMode_1 = _registerName1("addPort:forMode:"); + void _objc_msgSend_654( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aPort, + ffi.Pointer mode, + ) { + return __objc_msgSend_654( + obj, + sel, + aPort, + mode, + ); + } + + late final __objc_msgSend_654Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_654 = __objc_msgSend_654Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_removePort_forMode_1 = _registerName1("removePort:forMode:"); + late final _sel_limitDateForMode_1 = _registerName1("limitDateForMode:"); + late final _sel_acceptInputForMode_beforeDate_1 = + _registerName1("acceptInputForMode:beforeDate:"); + void _objc_msgSend_655( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer mode, + ffi.Pointer limitDate, + ) { + return __objc_msgSend_655( + obj, + sel, + mode, + limitDate, + ); + } + + late final __objc_msgSend_655Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_655 = __objc_msgSend_655Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_run1 = _registerName1("run"); + late final _sel_runUntilDate_1 = _registerName1("runUntilDate:"); + late final _sel_runMode_beforeDate_1 = _registerName1("runMode:beforeDate:"); + bool _objc_msgSend_656( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer mode, + ffi.Pointer limitDate, + ) { + return __objc_msgSend_656( + obj, + sel, + mode, + limitDate, + ); + } + + late final __objc_msgSend_656Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_656 = __objc_msgSend_656Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_configureAsServer1 = _registerName1("configureAsServer"); + late final _sel_performInModes_block_1 = + _registerName1("performInModes:block:"); + void _objc_msgSend_657( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer modes, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_657( + obj, + sel, + modes, + block, + ); + } + + late final __objc_msgSend_657Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_657 = __objc_msgSend_657Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_performBlock_1 = _registerName1("performBlock:"); + late final _sel_performSelector_target_argument_order_modes_1 = + _registerName1("performSelector:target:argument:order:modes:"); + void _objc_msgSend_658( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer aSelector, + ffi.Pointer target, + ffi.Pointer arg, + int order, + ffi.Pointer modes, + ) { + return __objc_msgSend_658( + obj, + sel, + aSelector, + target, + arg, + order, + modes, + ); + } + + late final __objc_msgSend_658Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_658 = __objc_msgSend_658Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_cancelPerformSelector_target_argument_1 = + _registerName1("cancelPerformSelector:target:argument:"); + late final _sel_cancelPerformSelectorsWithTarget_1 = + _registerName1("cancelPerformSelectorsWithTarget:"); + late final _class_NSFileHandle1 = _getClass1("NSFileHandle"); + late final _sel_availableData1 = _registerName1("availableData"); + late final _sel_initWithFileDescriptor_closeOnDealloc_1 = + _registerName1("initWithFileDescriptor:closeOnDealloc:"); + instancetype _objc_msgSend_659( + ffi.Pointer obj, + ffi.Pointer sel, + int fd, + bool closeopt, + ) { + return __objc_msgSend_659( + obj, + sel, + fd, + closeopt, + ); + } + + late final __objc_msgSend_659Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Int, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_659 = __objc_msgSend_659Ptr.asFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer, int, bool)>(); + + late final _sel_readDataToEndOfFileAndReturnError_1 = + _registerName1("readDataToEndOfFileAndReturnError:"); + ffi.Pointer _objc_msgSend_660( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> error, + ) { + return __objc_msgSend_660( + obj, + sel, + error, + ); + } + + late final __objc_msgSend_660Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_660 = __objc_msgSend_660Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_readDataUpToLength_error_1 = + _registerName1("readDataUpToLength:error:"); + ffi.Pointer _objc_msgSend_661( + ffi.Pointer obj, + ffi.Pointer sel, + int length, + ffi.Pointer> error, + ) { + return __objc_msgSend_661( + obj, + sel, + length, + error, + ); + } + + late final __objc_msgSend_661Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_661 = __objc_msgSend_661Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer>)>(); + + late final _sel_writeData_error_1 = _registerName1("writeData:error:"); + bool _objc_msgSend_662( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ffi.Pointer> error, + ) { + return __objc_msgSend_662( + obj, + sel, + data, + error, + ); + } + + late final __objc_msgSend_662Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_662 = __objc_msgSend_662Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_getOffset_error_1 = _registerName1("getOffset:error:"); + bool _objc_msgSend_663( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer offsetInFile, + ffi.Pointer> error, + ) { + return __objc_msgSend_663( + obj, + sel, + offsetInFile, + error, + ); + } + + late final __objc_msgSend_663Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_663 = __objc_msgSend_663Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_seekToEndReturningOffset_error_1 = + _registerName1("seekToEndReturningOffset:error:"); + late final _sel_seekToOffset_error_1 = _registerName1("seekToOffset:error:"); + bool _objc_msgSend_664( + ffi.Pointer obj, + ffi.Pointer sel, + int offset, + ffi.Pointer> error, + ) { + return __objc_msgSend_664( + obj, + sel, + offset, + error, + ); + } + + late final __objc_msgSend_664Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLongLong, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_664 = __objc_msgSend_664Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer>)>(); + + late final _sel_truncateAtOffset_error_1 = + _registerName1("truncateAtOffset:error:"); + late final _sel_synchronizeAndReturnError_1 = + _registerName1("synchronizeAndReturnError:"); + late final _sel_closeAndReturnError_1 = + _registerName1("closeAndReturnError:"); + late final _sel_fileHandleWithStandardInput1 = + _registerName1("fileHandleWithStandardInput"); + ffi.Pointer _objc_msgSend_665( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_665( + obj, + sel, + ); + } + + late final __objc_msgSend_665Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_665 = __objc_msgSend_665Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_fileHandleWithStandardOutput1 = + _registerName1("fileHandleWithStandardOutput"); + late final _sel_fileHandleWithStandardError1 = + _registerName1("fileHandleWithStandardError"); + late final _sel_fileHandleWithNullDevice1 = + _registerName1("fileHandleWithNullDevice"); + late final _sel_fileHandleForReadingAtPath_1 = + _registerName1("fileHandleForReadingAtPath:"); + late final _sel_fileHandleForWritingAtPath_1 = + _registerName1("fileHandleForWritingAtPath:"); + late final _sel_fileHandleForUpdatingAtPath_1 = + _registerName1("fileHandleForUpdatingAtPath:"); + late final _sel_fileHandleForReadingFromURL_error_1 = + _registerName1("fileHandleForReadingFromURL:error:"); + instancetype _objc_msgSend_666( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer> error, + ) { + return __objc_msgSend_666( + obj, + sel, + url, + error, + ); + } + + late final __objc_msgSend_666Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_666 = __objc_msgSend_666Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer>)>(); + + late final _sel_fileHandleForWritingToURL_error_1 = + _registerName1("fileHandleForWritingToURL:error:"); + late final _sel_fileHandleForUpdatingURL_error_1 = + _registerName1("fileHandleForUpdatingURL:error:"); + late final _sel_readInBackgroundAndNotifyForModes_1 = + _registerName1("readInBackgroundAndNotifyForModes:"); + late final _sel_readInBackgroundAndNotify1 = + _registerName1("readInBackgroundAndNotify"); + late final _sel_readToEndOfFileInBackgroundAndNotifyForModes_1 = + _registerName1("readToEndOfFileInBackgroundAndNotifyForModes:"); + late final _sel_readToEndOfFileInBackgroundAndNotify1 = + _registerName1("readToEndOfFileInBackgroundAndNotify"); + late final _sel_acceptConnectionInBackgroundAndNotifyForModes_1 = + _registerName1("acceptConnectionInBackgroundAndNotifyForModes:"); + late final _sel_acceptConnectionInBackgroundAndNotify1 = + _registerName1("acceptConnectionInBackgroundAndNotify"); + late final _sel_waitForDataInBackgroundAndNotifyForModes_1 = + _registerName1("waitForDataInBackgroundAndNotifyForModes:"); + late final _sel_waitForDataInBackgroundAndNotify1 = + _registerName1("waitForDataInBackgroundAndNotify"); + late final _sel_readabilityHandler1 = _registerName1("readabilityHandler"); + ffi.Pointer<_ObjCBlock> _objc_msgSend_667( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_667( + obj, + sel, + ); + } + + late final __objc_msgSend_667Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_667 = __objc_msgSend_667Ptr.asFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setReadabilityHandler_1 = + _registerName1("setReadabilityHandler:"); + void _objc_msgSend_668( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> value, + ) { + return __objc_msgSend_668( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_668Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_668 = __objc_msgSend_668Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_writeabilityHandler1 = _registerName1("writeabilityHandler"); + late final _sel_setWriteabilityHandler_1 = + _registerName1("setWriteabilityHandler:"); + late final _sel_initWithFileDescriptor_1 = + _registerName1("initWithFileDescriptor:"); + instancetype _objc_msgSend_669( + ffi.Pointer obj, + ffi.Pointer sel, + int fd, + ) { + return __objc_msgSend_669( + obj, + sel, + fd, + ); + } + + late final __objc_msgSend_669Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Int)>>('objc_msgSend'); + late final __objc_msgSend_669 = __objc_msgSend_669Ptr.asFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_fileDescriptor1 = _registerName1("fileDescriptor"); + late final _sel_readDataToEndOfFile1 = _registerName1("readDataToEndOfFile"); + late final _sel_readDataOfLength_1 = _registerName1("readDataOfLength:"); + late final _sel_writeData_1 = _registerName1("writeData:"); + late final _sel_offsetInFile1 = _registerName1("offsetInFile"); + late final _sel_seekToEndOfFile1 = _registerName1("seekToEndOfFile"); + late final _sel_seekToFileOffset_1 = _registerName1("seekToFileOffset:"); + void _objc_msgSend_670( + ffi.Pointer obj, + ffi.Pointer sel, + int offset, + ) { + return __objc_msgSend_670( + obj, + sel, + offset, + ); + } + + late final __objc_msgSend_670Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLongLong)>>('objc_msgSend'); + late final __objc_msgSend_670 = __objc_msgSend_670Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_truncateFileAtOffset_1 = + _registerName1("truncateFileAtOffset:"); + late final _sel_synchronizeFile1 = _registerName1("synchronizeFile"); + late final _sel_closeFile1 = _registerName1("closeFile"); + late final _class_NSHTTPCookieStorage1 = _getClass1("NSHTTPCookieStorage"); + late final _sel_sharedHTTPCookieStorage1 = + _registerName1("sharedHTTPCookieStorage"); + ffi.Pointer _objc_msgSend_671( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_671( + obj, + sel, + ); + } + + late final __objc_msgSend_671Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_671 = __objc_msgSend_671Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_sharedCookieStorageForGroupContainerIdentifier_1 = + _registerName1("sharedCookieStorageForGroupContainerIdentifier:"); + ffi.Pointer _objc_msgSend_672( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer identifier, + ) { + return __objc_msgSend_672( + obj, + sel, + identifier, + ); + } + + late final __objc_msgSend_672Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_672 = __objc_msgSend_672Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_cookies1 = _registerName1("cookies"); + late final _class_NSHTTPCookie1 = _getClass1("NSHTTPCookie"); + late final _sel_initWithProperties_1 = _registerName1("initWithProperties:"); + late final _sel_cookieWithProperties_1 = + _registerName1("cookieWithProperties:"); + ffi.Pointer _objc_msgSend_673( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer properties, + ) { + return __objc_msgSend_673( + obj, + sel, + properties, + ); + } + + late final __objc_msgSend_673Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_673 = __objc_msgSend_673Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_requestHeaderFieldsWithCookies_1 = + _registerName1("requestHeaderFieldsWithCookies:"); + late final _sel_cookiesWithResponseHeaderFields_forURL_1 = + _registerName1("cookiesWithResponseHeaderFields:forURL:"); + ffi.Pointer _objc_msgSend_674( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer headerFields, + ffi.Pointer URL, + ) { + return __objc_msgSend_674( + obj, + sel, + headerFields, + URL, + ); + } + + late final __objc_msgSend_674Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_674 = __objc_msgSend_674Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_properties1 = _registerName1("properties"); + late final _sel_value1 = _registerName1("value"); + late final _sel_expiresDate1 = _registerName1("expiresDate"); + late final _sel_isSessionOnly1 = _registerName1("isSessionOnly"); + late final _sel_isSecure1 = _registerName1("isSecure"); + late final _sel_isHTTPOnly1 = _registerName1("isHTTPOnly"); + late final _sel_comment1 = _registerName1("comment"); + late final _sel_commentURL1 = _registerName1("commentURL"); + late final _sel_portList1 = _registerName1("portList"); + late final _sel_sameSitePolicy1 = _registerName1("sameSitePolicy"); + late final _sel_setCookie_1 = _registerName1("setCookie:"); + void _objc_msgSend_675( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer cookie, + ) { + return __objc_msgSend_675( + obj, + sel, + cookie, + ); + } + + late final __objc_msgSend_675Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_675 = __objc_msgSend_675Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_deleteCookie_1 = _registerName1("deleteCookie:"); + late final _sel_removeCookiesSinceDate_1 = + _registerName1("removeCookiesSinceDate:"); + late final _sel_cookiesForURL_1 = _registerName1("cookiesForURL:"); + late final _sel_setCookies_forURL_mainDocumentURL_1 = + _registerName1("setCookies:forURL:mainDocumentURL:"); + void _objc_msgSend_676( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer cookies, + ffi.Pointer URL, + ffi.Pointer mainDocumentURL, + ) { + return __objc_msgSend_676( + obj, + sel, + cookies, + URL, + mainDocumentURL, + ); + } + + late final __objc_msgSend_676Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_676 = __objc_msgSend_676Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_cookieAcceptPolicy1 = _registerName1("cookieAcceptPolicy"); + int _objc_msgSend_677( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_677( + obj, + sel, + ); + } + + late final __objc_msgSend_677Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_677 = __objc_msgSend_677Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setCookieAcceptPolicy_1 = + _registerName1("setCookieAcceptPolicy:"); + void _objc_msgSend_678( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_678( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_678Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_678 = __objc_msgSend_678Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_sortedCookiesUsingDescriptors_1 = + _registerName1("sortedCookiesUsingDescriptors:"); + late final _class_NSURLSessionTask1 = _getClass1("NSURLSessionTask"); + late final _sel_taskIdentifier1 = _registerName1("taskIdentifier"); + late final _class_NSURLRequest1 = _getClass1("NSURLRequest"); + late final _sel_requestWithURL_1 = _registerName1("requestWithURL:"); + late final _sel_supportsSecureCoding1 = + _registerName1("supportsSecureCoding"); + late final _sel_requestWithURL_cachePolicy_timeoutInterval_1 = + _registerName1("requestWithURL:cachePolicy:timeoutInterval:"); + instancetype _objc_msgSend_679( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer URL, + int cachePolicy, + double timeoutInterval, + ) { + return __objc_msgSend_679( + obj, + sel, + URL, + cachePolicy, + timeoutInterval, + ); + } + + late final __objc_msgSend_679Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32, ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_679 = __objc_msgSend_679Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, double)>(); + + late final _sel_initWithURL_cachePolicy_timeoutInterval_1 = + _registerName1("initWithURL:cachePolicy:timeoutInterval:"); + late final _sel_URL1 = _registerName1("URL"); + late final _sel_cachePolicy1 = _registerName1("cachePolicy"); + int _objc_msgSend_680( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_680( + obj, + sel, + ); + } + + late final __objc_msgSend_680Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_680 = __objc_msgSend_680Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_timeoutInterval1 = _registerName1("timeoutInterval"); + late final _sel_mainDocumentURL1 = _registerName1("mainDocumentURL"); + late final _sel_networkServiceType1 = _registerName1("networkServiceType"); + int _objc_msgSend_681( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_681( + obj, + sel, + ); + } + + late final __objc_msgSend_681Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_681 = __objc_msgSend_681Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_allowsCellularAccess1 = + _registerName1("allowsCellularAccess"); + late final _sel_allowsExpensiveNetworkAccess1 = + _registerName1("allowsExpensiveNetworkAccess"); + late final _sel_allowsConstrainedNetworkAccess1 = + _registerName1("allowsConstrainedNetworkAccess"); + late final _sel_assumesHTTP3Capable1 = _registerName1("assumesHTTP3Capable"); + late final _sel_attribution1 = _registerName1("attribution"); + int _objc_msgSend_682( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_682( + obj, + sel, + ); + } + + late final __objc_msgSend_682Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_682 = __objc_msgSend_682Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_requiresDNSSECValidation1 = + _registerName1("requiresDNSSECValidation"); + late final _sel_HTTPMethod1 = _registerName1("HTTPMethod"); + late final _sel_allHTTPHeaderFields1 = _registerName1("allHTTPHeaderFields"); + late final _sel_valueForHTTPHeaderField_1 = + _registerName1("valueForHTTPHeaderField:"); + late final _sel_HTTPBody1 = _registerName1("HTTPBody"); + late final _class_NSInputStream1 = _getClass1("NSInputStream"); + late final _class_NSStream1 = _getClass1("NSStream"); + late final _sel_open1 = _registerName1("open"); + late final _sel_close1 = _registerName1("close"); + late final _sel_streamStatus1 = _registerName1("streamStatus"); + int _objc_msgSend_683( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_683( + obj, + sel, + ); + } + + late final __objc_msgSend_683Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_683 = __objc_msgSend_683Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_streamError1 = _registerName1("streamError"); + late final _class_NSOutputStream1 = _getClass1("NSOutputStream"); + late final _sel_write_maxLength_1 = _registerName1("write:maxLength:"); + int _objc_msgSend_684( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + int len, + ) { + return __objc_msgSend_684( + obj, + sel, + buffer, + len, + ); + } + + late final __objc_msgSend_684Ptr = _lookup< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_684 = __objc_msgSend_684Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_hasSpaceAvailable1 = _registerName1("hasSpaceAvailable"); + late final _sel_initToMemory1 = _registerName1("initToMemory"); + late final _sel_initToBuffer_capacity_1 = + _registerName1("initToBuffer:capacity:"); + instancetype _objc_msgSend_685( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer buffer, + int capacity, + ) { + return __objc_msgSend_685( + obj, + sel, + buffer, + capacity, + ); + } + + late final __objc_msgSend_685Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_685 = __objc_msgSend_685Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_initWithURL_append_1 = _registerName1("initWithURL:append:"); + instancetype _objc_msgSend_686( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + bool shouldAppend, + ) { + return __objc_msgSend_686( + obj, + sel, + url, + shouldAppend, + ); + } + + late final __objc_msgSend_686Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_686 = __objc_msgSend_686Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_initToFileAtPath_append_1 = + _registerName1("initToFileAtPath:append:"); + late final _sel_outputStreamToMemory1 = + _registerName1("outputStreamToMemory"); + late final _sel_outputStreamToBuffer_capacity_1 = + _registerName1("outputStreamToBuffer:capacity:"); + late final _sel_outputStreamToFileAtPath_append_1 = + _registerName1("outputStreamToFileAtPath:append:"); + late final _sel_outputStreamWithURL_append_1 = + _registerName1("outputStreamWithURL:append:"); + late final _sel_getStreamsToHostWithName_port_inputStream_outputStream_1 = + _registerName1("getStreamsToHostWithName:port:inputStream:outputStream:"); + void _objc_msgSend_687( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer hostname, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream, + ) { + return __objc_msgSend_687( + obj, + sel, + hostname, + port, + inputStream, + outputStream, + ); + } + + late final __objc_msgSend_687Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_687 = __objc_msgSend_687Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _class_NSHost1 = _getClass1("NSHost"); + late final _sel_getStreamsToHost_port_inputStream_outputStream_1 = + _registerName1("getStreamsToHost:port:inputStream:outputStream:"); + void _objc_msgSend_688( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer host, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream, + ) { + return __objc_msgSend_688( + obj, + sel, + host, + port, + inputStream, + outputStream, + ); + } + + late final __objc_msgSend_688Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_688 = __objc_msgSend_688Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_getBoundStreamsWithBufferSize_inputStream_outputStream_1 = + _registerName1("getBoundStreamsWithBufferSize:inputStream:outputStream:"); + void _objc_msgSend_689( + ffi.Pointer obj, + ffi.Pointer sel, + int bufferSize, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream, + ) { + return __objc_msgSend_689( + obj, + sel, + bufferSize, + inputStream, + outputStream, + ); + } + + late final __objc_msgSend_689Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_689 = __objc_msgSend_689Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_read_maxLength_1 = _registerName1("read:maxLength:"); + late final _sel_getBuffer_length_1 = _registerName1("getBuffer:length:"); + bool _objc_msgSend_690( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> buffer, + ffi.Pointer len, + ) { + return __objc_msgSend_690( + obj, + sel, + buffer, + len, + ); + } + + late final __objc_msgSend_690Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_690 = __objc_msgSend_690Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer)>(); + + late final _sel_hasBytesAvailable1 = _registerName1("hasBytesAvailable"); + late final _sel_initWithFileAtPath_1 = _registerName1("initWithFileAtPath:"); + late final _sel_inputStreamWithData_1 = + _registerName1("inputStreamWithData:"); + late final _sel_inputStreamWithFileAtPath_1 = + _registerName1("inputStreamWithFileAtPath:"); + late final _sel_inputStreamWithURL_1 = _registerName1("inputStreamWithURL:"); + late final _sel_HTTPBodyStream1 = _registerName1("HTTPBodyStream"); + ffi.Pointer _objc_msgSend_691( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_691( + obj, + sel, + ); + } + + late final __objc_msgSend_691Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_691 = __objc_msgSend_691Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_HTTPShouldHandleCookies1 = + _registerName1("HTTPShouldHandleCookies"); + late final _sel_HTTPShouldUsePipelining1 = + _registerName1("HTTPShouldUsePipelining"); + late final _sel_originalRequest1 = _registerName1("originalRequest"); + ffi.Pointer _objc_msgSend_692( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_692( + obj, + sel, + ); + } + + late final __objc_msgSend_692Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_692 = __objc_msgSend_692Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_currentRequest1 = _registerName1("currentRequest"); + late final _class_NSURLResponse1 = _getClass1("NSURLResponse"); + late final _sel_initWithURL_MIMEType_expectedContentLength_textEncodingName_1 = + _registerName1( + "initWithURL:MIMEType:expectedContentLength:textEncodingName:"); + instancetype _objc_msgSend_693( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer URL, + ffi.Pointer MIMEType, + int length, + ffi.Pointer name, + ) { + return __objc_msgSend_693( + obj, + sel, + URL, + MIMEType, + length, + name, + ); + } + + late final __objc_msgSend_693Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_693 = __objc_msgSend_693Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_MIMEType1 = _registerName1("MIMEType"); + late final _sel_expectedContentLength1 = + _registerName1("expectedContentLength"); + late final _sel_textEncodingName1 = _registerName1("textEncodingName"); + late final _sel_suggestedFilename1 = _registerName1("suggestedFilename"); + late final _sel_response1 = _registerName1("response"); + ffi.Pointer _objc_msgSend_694( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_694( + obj, + sel, + ); + } + + late final __objc_msgSend_694Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_694 = __objc_msgSend_694Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_progress1 = _registerName1("progress"); + late final _sel_earliestBeginDate1 = _registerName1("earliestBeginDate"); + late final _sel_setEarliestBeginDate_1 = + _registerName1("setEarliestBeginDate:"); + late final _sel_countOfBytesClientExpectsToSend1 = + _registerName1("countOfBytesClientExpectsToSend"); + late final _sel_setCountOfBytesClientExpectsToSend_1 = + _registerName1("setCountOfBytesClientExpectsToSend:"); + late final _sel_countOfBytesClientExpectsToReceive1 = + _registerName1("countOfBytesClientExpectsToReceive"); + late final _sel_setCountOfBytesClientExpectsToReceive_1 = + _registerName1("setCountOfBytesClientExpectsToReceive:"); + late final _sel_countOfBytesSent1 = _registerName1("countOfBytesSent"); + late final _sel_countOfBytesReceived1 = + _registerName1("countOfBytesReceived"); + late final _sel_countOfBytesExpectedToSend1 = + _registerName1("countOfBytesExpectedToSend"); + late final _sel_countOfBytesExpectedToReceive1 = + _registerName1("countOfBytesExpectedToReceive"); + late final _sel_taskDescription1 = _registerName1("taskDescription"); + late final _sel_setTaskDescription_1 = _registerName1("setTaskDescription:"); + late final _sel_state1 = _registerName1("state"); + int _objc_msgSend_695( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_695( + obj, + sel, + ); + } + + late final __objc_msgSend_695Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_695 = __objc_msgSend_695Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_suspend1 = _registerName1("suspend"); + late final _sel_priority1 = _registerName1("priority"); + late final _sel_setPriority_1 = _registerName1("setPriority:"); + void _objc_msgSend_696( + ffi.Pointer obj, + ffi.Pointer sel, + double value, + ) { + return __objc_msgSend_696( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_696Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Float)>>('objc_msgSend'); + late final __objc_msgSend_696 = __objc_msgSend_696Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, double)>(); + + late final _sel_prefersIncrementalDelivery1 = + _registerName1("prefersIncrementalDelivery"); + late final _sel_setPrefersIncrementalDelivery_1 = + _registerName1("setPrefersIncrementalDelivery:"); + late final _sel_storeCookies_forTask_1 = + _registerName1("storeCookies:forTask:"); + void _objc_msgSend_697( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer cookies, + ffi.Pointer task, + ) { + return __objc_msgSend_697( + obj, + sel, + cookies, + task, + ); + } + + late final __objc_msgSend_697Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_697 = __objc_msgSend_697Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_getCookiesForTask_completionHandler_1 = + _registerName1("getCookiesForTask:completionHandler:"); + void _objc_msgSend_698( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer task, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_698( + obj, + sel, + task, + completionHandler, + ); + } + + late final __objc_msgSend_698Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_698 = __objc_msgSend_698Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _class_NSIndexPath1 = _getClass1("NSIndexPath"); + late final _sel_indexPathWithIndex_1 = _registerName1("indexPathWithIndex:"); + late final _sel_indexPathWithIndexes_length_1 = + _registerName1("indexPathWithIndexes:length:"); + instancetype _objc_msgSend_699( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + int length, + ) { + return __objc_msgSend_699( + obj, + sel, + indexes, + length, + ); + } + + late final __objc_msgSend_699Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_699 = __objc_msgSend_699Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int)>(); + + late final _sel_initWithIndexes_length_1 = + _registerName1("initWithIndexes:length:"); + late final _sel_indexPathByAddingIndex_1 = + _registerName1("indexPathByAddingIndex:"); + ffi.Pointer _objc_msgSend_700( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ) { + return __objc_msgSend_700( + obj, + sel, + index, + ); + } + + late final __objc_msgSend_700Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_700 = __objc_msgSend_700Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_indexPathByRemovingLastIndex1 = + _registerName1("indexPathByRemovingLastIndex"); + ffi.Pointer _objc_msgSend_701( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_701( + obj, + sel, + ); + } + + late final __objc_msgSend_701Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_701 = __objc_msgSend_701Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_indexAtPosition_1 = _registerName1("indexAtPosition:"); + late final _sel_getIndexes_range_1 = _registerName1("getIndexes:range:"); + void _objc_msgSend_702( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + _NSRange positionRange, + ) { + return __objc_msgSend_702( + obj, + sel, + indexes, + positionRange, + ); + } + + late final __objc_msgSend_702Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_702 = __objc_msgSend_702Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, _NSRange)>(); + + int _objc_msgSend_703( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer otherObject, + ) { + return __objc_msgSend_703( + obj, + sel, + otherObject, + ); + } + + late final __objc_msgSend_703Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_703 = __objc_msgSend_703Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_getIndexes_1 = _registerName1("getIndexes:"); + void _objc_msgSend_704( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer indexes, + ) { + return __objc_msgSend_704( + obj, + sel, + indexes, + ); + } + + late final __objc_msgSend_704Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_704 = __objc_msgSend_704Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSInflectionRule1 = _getClass1("NSInflectionRule"); + late final _sel_automaticRule1 = _registerName1("automaticRule"); + ffi.Pointer _objc_msgSend_705( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_705( + obj, + sel, + ); + } + + late final __objc_msgSend_705Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_705 = __objc_msgSend_705Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_canInflectLanguage_1 = _registerName1("canInflectLanguage:"); + late final _sel_canInflectPreferredLocalization1 = + _registerName1("canInflectPreferredLocalization"); + late final _class_NSMorphology1 = _getClass1("NSMorphology"); + late final _sel_grammaticalGender1 = _registerName1("grammaticalGender"); + int _objc_msgSend_706( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_706( + obj, + sel, + ); + } + + late final __objc_msgSend_706Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_706 = __objc_msgSend_706Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setGrammaticalGender_1 = + _registerName1("setGrammaticalGender:"); + void _objc_msgSend_707( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_707( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_707Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_707 = __objc_msgSend_707Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_partOfSpeech1 = _registerName1("partOfSpeech"); + int _objc_msgSend_708( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_708( + obj, + sel, + ); + } + + late final __objc_msgSend_708Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_708 = __objc_msgSend_708Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setPartOfSpeech_1 = _registerName1("setPartOfSpeech:"); + void _objc_msgSend_709( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_709( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_709Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_709 = __objc_msgSend_709Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_number1 = _registerName1("number"); + int _objc_msgSend_710( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_710( + obj, + sel, + ); + } + + late final __objc_msgSend_710Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_710 = __objc_msgSend_710Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setNumber_1 = _registerName1("setNumber:"); + void _objc_msgSend_711( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_711( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_711Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_711 = __objc_msgSend_711Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _class_NSMorphologyCustomPronoun1 = + _getClass1("NSMorphologyCustomPronoun"); + late final _sel_isSupportedForLanguage_1 = + _registerName1("isSupportedForLanguage:"); + late final _sel_requiredKeysForLanguage_1 = + _registerName1("requiredKeysForLanguage:"); + late final _sel_subjectForm1 = _registerName1("subjectForm"); + late final _sel_setSubjectForm_1 = _registerName1("setSubjectForm:"); + late final _sel_objectForm1 = _registerName1("objectForm"); + late final _sel_setObjectForm_1 = _registerName1("setObjectForm:"); + late final _sel_possessiveForm1 = _registerName1("possessiveForm"); + late final _sel_setPossessiveForm_1 = _registerName1("setPossessiveForm:"); + late final _sel_possessiveAdjectiveForm1 = + _registerName1("possessiveAdjectiveForm"); + late final _sel_setPossessiveAdjectiveForm_1 = + _registerName1("setPossessiveAdjectiveForm:"); + late final _sel_reflexiveForm1 = _registerName1("reflexiveForm"); + late final _sel_setReflexiveForm_1 = _registerName1("setReflexiveForm:"); + late final _sel_customPronounForLanguage_1 = + _registerName1("customPronounForLanguage:"); + ffi.Pointer _objc_msgSend_712( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer language, + ) { + return __objc_msgSend_712( + obj, + sel, + language, + ); + } + + late final __objc_msgSend_712Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_712 = __objc_msgSend_712Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setCustomPronoun_forLanguage_error_1 = + _registerName1("setCustomPronoun:forLanguage:error:"); + bool _objc_msgSend_713( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer features, + ffi.Pointer language, + ffi.Pointer> error, + ) { + return __objc_msgSend_713( + obj, + sel, + features, + language, + error, + ); + } + + late final __objc_msgSend_713Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_713 = __objc_msgSend_713Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_isUnspecified1 = _registerName1("isUnspecified"); + late final _sel_userMorphology1 = _registerName1("userMorphology"); + ffi.Pointer _objc_msgSend_714( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_714( + obj, + sel, + ); + } + + late final __objc_msgSend_714Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_714 = __objc_msgSend_714Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSOperationQueue1 = _getClass1("NSOperationQueue"); + late final _class_NSOperation1 = _getClass1("NSOperation"); + late final _sel_isConcurrent1 = _registerName1("isConcurrent"); + late final _sel_isAsynchronous1 = _registerName1("isAsynchronous"); + late final _sel_isReady1 = _registerName1("isReady"); + late final _sel_addDependency_1 = _registerName1("addDependency:"); + void _objc_msgSend_715( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer op, + ) { + return __objc_msgSend_715( + obj, + sel, + op, + ); + } + + late final __objc_msgSend_715Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_715 = __objc_msgSend_715Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeDependency_1 = _registerName1("removeDependency:"); + late final _sel_dependencies1 = _registerName1("dependencies"); + late final _sel_queuePriority1 = _registerName1("queuePriority"); + int _objc_msgSend_716( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_716( + obj, + sel, + ); + } + + late final __objc_msgSend_716Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_716 = __objc_msgSend_716Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setQueuePriority_1 = _registerName1("setQueuePriority:"); + void _objc_msgSend_717( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_717( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_717Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_717 = __objc_msgSend_717Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_completionBlock1 = _registerName1("completionBlock"); + late final _sel_setCompletionBlock_1 = _registerName1("setCompletionBlock:"); + late final _sel_waitUntilFinished1 = _registerName1("waitUntilFinished"); + late final _sel_addOperation_1 = _registerName1("addOperation:"); + late final _sel_addOperations_waitUntilFinished_1 = + _registerName1("addOperations:waitUntilFinished:"); + void _objc_msgSend_718( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer ops, + bool wait, + ) { + return __objc_msgSend_718( + obj, + sel, + ops, + wait, + ); + } + + late final __objc_msgSend_718Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_718 = __objc_msgSend_718Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool)>(); + + late final _sel_addOperationWithBlock_1 = + _registerName1("addOperationWithBlock:"); + late final _sel_addBarrierBlock_1 = _registerName1("addBarrierBlock:"); + late final _sel_maxConcurrentOperationCount1 = + _registerName1("maxConcurrentOperationCount"); + late final _sel_setMaxConcurrentOperationCount_1 = + _registerName1("setMaxConcurrentOperationCount:"); + late final _sel_isSuspended1 = _registerName1("isSuspended"); + late final _sel_setSuspended_1 = _registerName1("setSuspended:"); + late final _sel_underlyingQueue1 = _registerName1("underlyingQueue"); + ffi.Pointer _objc_msgSend_719( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_719( + obj, + sel, + ); + } + + late final __objc_msgSend_719Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_719 = __objc_msgSend_719Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setUnderlyingQueue_1 = _registerName1("setUnderlyingQueue:"); + void _objc_msgSend_720( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_720( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_720Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_720 = __objc_msgSend_720Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_cancelAllOperations1 = _registerName1("cancelAllOperations"); + late final _sel_waitUntilAllOperationsAreFinished1 = + _registerName1("waitUntilAllOperationsAreFinished"); + late final _sel_currentQueue1 = _registerName1("currentQueue"); + ffi.Pointer _objc_msgSend_721( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_721( + obj, + sel, + ); + } + + late final __objc_msgSend_721Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_721 = __objc_msgSend_721Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_mainQueue1 = _registerName1("mainQueue"); + late final _sel_operations1 = _registerName1("operations"); + late final _sel_operationCount1 = _registerName1("operationCount"); + late final _class_NSPointerArray1 = _getClass1("NSPointerArray"); + late final _sel_initWithOptions_1 = _registerName1("initWithOptions:"); + instancetype _objc_msgSend_722( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ) { + return __objc_msgSend_722( + obj, + sel, + options, + ); + } + + late final __objc_msgSend_722Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_722 = __objc_msgSend_722Ptr.asFunction< + instancetype Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _class_NSPointerFunctions1 = _getClass1("NSPointerFunctions"); + late final _sel_pointerFunctionsWithOptions_1 = + _registerName1("pointerFunctionsWithOptions:"); + ffi.Pointer _objc_msgSend_723( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ) { + return __objc_msgSend_723( + obj, + sel, + options, + ); + } + + late final __objc_msgSend_723Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_723 = __objc_msgSend_723Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_hashFunction1 = _registerName1("hashFunction"); + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>> + _objc_msgSend_724( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_724( + obj, + sel, + ); + } + + late final __objc_msgSend_724Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + Function(ffi.Pointer, ffi.Pointer)>>( + 'objc_msgSend'); + late final __objc_msgSend_724 = __objc_msgSend_724Ptr.asFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setHashFunction_1 = _registerName1("setHashFunction:"); + void _objc_msgSend_725( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + value, + ) { + return __objc_msgSend_725( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_725Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>)>>( + 'objc_msgSend'); + late final __objc_msgSend_725 = __objc_msgSend_725Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>)>(); + + late final _sel_isEqualFunction1 = _registerName1("isEqualFunction"); + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>> + _objc_msgSend_726( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_726( + obj, + sel, + ); + } + + late final __objc_msgSend_726Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + Function(ffi.Pointer, ffi.Pointer)>>( + 'objc_msgSend'); + late final __objc_msgSend_726 = __objc_msgSend_726Ptr.asFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setIsEqualFunction_1 = _registerName1("setIsEqualFunction:"); + void _objc_msgSend_727( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + value, + ) { + return __objc_msgSend_727( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_727Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>)>>( + 'objc_msgSend'); + late final __objc_msgSend_727 = __objc_msgSend_727Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>)>(); + + late final _sel_sizeFunction1 = _registerName1("sizeFunction"); + ffi.Pointer< + ffi.NativeFunction)>> + _objc_msgSend_728( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_728( + obj, + sel, + ); + } + + late final __objc_msgSend_728Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>> + Function(ffi.Pointer, ffi.Pointer)>>( + 'objc_msgSend'); + late final __objc_msgSend_728 = __objc_msgSend_728Ptr.asFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>> + Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setSizeFunction_1 = _registerName1("setSizeFunction:"); + void _objc_msgSend_729( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>> + value, + ) { + return __objc_msgSend_729( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_729Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>('objc_msgSend'); + late final __objc_msgSend_729 = __objc_msgSend_729Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>(); + + late final _sel_descriptionFunction1 = _registerName1("descriptionFunction"); + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer)>> + _objc_msgSend_730( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_730( + obj, + sel, + ); + } + + late final __objc_msgSend_730Ptr = + _lookup< + ffi.NativeFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer)>> + Function(ffi.Pointer, ffi.Pointer)>>( + 'objc_msgSend'); + late final __objc_msgSend_730 = __objc_msgSend_730Ptr.asFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer)>> + Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setDescriptionFunction_1 = + _registerName1("setDescriptionFunction:"); + void _objc_msgSend_731( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer)>> + value, + ) { + return __objc_msgSend_731( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_731Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer)>>)>>('objc_msgSend'); + late final __objc_msgSend_731 = __objc_msgSend_731Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer)>>)>(); + + late final _sel_relinquishFunction1 = _registerName1("relinquishFunction"); + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>> + _objc_msgSend_732( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_732( + obj, + sel, + ); + } + + late final __objc_msgSend_732Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + Function(ffi.Pointer, ffi.Pointer)>>( + 'objc_msgSend'); + late final __objc_msgSend_732 = __objc_msgSend_732Ptr.asFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setRelinquishFunction_1 = + _registerName1("setRelinquishFunction:"); + void _objc_msgSend_733( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + value, + ) { + return __objc_msgSend_733( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_733Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>)>>( + 'objc_msgSend'); + late final __objc_msgSend_733 = __objc_msgSend_733Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>>)>(); + + late final _sel_acquireFunction1 = _registerName1("acquireFunction"); + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>, + ffi.Bool)>> _objc_msgSend_734( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_734( + obj, + sel, + ); + } + + late final __objc_msgSend_734Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>, + ffi.Bool)>> + Function(ffi.Pointer, ffi.Pointer)>>( + 'objc_msgSend'); + late final __objc_msgSend_734 = __objc_msgSend_734Ptr.asFunction< + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>, + ffi.Bool)>> + Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setAcquireFunction_1 = _registerName1("setAcquireFunction:"); + void _objc_msgSend_735( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>, + ffi.Bool)>> + value, + ) { + return __objc_msgSend_735( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_735Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>, + ffi.Bool)>>)>>('objc_msgSend'); + late final __objc_msgSend_735 = __objc_msgSend_735Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>, + ffi.Bool)>>)>(); + + late final _sel_usesStrongWriteBarrier1 = + _registerName1("usesStrongWriteBarrier"); + late final _sel_setUsesStrongWriteBarrier_1 = + _registerName1("setUsesStrongWriteBarrier:"); + late final _sel_usesWeakReadAndWriteBarriers1 = + _registerName1("usesWeakReadAndWriteBarriers"); + late final _sel_setUsesWeakReadAndWriteBarriers_1 = + _registerName1("setUsesWeakReadAndWriteBarriers:"); + late final _sel_initWithPointerFunctions_1 = + _registerName1("initWithPointerFunctions:"); + instancetype _objc_msgSend_736( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer functions, + ) { + return __objc_msgSend_736( + obj, + sel, + functions, + ); + } + + late final __objc_msgSend_736Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_736 = __objc_msgSend_736Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_pointerArrayWithOptions_1 = + _registerName1("pointerArrayWithOptions:"); + ffi.Pointer _objc_msgSend_737( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ) { + return __objc_msgSend_737( + obj, + sel, + options, + ); + } + + late final __objc_msgSend_737Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_737 = __objc_msgSend_737Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_pointerArrayWithPointerFunctions_1 = + _registerName1("pointerArrayWithPointerFunctions:"); + ffi.Pointer _objc_msgSend_738( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer functions, + ) { + return __objc_msgSend_738( + obj, + sel, + functions, + ); + } + + late final __objc_msgSend_738Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_738 = __objc_msgSend_738Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_pointerFunctions1 = _registerName1("pointerFunctions"); + ffi.Pointer _objc_msgSend_739( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_739( + obj, + sel, + ); + } + + late final __objc_msgSend_739Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_739 = __objc_msgSend_739Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_pointerAtIndex_1 = _registerName1("pointerAtIndex:"); + ffi.Pointer _objc_msgSend_740( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ) { + return __objc_msgSend_740( + obj, + sel, + index, + ); + } + + late final __objc_msgSend_740Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.UnsignedLong)>>('objc_msgSend'); + late final __objc_msgSend_740 = __objc_msgSend_740Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_addPointer_1 = _registerName1("addPointer:"); + late final _sel_removePointerAtIndex_1 = + _registerName1("removePointerAtIndex:"); + late final _sel_insertPointer_atIndex_1 = + _registerName1("insertPointer:atIndex:"); + late final _sel_replacePointerAtIndex_withPointer_1 = + _registerName1("replacePointerAtIndex:withPointer:"); + void _objc_msgSend_741( + ffi.Pointer obj, + ffi.Pointer sel, + int index, + ffi.Pointer item, + ) { + return __objc_msgSend_741( + obj, + sel, + index, + item, + ); + } + + late final __objc_msgSend_741Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedLong, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_741 = __objc_msgSend_741Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_compact1 = _registerName1("compact"); + late final _sel_setCount_1 = _registerName1("setCount:"); + late final _sel_pointerArrayWithStrongObjects1 = + _registerName1("pointerArrayWithStrongObjects"); + late final _sel_pointerArrayWithWeakObjects1 = + _registerName1("pointerArrayWithWeakObjects"); + late final _sel_strongObjectsPointerArray1 = + _registerName1("strongObjectsPointerArray"); + ffi.Pointer _objc_msgSend_742( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_742( + obj, + sel, + ); + } + + late final __objc_msgSend_742Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_742 = __objc_msgSend_742Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_weakObjectsPointerArray1 = + _registerName1("weakObjectsPointerArray"); + late final _class_NSProcessInfo1 = _getClass1("NSProcessInfo"); + late final _sel_processInfo1 = _registerName1("processInfo"); + ffi.Pointer _objc_msgSend_743( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_743( + obj, + sel, + ); + } + + late final __objc_msgSend_743Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_743 = __objc_msgSend_743Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_environment1 = _registerName1("environment"); + late final _sel_arguments1 = _registerName1("arguments"); + late final _sel_hostName1 = _registerName1("hostName"); + late final _sel_processName1 = _registerName1("processName"); + late final _sel_setProcessName_1 = _registerName1("setProcessName:"); + late final _sel_processIdentifier1 = _registerName1("processIdentifier"); + late final _sel_globallyUniqueString1 = + _registerName1("globallyUniqueString"); + late final _sel_operatingSystem1 = _registerName1("operatingSystem"); + late final _sel_operatingSystemName1 = _registerName1("operatingSystemName"); + late final _sel_operatingSystemVersionString1 = + _registerName1("operatingSystemVersionString"); + late final _sel_operatingSystemVersion1 = + _registerName1("operatingSystemVersion"); + NSOperatingSystemVersion _objc_msgSend_744( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_744( + obj, + sel, + ); + } + + late final __objc_msgSend_744Ptr = _lookup< + ffi.NativeFunction< + NSOperatingSystemVersion Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_744 = __objc_msgSend_744Ptr.asFunction< + NSOperatingSystemVersion Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_processorCount1 = _registerName1("processorCount"); + late final _sel_activeProcessorCount1 = + _registerName1("activeProcessorCount"); + late final _sel_physicalMemory1 = _registerName1("physicalMemory"); + late final _sel_isOperatingSystemAtLeastVersion_1 = + _registerName1("isOperatingSystemAtLeastVersion:"); + bool _objc_msgSend_745( + ffi.Pointer obj, + ffi.Pointer sel, + NSOperatingSystemVersion version, + ) { + return __objc_msgSend_745( + obj, + sel, + version, + ); + } + + late final __objc_msgSend_745Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + NSOperatingSystemVersion)>>('objc_msgSend'); + late final __objc_msgSend_745 = __objc_msgSend_745Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + NSOperatingSystemVersion)>(); + + late final _sel_systemUptime1 = _registerName1("systemUptime"); + late final _sel_disableSuddenTermination1 = + _registerName1("disableSuddenTermination"); + late final _sel_enableSuddenTermination1 = + _registerName1("enableSuddenTermination"); + late final _sel_disableAutomaticTermination_1 = + _registerName1("disableAutomaticTermination:"); + late final _sel_enableAutomaticTermination_1 = + _registerName1("enableAutomaticTermination:"); + late final _sel_automaticTerminationSupportEnabled1 = + _registerName1("automaticTerminationSupportEnabled"); + late final _sel_setAutomaticTerminationSupportEnabled_1 = + _registerName1("setAutomaticTerminationSupportEnabled:"); + late final _sel_beginActivityWithOptions_reason_1 = + _registerName1("beginActivityWithOptions:reason:"); + ffi.Pointer _objc_msgSend_746( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ffi.Pointer reason, + ) { + return __objc_msgSend_746( + obj, + sel, + options, + reason, + ); + } + + late final __objc_msgSend_746Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_746 = __objc_msgSend_746Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, int, ffi.Pointer)>(); + + late final _sel_endActivity_1 = _registerName1("endActivity:"); + late final _sel_performActivityWithOptions_reason_usingBlock_1 = + _registerName1("performActivityWithOptions:reason:usingBlock:"); + void _objc_msgSend_747( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ffi.Pointer reason, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_747( + obj, + sel, + options, + reason, + block, + ); + } + + late final __objc_msgSend_747Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_747 = __objc_msgSend_747Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_performExpiringActivityWithReason_usingBlock_1 = + _registerName1("performExpiringActivityWithReason:usingBlock:"); + void _objc_msgSend_748( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer reason, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_748( + obj, + sel, + reason, + block, + ); + } + + late final __objc_msgSend_748Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_748 = __objc_msgSend_748Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_userName1 = _registerName1("userName"); + late final _sel_fullUserName1 = _registerName1("fullUserName"); + late final _sel_thermalState1 = _registerName1("thermalState"); + int _objc_msgSend_749( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_749( + obj, + sel, + ); + } + + late final __objc_msgSend_749Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_749 = __objc_msgSend_749Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_isLowPowerModeEnabled1 = + _registerName1("isLowPowerModeEnabled"); + late final _sel_isMacCatalystApp1 = _registerName1("isMacCatalystApp"); + late final _sel_isiOSAppOnMac1 = _registerName1("isiOSAppOnMac"); + late final _class_NSTextCheckingResult1 = _getClass1("NSTextCheckingResult"); + late final _sel_resultType1 = _registerName1("resultType"); + int _objc_msgSend_750( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_750( + obj, + sel, + ); + } + + late final __objc_msgSend_750Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_750 = __objc_msgSend_750Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_range1 = _registerName1("range"); + late final _sel_orthography1 = _registerName1("orthography"); + ffi.Pointer _objc_msgSend_751( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_751( + obj, + sel, + ); + } + + late final __objc_msgSend_751Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_751 = __objc_msgSend_751Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_grammarDetails1 = _registerName1("grammarDetails"); + late final _sel_duration1 = _registerName1("duration"); + late final _sel_components1 = _registerName1("components"); + late final _sel_replacementString1 = _registerName1("replacementString"); + late final _sel_alternativeStrings1 = _registerName1("alternativeStrings"); + late final _class_NSRegularExpression1 = _getClass1("NSRegularExpression"); + late final _sel_regularExpressionWithPattern_options_error_1 = + _registerName1("regularExpressionWithPattern:options:error:"); + ffi.Pointer _objc_msgSend_752( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer pattern, + int options, + ffi.Pointer> error, + ) { + return __objc_msgSend_752( + obj, + sel, + pattern, + options, + error, + ); + } + + late final __objc_msgSend_752Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_752 = __objc_msgSend_752Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_initWithPattern_options_error_1 = + _registerName1("initWithPattern:options:error:"); + instancetype _objc_msgSend_753( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer pattern, + int options, + ffi.Pointer> error, + ) { + return __objc_msgSend_753( + obj, + sel, + pattern, + options, + error, + ); + } + + late final __objc_msgSend_753Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_753 = __objc_msgSend_753Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_pattern1 = _registerName1("pattern"); + late final _sel_options1 = _registerName1("options"); + int _objc_msgSend_754( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_754( + obj, + sel, + ); + } + + late final __objc_msgSend_754Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_754 = __objc_msgSend_754Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_numberOfCaptureGroups1 = + _registerName1("numberOfCaptureGroups"); + late final _sel_escapedPatternForString_1 = + _registerName1("escapedPatternForString:"); + late final _sel_enumerateMatchesInString_options_range_usingBlock_1 = + _registerName1("enumerateMatchesInString:options:range:usingBlock:"); + void _objc_msgSend_755( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ffi.Pointer<_ObjCBlock> block, + ) { + return __objc_msgSend_755( + obj, + sel, + string, + options, + range, + block, + ); + } + + late final __objc_msgSend_755Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_755 = __objc_msgSend_755Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_matchesInString_options_range_1 = + _registerName1("matchesInString:options:range:"); + ffi.Pointer _objc_msgSend_756( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ) { + return __objc_msgSend_756( + obj, + sel, + string, + options, + range, + ); + } + + late final __objc_msgSend_756Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_756 = __objc_msgSend_756Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, _NSRange)>(); + + late final _sel_numberOfMatchesInString_options_range_1 = + _registerName1("numberOfMatchesInString:options:range:"); + int _objc_msgSend_757( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ) { + return __objc_msgSend_757( + obj, + sel, + string, + options, + range, + ); + } + + late final __objc_msgSend_757Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_757 = __objc_msgSend_757Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange)>(); + + late final _sel_firstMatchInString_options_range_1 = + _registerName1("firstMatchInString:options:range:"); + ffi.Pointer _objc_msgSend_758( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ) { + return __objc_msgSend_758( + obj, + sel, + string, + options, + range, + ); + } + + late final __objc_msgSend_758Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_758 = __objc_msgSend_758Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int, _NSRange)>(); + + late final _sel_rangeOfFirstMatchInString_options_range_1 = + _registerName1("rangeOfFirstMatchInString:options:range:"); + _NSRange _objc_msgSend_759( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ) { + return __objc_msgSend_759( + obj, + sel, + string, + options, + range, + ); + } + + late final __objc_msgSend_759Ptr = _lookup< + ffi.NativeFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Int32, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_759 = __objc_msgSend_759Ptr.asFunction< + _NSRange Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange)>(); + + late final _sel_stringByReplacingMatchesInString_options_range_withTemplate_1 = + _registerName1( + "stringByReplacingMatchesInString:options:range:withTemplate:"); + ffi.Pointer _objc_msgSend_760( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ffi.Pointer templ, + ) { + return __objc_msgSend_760( + obj, + sel, + string, + options, + range, + templ, + ); + } + + late final __objc_msgSend_760Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_760 = __objc_msgSend_760Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + _NSRange, + ffi.Pointer)>(); + + late final _sel_replaceMatchesInString_options_range_withTemplate_1 = + _registerName1("replaceMatchesInString:options:range:withTemplate:"); + int _objc_msgSend_761( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer string, + int options, + _NSRange range, + ffi.Pointer templ, + ) { + return __objc_msgSend_761( + obj, + sel, + string, + options, + range, + templ, + ); + } + + late final __objc_msgSend_761Ptr = _lookup< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_761 = __objc_msgSend_761Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, int, _NSRange, ffi.Pointer)>(); + + late final _sel_replacementStringForResult_inString_offset_template_1 = + _registerName1("replacementStringForResult:inString:offset:template:"); + ffi.Pointer _objc_msgSend_762( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer result, + ffi.Pointer string, + int offset, + ffi.Pointer templ, + ) { + return __objc_msgSend_762( + obj, + sel, + result, + string, + offset, + templ, + ); + } + + late final __objc_msgSend_762Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_762 = __objc_msgSend_762Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); + + late final _sel_escapedTemplateForString_1 = + _registerName1("escapedTemplateForString:"); + late final _sel_regularExpression1 = _registerName1("regularExpression"); + ffi.Pointer _objc_msgSend_763( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_763( + obj, + sel, + ); + } + + late final __objc_msgSend_763Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_763 = __objc_msgSend_763Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_phoneNumber1 = _registerName1("phoneNumber"); + late final _sel_numberOfRanges1 = _registerName1("numberOfRanges"); + late final _sel_rangeAtIndex_1 = _registerName1("rangeAtIndex:"); + late final _sel_rangeWithName_1 = _registerName1("rangeWithName:"); + late final _sel_resultByAdjustingRangesWithOffset_1 = + _registerName1("resultByAdjustingRangesWithOffset:"); + ffi.Pointer _objc_msgSend_764( + ffi.Pointer obj, + ffi.Pointer sel, + int offset, + ) { + return __objc_msgSend_764( + obj, + sel, + offset, + ); + } + + late final __objc_msgSend_764Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_764 = __objc_msgSend_764Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_addressComponents1 = _registerName1("addressComponents"); + late final _sel_orthographyCheckingResultWithRange_orthography_1 = + _registerName1("orthographyCheckingResultWithRange:orthography:"); + ffi.Pointer _objc_msgSend_765( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer orthography, + ) { + return __objc_msgSend_765( + obj, + sel, + range, + orthography, + ); + } + + late final __objc_msgSend_765Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_765 = __objc_msgSend_765Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_spellCheckingResultWithRange_1 = + _registerName1("spellCheckingResultWithRange:"); + ffi.Pointer _objc_msgSend_766( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ) { + return __objc_msgSend_766( + obj, + sel, + range, + ); + } + + late final __objc_msgSend_766Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange)>>('objc_msgSend'); + late final __objc_msgSend_766 = __objc_msgSend_766Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer, _NSRange)>(); + + late final _sel_grammarCheckingResultWithRange_details_1 = + _registerName1("grammarCheckingResultWithRange:details:"); + ffi.Pointer _objc_msgSend_767( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer details, + ) { + return __objc_msgSend_767( + obj, + sel, + range, + details, + ); + } + + late final __objc_msgSend_767Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_767 = __objc_msgSend_767Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_dateCheckingResultWithRange_date_1 = + _registerName1("dateCheckingResultWithRange:date:"); + ffi.Pointer _objc_msgSend_768( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer date, + ) { + return __objc_msgSend_768( + obj, + sel, + range, + date, + ); + } + + late final __objc_msgSend_768Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_768 = __objc_msgSend_768Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_dateCheckingResultWithRange_date_timeZone_duration_1 = + _registerName1("dateCheckingResultWithRange:date:timeZone:duration:"); + ffi.Pointer _objc_msgSend_769( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer date, + ffi.Pointer timeZone, + double duration, + ) { + return __objc_msgSend_769( + obj, + sel, + range, + date, + timeZone, + duration, + ); + } + + late final __objc_msgSend_769Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.Pointer, + ffi.Double)>>('objc_msgSend'); + late final __objc_msgSend_769 = __objc_msgSend_769Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.Pointer, + double)>(); + + late final _sel_addressCheckingResultWithRange_components_1 = + _registerName1("addressCheckingResultWithRange:components:"); + ffi.Pointer _objc_msgSend_770( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer components, + ) { + return __objc_msgSend_770( + obj, + sel, + range, + components, + ); + } + + late final __objc_msgSend_770Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_770 = __objc_msgSend_770Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_linkCheckingResultWithRange_URL_1 = + _registerName1("linkCheckingResultWithRange:URL:"); + ffi.Pointer _objc_msgSend_771( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer url, + ) { + return __objc_msgSend_771( + obj, + sel, + range, + url, + ); + } + + late final __objc_msgSend_771Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_771 = __objc_msgSend_771Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_quoteCheckingResultWithRange_replacementString_1 = + _registerName1("quoteCheckingResultWithRange:replacementString:"); + ffi.Pointer _objc_msgSend_772( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer replacementString, + ) { + return __objc_msgSend_772( + obj, + sel, + range, + replacementString, + ); + } + + late final __objc_msgSend_772Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_772 = __objc_msgSend_772Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, _NSRange, ffi.Pointer)>(); + + late final _sel_dashCheckingResultWithRange_replacementString_1 = + _registerName1("dashCheckingResultWithRange:replacementString:"); + late final _sel_replacementCheckingResultWithRange_replacementString_1 = + _registerName1("replacementCheckingResultWithRange:replacementString:"); + late final _sel_correctionCheckingResultWithRange_replacementString_1 = + _registerName1("correctionCheckingResultWithRange:replacementString:"); + late final _sel_correctionCheckingResultWithRange_replacementString_alternativeStrings_1 = + _registerName1( + "correctionCheckingResultWithRange:replacementString:alternativeStrings:"); + ffi.Pointer _objc_msgSend_773( + ffi.Pointer obj, + ffi.Pointer sel, + _NSRange range, + ffi.Pointer replacementString, + ffi.Pointer alternativeStrings, + ) { + return __objc_msgSend_773( + obj, + sel, + range, + replacementString, + alternativeStrings, + ); + } + + late final __objc_msgSend_773Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_773 = __objc_msgSend_773Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + _NSRange, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_regularExpressionCheckingResultWithRanges_count_regularExpression_1 = + _registerName1( + "regularExpressionCheckingResultWithRanges:count:regularExpression:"); + ffi.Pointer _objc_msgSend_774( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_NSRange> ranges, + int count, + ffi.Pointer regularExpression, + ) { + return __objc_msgSend_774( + obj, + sel, + ranges, + count, + regularExpression, + ); + } + + late final __objc_msgSend_774Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_NSRange>, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_774 = __objc_msgSend_774Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_NSRange>, + int, + ffi.Pointer)>(); + + late final _sel_phoneNumberCheckingResultWithRange_phoneNumber_1 = + _registerName1("phoneNumberCheckingResultWithRange:phoneNumber:"); + late final _sel_transitInformationCheckingResultWithRange_components_1 = + _registerName1("transitInformationCheckingResultWithRange:components:"); + late final _class_NSURLCache1 = _getClass1("NSURLCache"); + late final _sel_sharedURLCache1 = _registerName1("sharedURLCache"); + ffi.Pointer _objc_msgSend_775( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_775( + obj, + sel, + ); + } + + late final __objc_msgSend_775Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_775 = __objc_msgSend_775Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setSharedURLCache_1 = _registerName1("setSharedURLCache:"); + void _objc_msgSend_776( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_776( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_776Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_776 = __objc_msgSend_776Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithMemoryCapacity_diskCapacity_diskPath_1 = + _registerName1("initWithMemoryCapacity:diskCapacity:diskPath:"); + instancetype _objc_msgSend_777( + ffi.Pointer obj, + ffi.Pointer sel, + int memoryCapacity, + int diskCapacity, + ffi.Pointer path, + ) { + return __objc_msgSend_777( + obj, + sel, + memoryCapacity, + diskCapacity, + path, + ); + } + + late final __objc_msgSend_777Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_777 = __objc_msgSend_777Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, int, + int, ffi.Pointer)>(); + + late final _sel_initWithMemoryCapacity_diskCapacity_directoryURL_1 = + _registerName1("initWithMemoryCapacity:diskCapacity:directoryURL:"); + instancetype _objc_msgSend_778( + ffi.Pointer obj, + ffi.Pointer sel, + int memoryCapacity, + int diskCapacity, + ffi.Pointer directoryURL, + ) { + return __objc_msgSend_778( + obj, + sel, + memoryCapacity, + diskCapacity, + directoryURL, + ); + } + + late final __objc_msgSend_778Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_778 = __objc_msgSend_778Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, int, + int, ffi.Pointer)>(); + + late final _class_NSCachedURLResponse1 = _getClass1("NSCachedURLResponse"); + late final _sel_initWithResponse_data_1 = + _registerName1("initWithResponse:data:"); + instancetype _objc_msgSend_779( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer response, + ffi.Pointer data, + ) { + return __objc_msgSend_779( + obj, + sel, + response, + data, + ); + } + + late final __objc_msgSend_779Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_779 = __objc_msgSend_779Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithResponse_data_userInfo_storagePolicy_1 = + _registerName1("initWithResponse:data:userInfo:storagePolicy:"); + instancetype _objc_msgSend_780( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer response, + ffi.Pointer data, + ffi.Pointer userInfo, + int storagePolicy, + ) { + return __objc_msgSend_780( + obj, + sel, + response, + data, + userInfo, + storagePolicy, + ); + } + + late final __objc_msgSend_780Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_780 = __objc_msgSend_780Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_storagePolicy1 = _registerName1("storagePolicy"); + int _objc_msgSend_781( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_781( + obj, + sel, + ); + } + + late final __objc_msgSend_781Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_781 = __objc_msgSend_781Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_cachedResponseForRequest_1 = + _registerName1("cachedResponseForRequest:"); + ffi.Pointer _objc_msgSend_782( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_782( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_782Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_782 = __objc_msgSend_782Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_storeCachedResponse_forRequest_1 = + _registerName1("storeCachedResponse:forRequest:"); + void _objc_msgSend_783( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer cachedResponse, + ffi.Pointer request, + ) { + return __objc_msgSend_783( + obj, + sel, + cachedResponse, + request, + ); + } + + late final __objc_msgSend_783Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_783 = __objc_msgSend_783Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_removeCachedResponseForRequest_1 = + _registerName1("removeCachedResponseForRequest:"); + void _objc_msgSend_784( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_784( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_784Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_784 = __objc_msgSend_784Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeAllCachedResponses1 = + _registerName1("removeAllCachedResponses"); + late final _sel_removeCachedResponsesSinceDate_1 = + _registerName1("removeCachedResponsesSinceDate:"); + late final _sel_memoryCapacity1 = _registerName1("memoryCapacity"); + late final _sel_setMemoryCapacity_1 = _registerName1("setMemoryCapacity:"); + late final _sel_diskCapacity1 = _registerName1("diskCapacity"); + late final _sel_setDiskCapacity_1 = _registerName1("setDiskCapacity:"); + late final _sel_currentMemoryUsage1 = _registerName1("currentMemoryUsage"); + late final _sel_currentDiskUsage1 = _registerName1("currentDiskUsage"); + late final _class_NSURLSessionDataTask1 = _getClass1("NSURLSessionDataTask"); + late final _sel_storeCachedResponse_forDataTask_1 = + _registerName1("storeCachedResponse:forDataTask:"); + void _objc_msgSend_785( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer cachedResponse, + ffi.Pointer dataTask, + ) { + return __objc_msgSend_785( + obj, + sel, + cachedResponse, + dataTask, + ); + } + + late final __objc_msgSend_785Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_785 = __objc_msgSend_785Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_getCachedResponseForDataTask_completionHandler_1 = + _registerName1("getCachedResponseForDataTask:completionHandler:"); + void _objc_msgSend_786( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer dataTask, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_786( + obj, + sel, + dataTask, + completionHandler, + ); + } + + late final __objc_msgSend_786Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_786 = __objc_msgSend_786Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_removeCachedResponseForDataTask_1 = + _registerName1("removeCachedResponseForDataTask:"); + void _objc_msgSend_787( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer dataTask, + ) { + return __objc_msgSend_787( + obj, + sel, + dataTask, + ); + } + + late final __objc_msgSend_787Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_787 = __objc_msgSend_787Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSURLConnection1 = _getClass1("NSURLConnection"); + late final _sel_initWithRequest_delegate_startImmediately_1 = + _registerName1("initWithRequest:delegate:startImmediately:"); + instancetype _objc_msgSend_788( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer delegate, + bool startImmediately, + ) { + return __objc_msgSend_788( + obj, + sel, + request, + delegate, + startImmediately, + ); + } + + late final __objc_msgSend_788Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_788 = __objc_msgSend_788Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, bool)>(); + + late final _sel_initWithRequest_delegate_1 = + _registerName1("initWithRequest:delegate:"); + instancetype _objc_msgSend_789( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer delegate, + ) { + return __objc_msgSend_789( + obj, + sel, + request, + delegate, + ); + } + + late final __objc_msgSend_789Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_789 = __objc_msgSend_789Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_connectionWithRequest_delegate_1 = + _registerName1("connectionWithRequest:delegate:"); + ffi.Pointer _objc_msgSend_790( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer delegate, + ) { + return __objc_msgSend_790( + obj, + sel, + request, + delegate, + ); + } + + late final __objc_msgSend_790Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_790 = __objc_msgSend_790Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_unscheduleFromRunLoop_forMode_1 = + _registerName1("unscheduleFromRunLoop:forMode:"); + late final _sel_setDelegateQueue_1 = _registerName1("setDelegateQueue:"); + void _objc_msgSend_791( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer queue, + ) { + return __objc_msgSend_791( + obj, + sel, + queue, + ); + } + + late final __objc_msgSend_791Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_791 = __objc_msgSend_791Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_canHandleRequest_1 = _registerName1("canHandleRequest:"); + bool _objc_msgSend_792( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_792( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_792Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_792 = __objc_msgSend_792Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_sendSynchronousRequest_returningResponse_error_1 = + _registerName1("sendSynchronousRequest:returningResponse:error:"); + ffi.Pointer _objc_msgSend_793( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer> response, + ffi.Pointer> error, + ) { + return __objc_msgSend_793( + obj, + sel, + request, + response, + error, + ); + } + + late final __objc_msgSend_793Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_793 = __objc_msgSend_793Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_sendAsynchronousRequest_queue_completionHandler_1 = + _registerName1("sendAsynchronousRequest:queue:completionHandler:"); + void _objc_msgSend_794( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer queue, + ffi.Pointer<_ObjCBlock> handler, + ) { + return __objc_msgSend_794( + obj, + sel, + request, + queue, + handler, + ); + } + + late final __objc_msgSend_794Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_794 = __objc_msgSend_794Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _class_NSURLCredential1 = _getClass1("NSURLCredential"); + late final _sel_persistence1 = _registerName1("persistence"); + int _objc_msgSend_795( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_795( + obj, + sel, + ); + } + + late final __objc_msgSend_795Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_795 = __objc_msgSend_795Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_initWithUser_password_persistence_1 = + _registerName1("initWithUser:password:persistence:"); + instancetype _objc_msgSend_796( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer user, + ffi.Pointer password, + int persistence, + ) { + return __objc_msgSend_796( + obj, + sel, + user, + password, + persistence, + ); + } + + late final __objc_msgSend_796Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_796 = __objc_msgSend_796Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_credentialWithUser_password_persistence_1 = + _registerName1("credentialWithUser:password:persistence:"); + ffi.Pointer _objc_msgSend_797( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer user, + ffi.Pointer password, + int persistence, + ) { + return __objc_msgSend_797( + obj, + sel, + user, + password, + persistence, + ); + } + + late final __objc_msgSend_797Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_797 = __objc_msgSend_797Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_hasPassword1 = _registerName1("hasPassword"); + late final _sel_initWithIdentity_certificates_persistence_1 = + _registerName1("initWithIdentity:certificates:persistence:"); + instancetype _objc_msgSend_798( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<__SecIdentity> identity, + ffi.Pointer certArray, + int persistence, + ) { + return __objc_msgSend_798( + obj, + sel, + identity, + certArray, + persistence, + ); + } + + late final __objc_msgSend_798Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<__SecIdentity>, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_798 = __objc_msgSend_798Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<__SecIdentity>, ffi.Pointer, int)>(); + + late final _sel_credentialWithIdentity_certificates_persistence_1 = + _registerName1("credentialWithIdentity:certificates:persistence:"); + ffi.Pointer _objc_msgSend_799( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<__SecIdentity> identity, + ffi.Pointer certArray, + int persistence, + ) { + return __objc_msgSend_799( + obj, + sel, + identity, + certArray, + persistence, + ); + } + + late final __objc_msgSend_799Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<__SecIdentity>, + ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_799 = __objc_msgSend_799Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<__SecIdentity>, + ffi.Pointer, + int)>(); + + late final _sel_identity1 = _registerName1("identity"); + ffi.Pointer<__SecIdentity> _objc_msgSend_800( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_800( + obj, + sel, + ); + } + + late final __objc_msgSend_800Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<__SecIdentity> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_800 = __objc_msgSend_800Ptr.asFunction< + ffi.Pointer<__SecIdentity> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_certificates1 = _registerName1("certificates"); + late final _sel_initWithTrust_1 = _registerName1("initWithTrust:"); + instancetype _objc_msgSend_801( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<__SecTrust> trust, + ) { + return __objc_msgSend_801( + obj, + sel, + trust, + ); + } + + late final __objc_msgSend_801Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<__SecTrust>)>>('objc_msgSend'); + late final __objc_msgSend_801 = __objc_msgSend_801Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<__SecTrust>)>(); + + late final _sel_credentialForTrust_1 = _registerName1("credentialForTrust:"); + ffi.Pointer _objc_msgSend_802( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<__SecTrust> trust, + ) { + return __objc_msgSend_802( + obj, + sel, + trust, + ); + } + + late final __objc_msgSend_802Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<__SecTrust>)>>('objc_msgSend'); + late final __objc_msgSend_802 = __objc_msgSend_802Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer<__SecTrust>)>(); + + late final _class_NSURLProtectionSpace1 = _getClass1("NSURLProtectionSpace"); + late final _sel_initWithHost_port_protocol_realm_authenticationMethod_1 = + _registerName1("initWithHost:port:protocol:realm:authenticationMethod:"); + instancetype _objc_msgSend_803( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer host, + int port, + ffi.Pointer protocol, + ffi.Pointer realm, + ffi.Pointer authenticationMethod, + ) { + return __objc_msgSend_803( + obj, + sel, + host, + port, + protocol, + realm, + authenticationMethod, + ); + } + + late final __objc_msgSend_803Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_803 = __objc_msgSend_803Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithProxyHost_port_type_realm_authenticationMethod_1 = + _registerName1("initWithProxyHost:port:type:realm:authenticationMethod:"); + late final _sel_realm1 = _registerName1("realm"); + late final _sel_receivesCredentialSecurely1 = + _registerName1("receivesCredentialSecurely"); + late final _sel_isProxy1 = _registerName1("isProxy"); + late final _sel_proxyType1 = _registerName1("proxyType"); + late final _sel_protocol1 = _registerName1("protocol"); + late final _sel_authenticationMethod1 = + _registerName1("authenticationMethod"); + late final _sel_distinguishedNames1 = _registerName1("distinguishedNames"); + late final _sel_serverTrust1 = _registerName1("serverTrust"); + ffi.Pointer<__SecTrust> _objc_msgSend_804( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_804( + obj, + sel, + ); + } + + late final __objc_msgSend_804Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer<__SecTrust> Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_804 = __objc_msgSend_804Ptr.asFunction< + ffi.Pointer<__SecTrust> Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSURLCredentialStorage1 = + _getClass1("NSURLCredentialStorage"); + late final _sel_sharedCredentialStorage1 = + _registerName1("sharedCredentialStorage"); + ffi.Pointer _objc_msgSend_805( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_805( + obj, + sel, + ); + } + + late final __objc_msgSend_805Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_805 = __objc_msgSend_805Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_credentialsForProtectionSpace_1 = + _registerName1("credentialsForProtectionSpace:"); + ffi.Pointer _objc_msgSend_806( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer space, + ) { + return __objc_msgSend_806( + obj, + sel, + space, + ); + } + + late final __objc_msgSend_806Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_806 = __objc_msgSend_806Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_allCredentials1 = _registerName1("allCredentials"); + late final _sel_setCredential_forProtectionSpace_1 = + _registerName1("setCredential:forProtectionSpace:"); + void _objc_msgSend_807( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer credential, + ffi.Pointer space, + ) { + return __objc_msgSend_807( + obj, + sel, + credential, + space, + ); + } + + late final __objc_msgSend_807Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_807 = __objc_msgSend_807Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_removeCredential_forProtectionSpace_1 = + _registerName1("removeCredential:forProtectionSpace:"); + late final _sel_removeCredential_forProtectionSpace_options_1 = + _registerName1("removeCredential:forProtectionSpace:options:"); + void _objc_msgSend_808( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer credential, + ffi.Pointer space, + ffi.Pointer options, + ) { + return __objc_msgSend_808( + obj, + sel, + credential, + space, + options, + ); + } + + late final __objc_msgSend_808Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_808 = __objc_msgSend_808Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_defaultCredentialForProtectionSpace_1 = + _registerName1("defaultCredentialForProtectionSpace:"); + ffi.Pointer _objc_msgSend_809( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer space, + ) { + return __objc_msgSend_809( + obj, + sel, + space, + ); + } + + late final __objc_msgSend_809Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_809 = __objc_msgSend_809Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setDefaultCredential_forProtectionSpace_1 = + _registerName1("setDefaultCredential:forProtectionSpace:"); + late final _sel_getCredentialsForProtectionSpace_task_completionHandler_1 = + _registerName1( + "getCredentialsForProtectionSpace:task:completionHandler:"); + void _objc_msgSend_810( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer protectionSpace, + ffi.Pointer task, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_810( + obj, + sel, + protectionSpace, + task, + completionHandler, + ); + } + + late final __objc_msgSend_810Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_810 = __objc_msgSend_810Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_setCredential_forProtectionSpace_task_1 = + _registerName1("setCredential:forProtectionSpace:task:"); + void _objc_msgSend_811( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer credential, + ffi.Pointer protectionSpace, + ffi.Pointer task, + ) { + return __objc_msgSend_811( + obj, + sel, + credential, + protectionSpace, + task, + ); + } + + late final __objc_msgSend_811Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_811 = __objc_msgSend_811Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeCredential_forProtectionSpace_options_task_1 = + _registerName1("removeCredential:forProtectionSpace:options:task:"); + void _objc_msgSend_812( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer credential, + ffi.Pointer protectionSpace, + ffi.Pointer options, + ffi.Pointer task, + ) { + return __objc_msgSend_812( + obj, + sel, + credential, + protectionSpace, + options, + task, + ); + } + + late final __objc_msgSend_812Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_812 = __objc_msgSend_812Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_getDefaultCredentialForProtectionSpace_task_completionHandler_1 = + _registerName1( + "getDefaultCredentialForProtectionSpace:task:completionHandler:"); + void _objc_msgSend_813( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer space, + ffi.Pointer task, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_813( + obj, + sel, + space, + task, + completionHandler, + ); + } + + late final __objc_msgSend_813Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_813 = __objc_msgSend_813Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_setDefaultCredential_forProtectionSpace_task_1 = + _registerName1("setDefaultCredential:forProtectionSpace:task:"); + late final _class_NSURLProtocol1 = _getClass1("NSURLProtocol"); + late final _sel_initWithRequest_cachedResponse_client_1 = + _registerName1("initWithRequest:cachedResponse:client:"); + instancetype _objc_msgSend_814( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer cachedResponse, + ffi.Pointer client, + ) { + return __objc_msgSend_814( + obj, + sel, + request, + cachedResponse, + client, + ); + } + + late final __objc_msgSend_814Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_814 = __objc_msgSend_814Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_client1 = _registerName1("client"); + late final _sel_request1 = _registerName1("request"); + late final _sel_cachedResponse1 = _registerName1("cachedResponse"); + ffi.Pointer _objc_msgSend_815( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_815( + obj, + sel, + ); + } + + late final __objc_msgSend_815Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_815 = __objc_msgSend_815Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_canInitWithRequest_1 = _registerName1("canInitWithRequest:"); + late final _sel_canonicalRequestForRequest_1 = + _registerName1("canonicalRequestForRequest:"); + ffi.Pointer _objc_msgSend_816( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_816( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_816Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_816 = __objc_msgSend_816Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_requestIsCacheEquivalent_toRequest_1 = + _registerName1("requestIsCacheEquivalent:toRequest:"); + bool _objc_msgSend_817( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer a, + ffi.Pointer b, + ) { + return __objc_msgSend_817( + obj, + sel, + a, + b, + ); + } + + late final __objc_msgSend_817Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_817 = __objc_msgSend_817Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_startLoading1 = _registerName1("startLoading"); + late final _sel_stopLoading1 = _registerName1("stopLoading"); + late final _sel_propertyForKey_inRequest_1 = + _registerName1("propertyForKey:inRequest:"); + ffi.Pointer _objc_msgSend_818( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ffi.Pointer request, + ) { + return __objc_msgSend_818( + obj, + sel, + key, + request, + ); + } + + late final __objc_msgSend_818Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_818 = __objc_msgSend_818Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _class_NSMutableURLRequest1 = _getClass1("NSMutableURLRequest"); + late final _sel_setURL_1 = _registerName1("setURL:"); + late final _sel_setCachePolicy_1 = _registerName1("setCachePolicy:"); + void _objc_msgSend_819( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_819( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_819Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_819 = __objc_msgSend_819Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_setTimeoutInterval_1 = _registerName1("setTimeoutInterval:"); + late final _sel_setMainDocumentURL_1 = _registerName1("setMainDocumentURL:"); + late final _sel_setNetworkServiceType_1 = + _registerName1("setNetworkServiceType:"); + void _objc_msgSend_820( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_820( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_820Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_820 = __objc_msgSend_820Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_setAllowsCellularAccess_1 = + _registerName1("setAllowsCellularAccess:"); + late final _sel_setAllowsExpensiveNetworkAccess_1 = + _registerName1("setAllowsExpensiveNetworkAccess:"); + late final _sel_setAllowsConstrainedNetworkAccess_1 = + _registerName1("setAllowsConstrainedNetworkAccess:"); + late final _sel_setAssumesHTTP3Capable_1 = + _registerName1("setAssumesHTTP3Capable:"); + late final _sel_setAttribution_1 = _registerName1("setAttribution:"); + void _objc_msgSend_821( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_821( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_821Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_821 = __objc_msgSend_821Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_setRequiresDNSSECValidation_1 = + _registerName1("setRequiresDNSSECValidation:"); + late final _sel_setHTTPMethod_1 = _registerName1("setHTTPMethod:"); + late final _sel_setAllHTTPHeaderFields_1 = + _registerName1("setAllHTTPHeaderFields:"); + late final _sel_setValue_forHTTPHeaderField_1 = + _registerName1("setValue:forHTTPHeaderField:"); + late final _sel_addValue_forHTTPHeaderField_1 = + _registerName1("addValue:forHTTPHeaderField:"); + late final _sel_setHTTPBody_1 = _registerName1("setHTTPBody:"); + void _objc_msgSend_822( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_822( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_822Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_822 = __objc_msgSend_822Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_setHTTPBodyStream_1 = _registerName1("setHTTPBodyStream:"); + void _objc_msgSend_823( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_823( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_823Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_823 = __objc_msgSend_823Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_setHTTPShouldHandleCookies_1 = + _registerName1("setHTTPShouldHandleCookies:"); + late final _sel_setHTTPShouldUsePipelining_1 = + _registerName1("setHTTPShouldUsePipelining:"); + late final _sel_setProperty_forKey_inRequest_1 = + _registerName1("setProperty:forKey:inRequest:"); + void _objc_msgSend_824( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ffi.Pointer key, + ffi.Pointer request, + ) { + return __objc_msgSend_824( + obj, + sel, + value, + key, + request, + ); + } + + late final __objc_msgSend_824Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_824 = __objc_msgSend_824Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removePropertyForKey_inRequest_1 = + _registerName1("removePropertyForKey:inRequest:"); + void _objc_msgSend_825( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer key, + ffi.Pointer request, + ) { + return __objc_msgSend_825( + obj, + sel, + key, + request, + ); + } + + late final __objc_msgSend_825Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_825 = __objc_msgSend_825Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_registerClass_1 = _registerName1("registerClass:"); + late final _sel_unregisterClass_1 = _registerName1("unregisterClass:"); + late final _sel_canInitWithTask_1 = _registerName1("canInitWithTask:"); + bool _objc_msgSend_826( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer task, + ) { + return __objc_msgSend_826( + obj, + sel, + task, + ); + } + + late final __objc_msgSend_826Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_826 = __objc_msgSend_826Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_initWithTask_cachedResponse_client_1 = + _registerName1("initWithTask:cachedResponse:client:"); + instancetype _objc_msgSend_827( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer task, + ffi.Pointer cachedResponse, + ffi.Pointer client, + ) { + return __objc_msgSend_827( + obj, + sel, + task, + cachedResponse, + client, + ); + } + + late final __objc_msgSend_827Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_827 = __objc_msgSend_827Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_task1 = _registerName1("task"); + ffi.Pointer _objc_msgSend_828( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_828( + obj, + sel, + ); + } + + late final __objc_msgSend_828Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_828 = __objc_msgSend_828Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSXMLParser1 = _getClass1("NSXMLParser"); + late final _sel_initWithStream_1 = _registerName1("initWithStream:"); + instancetype _objc_msgSend_829( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer stream, + ) { + return __objc_msgSend_829( + obj, + sel, + stream, + ); + } + + late final __objc_msgSend_829Ptr = _lookup< + ffi.NativeFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_829 = __objc_msgSend_829Ptr.asFunction< + instancetype Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_shouldProcessNamespaces1 = + _registerName1("shouldProcessNamespaces"); + late final _sel_setShouldProcessNamespaces_1 = + _registerName1("setShouldProcessNamespaces:"); + late final _sel_shouldReportNamespacePrefixes1 = + _registerName1("shouldReportNamespacePrefixes"); + late final _sel_setShouldReportNamespacePrefixes_1 = + _registerName1("setShouldReportNamespacePrefixes:"); + late final _sel_externalEntityResolvingPolicy1 = + _registerName1("externalEntityResolvingPolicy"); + int _objc_msgSend_830( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_830( + obj, + sel, + ); + } + + late final __objc_msgSend_830Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_830 = __objc_msgSend_830Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setExternalEntityResolvingPolicy_1 = + _registerName1("setExternalEntityResolvingPolicy:"); + void _objc_msgSend_831( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_831( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_831Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_831 = __objc_msgSend_831Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_allowedExternalEntityURLs1 = + _registerName1("allowedExternalEntityURLs"); + late final _sel_setAllowedExternalEntityURLs_1 = + _registerName1("setAllowedExternalEntityURLs:"); + void _objc_msgSend_832( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_832( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_832Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_832 = __objc_msgSend_832Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_parse1 = _registerName1("parse"); + late final _sel_abortParsing1 = _registerName1("abortParsing"); + late final _sel_parserError1 = _registerName1("parserError"); + late final _sel_shouldResolveExternalEntities1 = + _registerName1("shouldResolveExternalEntities"); + late final _sel_setShouldResolveExternalEntities_1 = + _registerName1("setShouldResolveExternalEntities:"); + late final _sel_publicID1 = _registerName1("publicID"); + late final _sel_systemID1 = _registerName1("systemID"); + late final _sel_lineNumber1 = _registerName1("lineNumber"); + late final _sel_columnNumber1 = _registerName1("columnNumber"); + late final _class_NSFileWrapper1 = _getClass1("NSFileWrapper"); + late final _sel_initWithURL_options_error_1 = + _registerName1("initWithURL:options:error:"); + instancetype _objc_msgSend_833( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int options, + ffi.Pointer> outError, + ) { + return __objc_msgSend_833( + obj, + sel, + url, + options, + outError, + ); + } + + late final __objc_msgSend_833Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_833 = __objc_msgSend_833Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_initDirectoryWithFileWrappers_1 = + _registerName1("initDirectoryWithFileWrappers:"); + late final _sel_initRegularFileWithContents_1 = + _registerName1("initRegularFileWithContents:"); + late final _sel_initSymbolicLinkWithDestinationURL_1 = + _registerName1("initSymbolicLinkWithDestinationURL:"); + late final _sel_initWithSerializedRepresentation_1 = + _registerName1("initWithSerializedRepresentation:"); + late final _sel_isDirectory1 = _registerName1("isDirectory"); + late final _sel_isRegularFile1 = _registerName1("isRegularFile"); + late final _sel_isSymbolicLink1 = _registerName1("isSymbolicLink"); + late final _sel_preferredFilename1 = _registerName1("preferredFilename"); + late final _sel_setPreferredFilename_1 = + _registerName1("setPreferredFilename:"); + late final _sel_filename1 = _registerName1("filename"); + late final _sel_setFilename_1 = _registerName1("setFilename:"); + late final _sel_fileAttributes1 = _registerName1("fileAttributes"); + late final _sel_setFileAttributes_1 = _registerName1("setFileAttributes:"); + late final _sel_matchesContentsOfURL_1 = + _registerName1("matchesContentsOfURL:"); + late final _sel_readFromURL_options_error_1 = + _registerName1("readFromURL:options:error:"); + bool _objc_msgSend_834( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int options, + ffi.Pointer> outError, + ) { + return __objc_msgSend_834( + obj, + sel, + url, + options, + outError, + ); + } + + late final __objc_msgSend_834Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_834 = __objc_msgSend_834Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer>)>(); + + late final _sel_writeToURL_options_originalContentsURL_error_1 = + _registerName1("writeToURL:options:originalContentsURL:error:"); + bool _objc_msgSend_835( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + int options, + ffi.Pointer originalContentsURL, + ffi.Pointer> outError, + ) { + return __objc_msgSend_835( + obj, + sel, + url, + options, + originalContentsURL, + outError, + ); + } + + late final __objc_msgSend_835Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_835 = __objc_msgSend_835Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer>)>(); + + late final _sel_serializedRepresentation1 = + _registerName1("serializedRepresentation"); + late final _sel_addFileWrapper_1 = _registerName1("addFileWrapper:"); + ffi.Pointer _objc_msgSend_836( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer child, + ) { + return __objc_msgSend_836( + obj, + sel, + child, + ); + } + + late final __objc_msgSend_836Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_836 = __objc_msgSend_836Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_addRegularFileWithContents_preferredFilename_1 = + _registerName1("addRegularFileWithContents:preferredFilename:"); + ffi.Pointer _objc_msgSend_837( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + ffi.Pointer fileName, + ) { + return __objc_msgSend_837( + obj, + sel, + data, + fileName, + ); + } + + late final __objc_msgSend_837Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_837 = __objc_msgSend_837Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_removeFileWrapper_1 = _registerName1("removeFileWrapper:"); + void _objc_msgSend_838( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer child, + ) { + return __objc_msgSend_838( + obj, + sel, + child, + ); + } + + late final __objc_msgSend_838Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_838 = __objc_msgSend_838Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_fileWrappers1 = _registerName1("fileWrappers"); + late final _sel_keyForFileWrapper_1 = _registerName1("keyForFileWrapper:"); + late final _sel_regularFileContents1 = _registerName1("regularFileContents"); + late final _sel_symbolicLinkDestinationURL1 = + _registerName1("symbolicLinkDestinationURL"); + late final _sel_initSymbolicLinkWithDestination_1 = + _registerName1("initSymbolicLinkWithDestination:"); + late final _sel_needsToBeUpdatedFromPath_1 = + _registerName1("needsToBeUpdatedFromPath:"); + late final _sel_updateFromPath_1 = _registerName1("updateFromPath:"); + late final _sel_writeToFile_atomically_updateFilenames_1 = + _registerName1("writeToFile:atomically:updateFilenames:"); + bool _objc_msgSend_839( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer path, + bool atomicFlag, + bool updateFilenamesFlag, + ) { + return __objc_msgSend_839( + obj, + sel, + path, + atomicFlag, + updateFilenamesFlag, + ); + } + + late final __objc_msgSend_839Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Bool, ffi.Bool)>>('objc_msgSend'); + late final __objc_msgSend_839 = __objc_msgSend_839Ptr.asFunction< + bool Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, bool, bool)>(); + + late final _sel_addFileWithPath_1 = _registerName1("addFileWithPath:"); + late final _sel_addSymbolicLinkWithDestination_preferredFilename_1 = + _registerName1("addSymbolicLinkWithDestination:preferredFilename:"); + late final _sel_symbolicLinkDestination1 = + _registerName1("symbolicLinkDestination"); + late final _class_NSURLSession1 = _getClass1("NSURLSession"); + late final _sel_sharedSession1 = _registerName1("sharedSession"); + ffi.Pointer _objc_msgSend_840( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_840( + obj, + sel, + ); + } + + late final __objc_msgSend_840Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_840 = __objc_msgSend_840Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSURLSessionConfiguration1 = + _getClass1("NSURLSessionConfiguration"); + late final _sel_defaultSessionConfiguration1 = + _registerName1("defaultSessionConfiguration"); + ffi.Pointer _objc_msgSend_841( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_841( + obj, + sel, + ); + } + + late final __objc_msgSend_841Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_841 = __objc_msgSend_841Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_ephemeralSessionConfiguration1 = + _registerName1("ephemeralSessionConfiguration"); + late final _sel_backgroundSessionConfigurationWithIdentifier_1 = + _registerName1("backgroundSessionConfigurationWithIdentifier:"); + ffi.Pointer _objc_msgSend_842( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer identifier, + ) { + return __objc_msgSend_842( + obj, + sel, + identifier, + ); + } + + late final __objc_msgSend_842Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_842 = __objc_msgSend_842Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_identifier1 = _registerName1("identifier"); + late final _sel_requestCachePolicy1 = _registerName1("requestCachePolicy"); + late final _sel_setRequestCachePolicy_1 = + _registerName1("setRequestCachePolicy:"); + late final _sel_timeoutIntervalForRequest1 = + _registerName1("timeoutIntervalForRequest"); + late final _sel_setTimeoutIntervalForRequest_1 = + _registerName1("setTimeoutIntervalForRequest:"); + late final _sel_timeoutIntervalForResource1 = + _registerName1("timeoutIntervalForResource"); + late final _sel_setTimeoutIntervalForResource_1 = + _registerName1("setTimeoutIntervalForResource:"); + late final _sel_waitsForConnectivity1 = + _registerName1("waitsForConnectivity"); + late final _sel_setWaitsForConnectivity_1 = + _registerName1("setWaitsForConnectivity:"); + late final _sel_isDiscretionary1 = _registerName1("isDiscretionary"); + late final _sel_setDiscretionary_1 = _registerName1("setDiscretionary:"); + late final _sel_sharedContainerIdentifier1 = + _registerName1("sharedContainerIdentifier"); + late final _sel_setSharedContainerIdentifier_1 = + _registerName1("setSharedContainerIdentifier:"); + late final _sel_sessionSendsLaunchEvents1 = + _registerName1("sessionSendsLaunchEvents"); + late final _sel_setSessionSendsLaunchEvents_1 = + _registerName1("setSessionSendsLaunchEvents:"); + late final _sel_connectionProxyDictionary1 = + _registerName1("connectionProxyDictionary"); + late final _sel_setConnectionProxyDictionary_1 = + _registerName1("setConnectionProxyDictionary:"); + late final _sel_TLSMinimumSupportedProtocol1 = + _registerName1("TLSMinimumSupportedProtocol"); + int _objc_msgSend_843( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_843( + obj, + sel, + ); + } + + late final __objc_msgSend_843Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_843 = __objc_msgSend_843Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setTLSMinimumSupportedProtocol_1 = + _registerName1("setTLSMinimumSupportedProtocol:"); + void _objc_msgSend_844( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_844( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_844Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_844 = __objc_msgSend_844Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_TLSMaximumSupportedProtocol1 = + _registerName1("TLSMaximumSupportedProtocol"); + late final _sel_setTLSMaximumSupportedProtocol_1 = + _registerName1("setTLSMaximumSupportedProtocol:"); + late final _sel_TLSMinimumSupportedProtocolVersion1 = + _registerName1("TLSMinimumSupportedProtocolVersion"); + int _objc_msgSend_845( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_845( + obj, + sel, + ); + } + + late final __objc_msgSend_845Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_845 = __objc_msgSend_845Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setTLSMinimumSupportedProtocolVersion_1 = + _registerName1("setTLSMinimumSupportedProtocolVersion:"); + void _objc_msgSend_846( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_846( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_846Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_846 = __objc_msgSend_846Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_TLSMaximumSupportedProtocolVersion1 = + _registerName1("TLSMaximumSupportedProtocolVersion"); + late final _sel_setTLSMaximumSupportedProtocolVersion_1 = + _registerName1("setTLSMaximumSupportedProtocolVersion:"); + late final _sel_HTTPShouldSetCookies1 = + _registerName1("HTTPShouldSetCookies"); + late final _sel_setHTTPShouldSetCookies_1 = + _registerName1("setHTTPShouldSetCookies:"); + late final _sel_HTTPCookieAcceptPolicy1 = + _registerName1("HTTPCookieAcceptPolicy"); + late final _sel_setHTTPCookieAcceptPolicy_1 = + _registerName1("setHTTPCookieAcceptPolicy:"); + late final _sel_HTTPAdditionalHeaders1 = + _registerName1("HTTPAdditionalHeaders"); + late final _sel_setHTTPAdditionalHeaders_1 = + _registerName1("setHTTPAdditionalHeaders:"); + late final _sel_HTTPMaximumConnectionsPerHost1 = + _registerName1("HTTPMaximumConnectionsPerHost"); + late final _sel_setHTTPMaximumConnectionsPerHost_1 = + _registerName1("setHTTPMaximumConnectionsPerHost:"); + late final _sel_HTTPCookieStorage1 = _registerName1("HTTPCookieStorage"); + late final _sel_setHTTPCookieStorage_1 = + _registerName1("setHTTPCookieStorage:"); + void _objc_msgSend_847( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_847( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_847Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_847 = __objc_msgSend_847Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLCredentialStorage1 = + _registerName1("URLCredentialStorage"); + late final _sel_setURLCredentialStorage_1 = + _registerName1("setURLCredentialStorage:"); + void _objc_msgSend_848( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer value, + ) { + return __objc_msgSend_848( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_848Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_848 = __objc_msgSend_848Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_URLCache1 = _registerName1("URLCache"); + late final _sel_setURLCache_1 = _registerName1("setURLCache:"); + late final _sel_shouldUseExtendedBackgroundIdleMode1 = + _registerName1("shouldUseExtendedBackgroundIdleMode"); + late final _sel_setShouldUseExtendedBackgroundIdleMode_1 = + _registerName1("setShouldUseExtendedBackgroundIdleMode:"); + late final _sel_protocolClasses1 = _registerName1("protocolClasses"); + late final _sel_setProtocolClasses_1 = _registerName1("setProtocolClasses:"); + late final _sel_multipathServiceType1 = + _registerName1("multipathServiceType"); + int _objc_msgSend_849( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_849( + obj, + sel, + ); + } + + late final __objc_msgSend_849Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_849 = __objc_msgSend_849Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_setMultipathServiceType_1 = + _registerName1("setMultipathServiceType:"); + void _objc_msgSend_850( + ffi.Pointer obj, + ffi.Pointer sel, + int value, + ) { + return __objc_msgSend_850( + obj, + sel, + value, + ); + } + + late final __objc_msgSend_850Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_850 = __objc_msgSend_850Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_backgroundSessionConfiguration_1 = + _registerName1("backgroundSessionConfiguration:"); + late final _sel_sessionWithConfiguration_1 = + _registerName1("sessionWithConfiguration:"); + ffi.Pointer _objc_msgSend_851( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer configuration, + ) { + return __objc_msgSend_851( + obj, + sel, + configuration, + ); + } + + late final __objc_msgSend_851Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_851 = __objc_msgSend_851Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_sessionWithConfiguration_delegate_delegateQueue_1 = + _registerName1("sessionWithConfiguration:delegate:delegateQueue:"); + ffi.Pointer _objc_msgSend_852( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer configuration, + ffi.Pointer delegate, + ffi.Pointer queue, + ) { + return __objc_msgSend_852( + obj, + sel, + configuration, + delegate, + queue, + ); + } + + late final __objc_msgSend_852Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_852 = __objc_msgSend_852Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_delegateQueue1 = _registerName1("delegateQueue"); + late final _sel_configuration1 = _registerName1("configuration"); + late final _sel_sessionDescription1 = _registerName1("sessionDescription"); + late final _sel_setSessionDescription_1 = + _registerName1("setSessionDescription:"); + late final _sel_finishTasksAndInvalidate1 = + _registerName1("finishTasksAndInvalidate"); + late final _sel_invalidateAndCancel1 = _registerName1("invalidateAndCancel"); + late final _sel_resetWithCompletionHandler_1 = + _registerName1("resetWithCompletionHandler:"); + late final _sel_flushWithCompletionHandler_1 = + _registerName1("flushWithCompletionHandler:"); + late final _sel_getTasksWithCompletionHandler_1 = + _registerName1("getTasksWithCompletionHandler:"); + void _objc_msgSend_853( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_853( + obj, + sel, + completionHandler, + ); + } + + late final __objc_msgSend_853Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_853 = __objc_msgSend_853Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_getAllTasksWithCompletionHandler_1 = + _registerName1("getAllTasksWithCompletionHandler:"); + void _objc_msgSend_854( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_854( + obj, + sel, + completionHandler, + ); + } + + late final __objc_msgSend_854Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_854 = __objc_msgSend_854Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_dataTaskWithRequest_1 = + _registerName1("dataTaskWithRequest:"); + ffi.Pointer _objc_msgSend_855( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_855( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_855Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_855 = __objc_msgSend_855Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dataTaskWithURL_1 = _registerName1("dataTaskWithURL:"); + ffi.Pointer _objc_msgSend_856( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_856( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_856Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_856 = __objc_msgSend_856Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSURLSessionUploadTask1 = + _getClass1("NSURLSessionUploadTask"); + late final _sel_uploadTaskWithRequest_fromFile_1 = + _registerName1("uploadTaskWithRequest:fromFile:"); + ffi.Pointer _objc_msgSend_857( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer fileURL, + ) { + return __objc_msgSend_857( + obj, + sel, + request, + fileURL, + ); + } + + late final __objc_msgSend_857Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_857 = __objc_msgSend_857Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_uploadTaskWithRequest_fromData_1 = + _registerName1("uploadTaskWithRequest:fromData:"); + ffi.Pointer _objc_msgSend_858( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer bodyData, + ) { + return __objc_msgSend_858( + obj, + sel, + request, + bodyData, + ); + } + + late final __objc_msgSend_858Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_858 = __objc_msgSend_858Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_uploadTaskWithStreamedRequest_1 = + _registerName1("uploadTaskWithStreamedRequest:"); + ffi.Pointer _objc_msgSend_859( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_859( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_859Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_859 = __objc_msgSend_859Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSURLSessionDownloadTask1 = + _getClass1("NSURLSessionDownloadTask"); + late final _sel_cancelByProducingResumeData_1 = + _registerName1("cancelByProducingResumeData:"); + void _objc_msgSend_860( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_860( + obj, + sel, + completionHandler, + ); + } + + late final __objc_msgSend_860Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_860 = __objc_msgSend_860Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_downloadTaskWithRequest_1 = + _registerName1("downloadTaskWithRequest:"); + ffi.Pointer _objc_msgSend_861( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_861( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_861Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_861 = __objc_msgSend_861Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_downloadTaskWithURL_1 = + _registerName1("downloadTaskWithURL:"); + ffi.Pointer _objc_msgSend_862( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_862( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_862Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_862 = __objc_msgSend_862Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_downloadTaskWithResumeData_1 = + _registerName1("downloadTaskWithResumeData:"); + ffi.Pointer _objc_msgSend_863( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer resumeData, + ) { + return __objc_msgSend_863( + obj, + sel, + resumeData, + ); + } + + late final __objc_msgSend_863Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_863 = __objc_msgSend_863Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSURLSessionStreamTask1 = + _getClass1("NSURLSessionStreamTask"); + late final _sel_readDataOfMinLength_maxLength_timeout_completionHandler_1 = + _registerName1( + "readDataOfMinLength:maxLength:timeout:completionHandler:"); + void _objc_msgSend_864( + ffi.Pointer obj, + ffi.Pointer sel, + int minBytes, + int maxBytes, + double timeout, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_864( + obj, + sel, + minBytes, + maxBytes, + timeout, + completionHandler, + ); + } + + late final __objc_msgSend_864Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.UnsignedLong, + ffi.UnsignedLong, + ffi.Double, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_864 = __objc_msgSend_864Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, int, + double, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_writeData_timeout_completionHandler_1 = + _registerName1("writeData:timeout:completionHandler:"); + void _objc_msgSend_865( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer data, + double timeout, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_865( + obj, + sel, + data, + timeout, + completionHandler, + ); + } + + late final __objc_msgSend_865Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Double, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_865 = __objc_msgSend_865Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, double, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_captureStreams1 = _registerName1("captureStreams"); + late final _sel_closeWrite1 = _registerName1("closeWrite"); + late final _sel_closeRead1 = _registerName1("closeRead"); + late final _sel_startSecureConnection1 = + _registerName1("startSecureConnection"); + late final _sel_stopSecureConnection1 = + _registerName1("stopSecureConnection"); + late final _sel_streamTaskWithHostName_port_1 = + _registerName1("streamTaskWithHostName:port:"); + ffi.Pointer _objc_msgSend_866( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer hostname, + int port, + ) { + return __objc_msgSend_866( + obj, + sel, + hostname, + port, + ); + } + + late final __objc_msgSend_866Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Long)>>('objc_msgSend'); + late final __objc_msgSend_866 = __objc_msgSend_866Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer, int)>(); + + late final _class_NSNetService1 = _getClass1("NSNetService"); + late final _sel_initWithDomain_type_name_port_1 = + _registerName1("initWithDomain:type:name:port:"); + instancetype _objc_msgSend_867( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer domain, + ffi.Pointer type, + ffi.Pointer name, + int port, + ) { + return __objc_msgSend_867( + obj, + sel, + domain, + type, + name, + port, + ); + } + + late final __objc_msgSend_867Ptr = _lookup< + ffi.NativeFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int)>>('objc_msgSend'); + late final __objc_msgSend_867 = __objc_msgSend_867Ptr.asFunction< + instancetype Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int)>(); + + late final _sel_initWithDomain_type_name_1 = + _registerName1("initWithDomain:type:name:"); + late final _sel_includesPeerToPeer1 = _registerName1("includesPeerToPeer"); + late final _sel_setIncludesPeerToPeer_1 = + _registerName1("setIncludesPeerToPeer:"); + late final _sel_type1 = _registerName1("type"); + late final _sel_addresses1 = _registerName1("addresses"); + late final _sel_publishWithOptions_1 = _registerName1("publishWithOptions:"); + void _objc_msgSend_868( + ffi.Pointer obj, + ffi.Pointer sel, + int options, + ) { + return __objc_msgSend_868( + obj, + sel, + options, + ); + } + + late final __objc_msgSend_868Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32)>>('objc_msgSend'); + late final __objc_msgSend_868 = __objc_msgSend_868Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int)>(); + + late final _sel_resolve1 = _registerName1("resolve"); + late final _sel_stop1 = _registerName1("stop"); + late final _sel_dictionaryFromTXTRecordData_1 = + _registerName1("dictionaryFromTXTRecordData:"); + ffi.Pointer _objc_msgSend_869( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer txtData, + ) { + return __objc_msgSend_869( + obj, + sel, + txtData, + ); + } + + late final __objc_msgSend_869Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_869 = __objc_msgSend_869Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dataFromTXTRecordDictionary_1 = + _registerName1("dataFromTXTRecordDictionary:"); + ffi.Pointer _objc_msgSend_870( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer txtDictionary, + ) { + return __objc_msgSend_870( + obj, + sel, + txtDictionary, + ); + } + + late final __objc_msgSend_870Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_870 = __objc_msgSend_870Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_resolveWithTimeout_1 = _registerName1("resolveWithTimeout:"); + late final _sel_getInputStream_outputStream_1 = + _registerName1("getInputStream:outputStream:"); + bool _objc_msgSend_871( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream, + ) { + return __objc_msgSend_871( + obj, + sel, + inputStream, + outputStream, + ); + } + + late final __objc_msgSend_871Ptr = _lookup< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>>('objc_msgSend'); + late final __objc_msgSend_871 = __objc_msgSend_871Ptr.asFunction< + bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer>, + ffi.Pointer>)>(); + + late final _sel_setTXTRecordData_1 = _registerName1("setTXTRecordData:"); + late final _sel_TXTRecordData1 = _registerName1("TXTRecordData"); + late final _sel_startMonitoring1 = _registerName1("startMonitoring"); + late final _sel_stopMonitoring1 = _registerName1("stopMonitoring"); + late final _sel_streamTaskWithNetService_1 = + _registerName1("streamTaskWithNetService:"); + ffi.Pointer _objc_msgSend_872( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer service, + ) { + return __objc_msgSend_872( + obj, + sel, + service, + ); + } + + late final __objc_msgSend_872Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_872 = __objc_msgSend_872Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _class_NSURLSessionWebSocketTask1 = + _getClass1("NSURLSessionWebSocketTask"); + late final _class_NSURLSessionWebSocketMessage1 = + _getClass1("NSURLSessionWebSocketMessage"); + int _objc_msgSend_873( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_873( + obj, + sel, + ); + } + + late final __objc_msgSend_873Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_873 = __objc_msgSend_873Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_sendMessage_completionHandler_1 = + _registerName1("sendMessage:completionHandler:"); + void _objc_msgSend_874( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer message, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_874( + obj, + sel, + message, + completionHandler, + ); + } + + late final __objc_msgSend_874Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_874 = __objc_msgSend_874Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_receiveMessageWithCompletionHandler_1 = + _registerName1("receiveMessageWithCompletionHandler:"); + void _objc_msgSend_875( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_875( + obj, + sel, + completionHandler, + ); + } + + late final __objc_msgSend_875Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_875 = __objc_msgSend_875Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_sendPingWithPongReceiveHandler_1 = + _registerName1("sendPingWithPongReceiveHandler:"); + void _objc_msgSend_876( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> pongReceiveHandler, + ) { + return __objc_msgSend_876( + obj, + sel, + pongReceiveHandler, + ); + } + + late final __objc_msgSend_876Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_876 = __objc_msgSend_876Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_cancelWithCloseCode_reason_1 = + _registerName1("cancelWithCloseCode:reason:"); + void _objc_msgSend_877( + ffi.Pointer obj, + ffi.Pointer sel, + int closeCode, + ffi.Pointer reason, + ) { + return __objc_msgSend_877( + obj, + sel, + closeCode, + reason, + ); + } + + late final __objc_msgSend_877Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Int32, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_877 = __objc_msgSend_877Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, int, + ffi.Pointer)>(); + + late final _sel_maximumMessageSize1 = _registerName1("maximumMessageSize"); + late final _sel_setMaximumMessageSize_1 = + _registerName1("setMaximumMessageSize:"); + late final _sel_closeCode1 = _registerName1("closeCode"); + int _objc_msgSend_878( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_878( + obj, + sel, + ); + } + + late final __objc_msgSend_878Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_878 = __objc_msgSend_878Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_closeReason1 = _registerName1("closeReason"); + late final _sel_webSocketTaskWithURL_1 = + _registerName1("webSocketTaskWithURL:"); + ffi.Pointer _objc_msgSend_879( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ) { + return __objc_msgSend_879( + obj, + sel, + url, + ); + } + + late final __objc_msgSend_879Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_879 = __objc_msgSend_879Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_webSocketTaskWithURL_protocols_1 = + _registerName1("webSocketTaskWithURL:protocols:"); + ffi.Pointer _objc_msgSend_880( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer protocols, + ) { + return __objc_msgSend_880( + obj, + sel, + url, + protocols, + ); + } + + late final __objc_msgSend_880Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_880 = __objc_msgSend_880Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); + + late final _sel_webSocketTaskWithRequest_1 = + _registerName1("webSocketTaskWithRequest:"); + ffi.Pointer _objc_msgSend_881( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ) { + return __objc_msgSend_881( + obj, + sel, + request, + ); + } + + late final __objc_msgSend_881Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_881 = __objc_msgSend_881Ptr.asFunction< + ffi.Pointer Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + late final _sel_dataTaskWithRequest_completionHandler_1 = + _registerName1("dataTaskWithRequest:completionHandler:"); + ffi.Pointer _objc_msgSend_882( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_882( + obj, + sel, + request, + completionHandler, + ); + } + + late final __objc_msgSend_882Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_882 = __objc_msgSend_882Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_dataTaskWithURL_completionHandler_1 = + _registerName1("dataTaskWithURL:completionHandler:"); + ffi.Pointer _objc_msgSend_883( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_883( + obj, + sel, + url, + completionHandler, + ); + } + + late final __objc_msgSend_883Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_883 = __objc_msgSend_883Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_uploadTaskWithRequest_fromFile_completionHandler_1 = + _registerName1("uploadTaskWithRequest:fromFile:completionHandler:"); + ffi.Pointer _objc_msgSend_884( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer fileURL, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_884( + obj, + sel, + request, + fileURL, + completionHandler, + ); + } + + late final __objc_msgSend_884Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_884 = __objc_msgSend_884Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_uploadTaskWithRequest_fromData_completionHandler_1 = + _registerName1("uploadTaskWithRequest:fromData:completionHandler:"); + ffi.Pointer _objc_msgSend_885( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer bodyData, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_885( + obj, + sel, + request, + bodyData, + completionHandler, + ); + } + + late final __objc_msgSend_885Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_885 = __objc_msgSend_885Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_downloadTaskWithRequest_completionHandler_1 = + _registerName1("downloadTaskWithRequest:completionHandler:"); + ffi.Pointer _objc_msgSend_886( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer request, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_886( + obj, + sel, + request, + completionHandler, + ); + } + + late final __objc_msgSend_886Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_886 = __objc_msgSend_886Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_downloadTaskWithURL_completionHandler_1 = + _registerName1("downloadTaskWithURL:completionHandler:"); + ffi.Pointer _objc_msgSend_887( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer url, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_887( + obj, + sel, + url, + completionHandler, + ); + } + + late final __objc_msgSend_887Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_887 = __objc_msgSend_887Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_downloadTaskWithResumeData_completionHandler_1 = + _registerName1("downloadTaskWithResumeData:completionHandler:"); + ffi.Pointer _objc_msgSend_888( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer resumeData, + ffi.Pointer<_ObjCBlock> completionHandler, + ) { + return __objc_msgSend_888( + obj, + sel, + resumeData, + completionHandler, + ); + } + + late final __objc_msgSend_888Ptr = _lookup< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_888 = __objc_msgSend_888Ptr.asFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _class_CMPedometer1 = _getClass1("CMPedometer"); + late final _sel_isStepCountingAvailable1 = + _registerName1("isStepCountingAvailable"); + late final _sel_isDistanceAvailable1 = _registerName1("isDistanceAvailable"); + late final _sel_isFloorCountingAvailable1 = + _registerName1("isFloorCountingAvailable"); + late final _sel_isPaceAvailable1 = _registerName1("isPaceAvailable"); + late final _sel_isCadenceAvailable1 = _registerName1("isCadenceAvailable"); + late final _sel_isPedometerEventTrackingAvailable1 = + _registerName1("isPedometerEventTrackingAvailable"); + late final _sel_authorizationStatus1 = _registerName1("authorizationStatus"); + int _objc_msgSend_889( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_889( + obj, + sel, + ); + } + + late final __objc_msgSend_889Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_889 = __objc_msgSend_889Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _class_CMPedometerData1 = _getClass1("CMPedometerData"); + late final _sel_startDate1 = _registerName1("startDate"); + late final _sel_endDate1 = _registerName1("endDate"); + late final _sel_numberOfSteps1 = _registerName1("numberOfSteps"); + late final _sel_distance1 = _registerName1("distance"); + late final _sel_floorsAscended1 = _registerName1("floorsAscended"); + late final _sel_floorsDescended1 = _registerName1("floorsDescended"); + late final _sel_currentPace1 = _registerName1("currentPace"); + late final _sel_currentCadence1 = _registerName1("currentCadence"); + late final _sel_averageActivePace1 = _registerName1("averageActivePace"); + late final _sel_queryPedometerDataFromDate_toDate_withHandler_1 = + _registerName1("queryPedometerDataFromDate:toDate:withHandler:"); + void _objc_msgSend_890( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer start, + ffi.Pointer end, + ffi.Pointer<_ObjCBlock> handler, + ) { + return __objc_msgSend_890( + obj, + sel, + start, + end, + handler, + ); + } + + late final __objc_msgSend_890Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_890 = __objc_msgSend_890Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_startPedometerUpdatesFromDate_withHandler_1 = + _registerName1("startPedometerUpdatesFromDate:withHandler:"); + void _objc_msgSend_891( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer start, + ffi.Pointer<_ObjCBlock> handler, + ) { + return __objc_msgSend_891( + obj, + sel, + start, + handler, + ); + } + + late final __objc_msgSend_891Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_891 = __objc_msgSend_891Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_stopPedometerUpdates1 = + _registerName1("stopPedometerUpdates"); + late final _class_CMPedometerEvent1 = _getClass1("CMPedometerEvent"); + int _objc_msgSend_892( + ffi.Pointer obj, + ffi.Pointer sel, + ) { + return __objc_msgSend_892( + obj, + sel, + ); + } + + late final __objc_msgSend_892Ptr = _lookup< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer, ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_892 = __objc_msgSend_892Ptr.asFunction< + int Function(ffi.Pointer, ffi.Pointer)>(); + + late final _sel_startPedometerEventUpdatesWithHandler_1 = + _registerName1("startPedometerEventUpdatesWithHandler:"); + void _objc_msgSend_893( + ffi.Pointer obj, + ffi.Pointer sel, + ffi.Pointer<_ObjCBlock> handler, + ) { + return __objc_msgSend_893( + obj, + sel, + handler, + ); + } + + late final __objc_msgSend_893Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>>('objc_msgSend'); + late final __objc_msgSend_893 = __objc_msgSend_893Ptr.asFunction< + void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer<_ObjCBlock>)>(); + + late final _sel_stopPedometerEventUpdates1 = + _registerName1("stopPedometerEventUpdates"); + late final _class_PedometerHelper1 = _getClass1("PedometerHelper"); + late final _sel_startPedometerWithPort_pedometer_start_end_1 = + _registerName1("startPedometerWithPort:pedometer:start:end:"); + void _objc_msgSend_894( + ffi.Pointer obj, + ffi.Pointer sel, + int sendPort, + ffi.Pointer pedometer, + ffi.Pointer start, + ffi.Pointer end, + ) { + return __objc_msgSend_894( + obj, + sel, + sendPort, + pedometer, + start, + end, + ); + } + + late final __objc_msgSend_894Ptr = _lookup< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int64, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>('objc_msgSend'); + late final __objc_msgSend_894 = __objc_msgSend_894Ptr.asFunction< + void Function( + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>(); +} + +class _ObjCWrapper implements ffi.Finalizable { + final ffi.Pointer _id; + final PedometerBindings _lib; + bool _pendingRelease; + + _ObjCWrapper._(this._id, this._lib, + {bool retain = false, bool release = false}) + : _pendingRelease = release { + if (retain) { + _lib._objc_retain(_id.cast()); + } + if (release) { + _lib._objc_releaseFinalizer2.attach(this, _id.cast(), detach: this); + } + } + + /// Releases the reference to the underlying ObjC object held by this wrapper. + /// Throws a StateError if this wrapper doesn't currently hold a reference. + void release() { + if (_pendingRelease) { + _pendingRelease = false; + _lib._objc_release(_id.cast()); + _lib._objc_releaseFinalizer2.detach(this); + } else { + throw StateError( + 'Released an ObjC object that was unowned or already released.'); + } + } + + @override + bool operator ==(Object other) { + return other is _ObjCWrapper && _id == other._id; + } + + @override + int get hashCode => _id.hashCode; +} + +class NSObject extends _ObjCWrapper { + NSObject._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSObject] that points to the same underlying object as [other]. + static NSObject castFrom(T other) { + return NSObject._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSObject] that wraps the given raw object pointer. + static NSObject castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSObject._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSObject]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSObject1); + } + + static void load(PedometerBindings _lib) { + return _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_load1); + } + + static void initialize(PedometerBindings _lib) { + return _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_initialize1); + } + + NSObject init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSObject1, _lib._sel_new1); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + static NSObject allocWithZone_( + PedometerBindings _lib, ffi.Pointer<_NSZone> zone) { + final _ret = _lib._objc_msgSend_3( + _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + static NSObject alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSObject1, _lib._sel_alloc1); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + void dealloc() { + return _lib._objc_msgSend_1(_id, _lib._sel_dealloc1); + } + + void finalize() { + return _lib._objc_msgSend_1(_id, _lib._sel_finalize1); + } + + NSObject copy() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_copy1); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + NSObject mutableCopy() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_mutableCopy1); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + static NSObject copyWithZone_( + PedometerBindings _lib, ffi.Pointer<_NSZone> zone) { + final _ret = _lib._objc_msgSend_3( + _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + static NSObject mutableCopyWithZone_( + PedometerBindings _lib, ffi.Pointer<_NSZone> zone) { + final _ret = _lib._objc_msgSend_3( + _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + static bool instancesRespondToSelector_( + PedometerBindings _lib, ffi.Pointer aSelector) { + return _lib._objc_msgSend_4(_lib._class_NSObject1, + _lib._sel_instancesRespondToSelector_1, aSelector); + } + + static bool conformsToProtocol_(PedometerBindings _lib, Protocol? protocol) { + return _lib._objc_msgSend_5(_lib._class_NSObject1, + _lib._sel_conformsToProtocol_1, protocol?._id ?? ffi.nullptr); + } + + ffi.Pointer> methodForSelector_( + ffi.Pointer aSelector) { + return _lib._objc_msgSend_6(_id, _lib._sel_methodForSelector_1, aSelector); + } + + static ffi.Pointer> + instanceMethodForSelector_( + PedometerBindings _lib, ffi.Pointer aSelector) { + return _lib._objc_msgSend_6(_lib._class_NSObject1, + _lib._sel_instanceMethodForSelector_1, aSelector); + } + + void doesNotRecognizeSelector_(ffi.Pointer aSelector) { + return _lib._objc_msgSend_7( + _id, _lib._sel_doesNotRecognizeSelector_1, aSelector); + } + + NSObject forwardingTargetForSelector_(ffi.Pointer aSelector) { + final _ret = _lib._objc_msgSend_8( + _id, _lib._sel_forwardingTargetForSelector_1, aSelector); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void forwardInvocation_(NSInvocation? anInvocation) { + return _lib._objc_msgSend_353( + _id, _lib._sel_forwardInvocation_1, anInvocation?._id ?? ffi.nullptr); + } + + NSMethodSignature methodSignatureForSelector_( + ffi.Pointer aSelector) { + final _ret = _lib._objc_msgSend_354( + _id, _lib._sel_methodSignatureForSelector_1, aSelector); + return NSMethodSignature._(_ret, _lib, retain: true, release: true); + } + + static NSMethodSignature instanceMethodSignatureForSelector_( + PedometerBindings _lib, ffi.Pointer aSelector) { + final _ret = _lib._objc_msgSend_354(_lib._class_NSObject1, + _lib._sel_instanceMethodSignatureForSelector_1, aSelector); + return NSMethodSignature._(_ret, _lib, retain: true, release: true); + } + + bool allowsWeakReference() { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsWeakReference1); + } + + bool retainWeakReference() { + return _lib._objc_msgSend_12(_id, _lib._sel_retainWeakReference1); + } + + static bool isSubclassOfClass_(PedometerBindings _lib, NSObject aClass) { + return _lib._objc_msgSend_0( + _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id); + } + + static bool resolveClassMethod_( + PedometerBindings _lib, ffi.Pointer sel) { + return _lib._objc_msgSend_4( + _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel); + } + + static bool resolveInstanceMethod_( + PedometerBindings _lib, ffi.Pointer sel) { + return _lib._objc_msgSend_4( + _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel); + } + + static int hash(PedometerBindings _lib) { + return _lib._objc_msgSend_10(_lib._class_NSObject1, _lib._sel_hash1); + } + + static NSObject superclass(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSObject1, _lib._sel_superclass1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject class1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSObject1, _lib._sel_class1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSString description(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_20(_lib._class_NSObject1, _lib._sel_description1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString debugDescription(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_20( + _lib._class_NSObject1, _lib._sel_debugDescription1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int version(PedometerBindings _lib) { + return _lib._objc_msgSend_70(_lib._class_NSObject1, _lib._sel_version1); + } + + static void setVersion_(PedometerBindings _lib, int aVersion) { + return _lib._objc_msgSend_355( + _lib._class_NSObject1, _lib._sel_setVersion_1, aVersion); + } + + NSObject get classForCoder { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_classForCoder1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject replacementObjectForCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_replacementObjectForCoder_1, coder?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject awakeAfterUsingCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_awakeAfterUsingCoder_1, coder?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + static void poseAsClass_(PedometerBindings _lib, NSObject aClass) { + return _lib._objc_msgSend_15( + _lib._class_NSObject1, _lib._sel_poseAsClass_1, aClass._id); + } + + NSObject get autoContentAccessingProxy { + final _ret = + _lib._objc_msgSend_2(_id, _lib._sel_autoContentAccessingProxy1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void + attemptRecoveryFromError_optionIndex_delegate_didRecoverSelector_contextInfo_( + NSError? error, + int recoveryOptionIndex, + NSObject delegate, + ffi.Pointer didRecoverSelector, + ffi.Pointer contextInfo) { + return _lib._objc_msgSend_356( + _id, + _lib._sel_attemptRecoveryFromError_optionIndex_delegate_didRecoverSelector_contextInfo_1, + error?._id ?? ffi.nullptr, + recoveryOptionIndex, + delegate._id, + didRecoverSelector, + contextInfo); + } + + bool attemptRecoveryFromError_optionIndex_( + NSError? error, int recoveryOptionIndex) { + return _lib._objc_msgSend_357( + _id, + _lib._sel_attemptRecoveryFromError_optionIndex_1, + error?._id ?? ffi.nullptr, + recoveryOptionIndex); + } + + void performSelector_withObject_afterDelay_inModes_( + ffi.Pointer aSelector, + NSObject anArgument, + double delay, + NSArray? modes) { + return _lib._objc_msgSend_358( + _id, + _lib._sel_performSelector_withObject_afterDelay_inModes_1, + aSelector, + anArgument._id, + delay, + modes?._id ?? ffi.nullptr); + } + + void performSelector_withObject_afterDelay_( + ffi.Pointer aSelector, NSObject anArgument, double delay) { + return _lib._objc_msgSend_359( + _id, + _lib._sel_performSelector_withObject_afterDelay_1, + aSelector, + anArgument._id, + delay); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSObject1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSObject1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + void URL_resourceDataDidBecomeAvailable_(NSURL? sender, NSData? newBytes) { + return _lib._objc_msgSend_360( + _id, + _lib._sel_URL_resourceDataDidBecomeAvailable_1, + sender?._id ?? ffi.nullptr, + newBytes?._id ?? ffi.nullptr); + } + + void URLResourceDidFinishLoading_(NSURL? sender) { + return _lib._objc_msgSend_361(_id, _lib._sel_URLResourceDidFinishLoading_1, + sender?._id ?? ffi.nullptr); + } + + void URLResourceDidCancelLoading_(NSURL? sender) { + return _lib._objc_msgSend_361(_id, _lib._sel_URLResourceDidCancelLoading_1, + sender?._id ?? ffi.nullptr); + } + + void URL_resourceDidFailLoadingWithReason_(NSURL? sender, NSString? reason) { + return _lib._objc_msgSend_362( + _id, + _lib._sel_URL_resourceDidFailLoadingWithReason_1, + sender?._id ?? ffi.nullptr, + reason?._id ?? ffi.nullptr); + } + + bool fileManager_shouldProceedAfterError_( + NSFileManager? fm, NSDictionary? errorInfo) { + return _lib._objc_msgSend_398( + _id, + _lib._sel_fileManager_shouldProceedAfterError_1, + fm?._id ?? ffi.nullptr, + errorInfo?._id ?? ffi.nullptr); + } + + void fileManager_willProcessPath_(NSFileManager? fm, NSString? path) { + return _lib._objc_msgSend_399(_id, _lib._sel_fileManager_willProcessPath_1, + fm?._id ?? ffi.nullptr, path?._id ?? ffi.nullptr); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSObject1, _lib._sel_accessInstanceVariablesDirectly1); + } + + NSObject valueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void setValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setValue_forKey_1, value._id, key?._id ?? ffi.nullptr); + } + + bool validateValue_forKey_error_(ffi.Pointer> ioValue, + NSString? inKey, ffi.Pointer> outError) { + return _lib._objc_msgSend_184(_id, _lib._sel_validateValue_forKey_error_1, + ioValue, inKey?._id ?? ffi.nullptr, outError); + } + + NSMutableArray mutableArrayValueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_416( + _id, _lib._sel_mutableArrayValueForKey_1, key?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + NSMutableOrderedSet mutableOrderedSetValueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_435( + _id, _lib._sel_mutableOrderedSetValueForKey_1, key?._id ?? ffi.nullptr); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSMutableSet mutableSetValueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_436( + _id, _lib._sel_mutableSetValueForKey_1, key?._id ?? ffi.nullptr); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + NSObject valueForKeyPath_(NSString? keyPath) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForKeyPath_1, keyPath?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void setValue_forKeyPath_(NSObject value, NSString? keyPath) { + return _lib._objc_msgSend_118(_id, _lib._sel_setValue_forKeyPath_1, + value._id, keyPath?._id ?? ffi.nullptr); + } + + bool validateValue_forKeyPath_error_( + ffi.Pointer> ioValue, + NSString? inKeyPath, + ffi.Pointer> outError) { + return _lib._objc_msgSend_184( + _id, + _lib._sel_validateValue_forKeyPath_error_1, + ioValue, + inKeyPath?._id ?? ffi.nullptr, + outError); + } + + NSMutableArray mutableArrayValueForKeyPath_(NSString? keyPath) { + final _ret = _lib._objc_msgSend_416(_id, + _lib._sel_mutableArrayValueForKeyPath_1, keyPath?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + NSMutableOrderedSet mutableOrderedSetValueForKeyPath_(NSString? keyPath) { + final _ret = _lib._objc_msgSend_435( + _id, + _lib._sel_mutableOrderedSetValueForKeyPath_1, + keyPath?._id ?? ffi.nullptr); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSMutableSet mutableSetValueForKeyPath_(NSString? keyPath) { + final _ret = _lib._objc_msgSend_436(_id, + _lib._sel_mutableSetValueForKeyPath_1, keyPath?._id ?? ffi.nullptr); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + NSObject valueForUndefinedKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForUndefinedKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void setValue_forUndefinedKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118(_id, _lib._sel_setValue_forUndefinedKey_1, + value._id, key?._id ?? ffi.nullptr); + } + + void setNilValueForKey_(NSString? key) { + return _lib._objc_msgSend_188( + _id, _lib._sel_setNilValueForKey_1, key?._id ?? ffi.nullptr); + } + + NSDictionary dictionaryWithValuesForKeys_(NSArray? keys) { + final _ret = _lib._objc_msgSend_437( + _id, _lib._sel_dictionaryWithValuesForKeys_1, keys?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + void setValuesForKeysWithDictionary_(NSDictionary? keyedValues) { + return _lib._objc_msgSend_438( + _id, + _lib._sel_setValuesForKeysWithDictionary_1, + keyedValues?._id ?? ffi.nullptr); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSObject1, _lib._sel_useStoredAccessor1); + } + + NSObject storedValueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_storedValueForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void takeStoredValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118(_id, _lib._sel_takeStoredValue_forKey_1, + value._id, key?._id ?? ffi.nullptr); + } + + void takeValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_takeValue_forKey_1, value._id, key?._id ?? ffi.nullptr); + } + + void takeValue_forKeyPath_(NSObject value, NSString? keyPath) { + return _lib._objc_msgSend_118(_id, _lib._sel_takeValue_forKeyPath_1, + value._id, keyPath?._id ?? ffi.nullptr); + } + + NSObject handleQueryWithUnboundKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_handleQueryWithUnboundKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void handleTakeValue_forUnboundKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, + _lib._sel_handleTakeValue_forUnboundKey_1, + value._id, + key?._id ?? ffi.nullptr); + } + + void unableToSetNilForKey_(NSString? key) { + return _lib._objc_msgSend_188( + _id, _lib._sel_unableToSetNilForKey_1, key?._id ?? ffi.nullptr); + } + + NSDictionary valuesForKeys_(NSArray? keys) { + final _ret = _lib._objc_msgSend_437( + _id, _lib._sel_valuesForKeys_1, keys?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + void takeValuesFromDictionary_(NSDictionary? properties) { + return _lib._objc_msgSend_438(_id, _lib._sel_takeValuesFromDictionary_1, + properties?._id ?? ffi.nullptr); + } + + void observeValueForKeyPath_ofObject_change_context_(NSString? keyPath, + NSObject object, NSDictionary? change, ffi.Pointer context) { + return _lib._objc_msgSend_439( + _id, + _lib._sel_observeValueForKeyPath_ofObject_change_context_1, + keyPath?._id ?? ffi.nullptr, + object._id, + change?._id ?? ffi.nullptr, + context); + } + + void addObserver_forKeyPath_options_context_(NSObject? observer, + NSString? keyPath, int options, ffi.Pointer context) { + return _lib._objc_msgSend_122( + _id, + _lib._sel_addObserver_forKeyPath_options_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + options, + context); + } + + void removeObserver_forKeyPath_context_( + NSObject? observer, NSString? keyPath, ffi.Pointer context) { + return _lib._objc_msgSend_123( + _id, + _lib._sel_removeObserver_forKeyPath_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + context); + } + + void removeObserver_forKeyPath_(NSObject? observer, NSString? keyPath) { + return _lib._objc_msgSend_124(_id, _lib._sel_removeObserver_forKeyPath_1, + observer?._id ?? ffi.nullptr, keyPath?._id ?? ffi.nullptr); + } + + void willChangeValueForKey_(NSString? key) { + return _lib._objc_msgSend_188( + _id, _lib._sel_willChangeValueForKey_1, key?._id ?? ffi.nullptr); + } + + void didChangeValueForKey_(NSString? key) { + return _lib._objc_msgSend_188( + _id, _lib._sel_didChangeValueForKey_1, key?._id ?? ffi.nullptr); + } + + void willChange_valuesAtIndexes_forKey_( + int changeKind, NSIndexSet? indexes, NSString? key) { + return _lib._objc_msgSend_440( + _id, + _lib._sel_willChange_valuesAtIndexes_forKey_1, + changeKind, + indexes?._id ?? ffi.nullptr, + key?._id ?? ffi.nullptr); + } + + void didChange_valuesAtIndexes_forKey_( + int changeKind, NSIndexSet? indexes, NSString? key) { + return _lib._objc_msgSend_440( + _id, + _lib._sel_didChange_valuesAtIndexes_forKey_1, + changeKind, + indexes?._id ?? ffi.nullptr, + key?._id ?? ffi.nullptr); + } + + void willChangeValueForKey_withSetMutation_usingObjects_( + NSString? key, int mutationKind, NSSet? objects) { + return _lib._objc_msgSend_441( + _id, + _lib._sel_willChangeValueForKey_withSetMutation_usingObjects_1, + key?._id ?? ffi.nullptr, + mutationKind, + objects?._id ?? ffi.nullptr); + } + + void didChangeValueForKey_withSetMutation_usingObjects_( + NSString? key, int mutationKind, NSSet? objects) { + return _lib._objc_msgSend_441( + _id, + _lib._sel_didChangeValueForKey_withSetMutation_usingObjects_1, + key?._id ?? ffi.nullptr, + mutationKind, + objects?._id ?? ffi.nullptr); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSObject1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSObject1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + ffi.Pointer get observationInfo { + return _lib._objc_msgSend_19(_id, _lib._sel_observationInfo1); + } + + set observationInfo(ffi.Pointer value) { + _lib._objc_msgSend_442(_id, _lib._sel_setObservationInfo_1, value); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSObject1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + NSObject get classForKeyedArchiver { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_classForKeyedArchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject replacementObjectForKeyedArchiver_(NSKeyedArchiver? archiver) { + final _ret = _lib._objc_msgSend_454( + _id, + _lib._sel_replacementObjectForKeyedArchiver_1, + archiver?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSObject1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSObject1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void performSelectorOnMainThread_withObject_waitUntilDone_modes_( + ffi.Pointer aSelector, NSObject arg, bool wait, NSArray? array) { + return _lib._objc_msgSend_455( + _id, + _lib._sel_performSelectorOnMainThread_withObject_waitUntilDone_modes_1, + aSelector, + arg._id, + wait, + array?._id ?? ffi.nullptr); + } + + void performSelectorOnMainThread_withObject_waitUntilDone_( + ffi.Pointer aSelector, NSObject arg, bool wait) { + return _lib._objc_msgSend_456( + _id, + _lib._sel_performSelectorOnMainThread_withObject_waitUntilDone_1, + aSelector, + arg._id, + wait); + } + + void performSelector_onThread_withObject_waitUntilDone_modes_( + ffi.Pointer aSelector, + NSThread? thr, + NSObject arg, + bool wait, + NSArray? array) { + return _lib._objc_msgSend_473( + _id, + _lib._sel_performSelector_onThread_withObject_waitUntilDone_modes_1, + aSelector, + thr?._id ?? ffi.nullptr, + arg._id, + wait, + array?._id ?? ffi.nullptr); + } + + void performSelector_onThread_withObject_waitUntilDone_( + ffi.Pointer aSelector, NSThread? thr, NSObject arg, bool wait) { + return _lib._objc_msgSend_474( + _id, + _lib._sel_performSelector_onThread_withObject_waitUntilDone_1, + aSelector, + thr?._id ?? ffi.nullptr, + arg._id, + wait); + } + + void performSelectorInBackground_withObject_( + ffi.Pointer aSelector, NSObject arg) { + return _lib._objc_msgSend_76(_id, + _lib._sel_performSelectorInBackground_withObject_1, aSelector, arg._id); + } +} + +class ObjCSel extends ffi.Opaque {} + +class ObjCObject extends ffi.Opaque {} + +typedef instancetype = ffi.Pointer; + +class _NSZone extends ffi.Opaque {} + +class Protocol extends _ObjCWrapper { + Protocol._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [Protocol] that points to the same underlying object as [other]. + static Protocol castFrom(T other) { + return Protocol._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [Protocol] that wraps the given raw object pointer. + static Protocol castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return Protocol._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [Protocol]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_Protocol1); + } +} + +class NSInvocation extends NSObject { + NSInvocation._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSInvocation] that points to the same underlying object as [other]. + static NSInvocation castFrom(T other) { + return NSInvocation._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSInvocation] that wraps the given raw object pointer. + static NSInvocation castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSInvocation._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSInvocation]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSInvocation1); + } + + static NSInvocation invocationWithMethodSignature_( + PedometerBindings _lib, NSMethodSignature? sig) { + final _ret = _lib._objc_msgSend_346(_lib._class_NSInvocation1, + _lib._sel_invocationWithMethodSignature_1, sig?._id ?? ffi.nullptr); + return NSInvocation._(_ret, _lib, retain: true, release: true); + } + + NSMethodSignature? get methodSignature { + final _ret = _lib._objc_msgSend_347(_id, _lib._sel_methodSignature1); + return _ret.address == 0 + ? null + : NSMethodSignature._(_ret, _lib, retain: true, release: true); + } + + void retainArguments() { + return _lib._objc_msgSend_1(_id, _lib._sel_retainArguments1); + } + + bool get argumentsRetained { + return _lib._objc_msgSend_12(_id, _lib._sel_argumentsRetained1); + } + + NSObject get target { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_target1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + set target(NSObject value) { + _lib._objc_msgSend_348(_id, _lib._sel_setTarget_1, value._id); + } + + ffi.Pointer get selector { + return _lib._objc_msgSend_349(_id, _lib._sel_selector1); + } + + set selector(ffi.Pointer value) { + _lib._objc_msgSend_350(_id, _lib._sel_setSelector_1, value); + } + + void getReturnValue_(ffi.Pointer retLoc) { + return _lib._objc_msgSend_47(_id, _lib._sel_getReturnValue_1, retLoc); + } + + void setReturnValue_(ffi.Pointer retLoc) { + return _lib._objc_msgSend_47(_id, _lib._sel_setReturnValue_1, retLoc); + } + + void getArgument_atIndex_(ffi.Pointer argumentLocation, int idx) { + return _lib._objc_msgSend_351( + _id, _lib._sel_getArgument_atIndex_1, argumentLocation, idx); + } + + void setArgument_atIndex_(ffi.Pointer argumentLocation, int idx) { + return _lib._objc_msgSend_351( + _id, _lib._sel_setArgument_atIndex_1, argumentLocation, idx); + } + + void invoke() { + return _lib._objc_msgSend_1(_id, _lib._sel_invoke1); + } + + void invokeWithTarget_(NSObject target) { + return _lib._objc_msgSend_15(_id, _lib._sel_invokeWithTarget_1, target._id); + } + + void invokeUsingIMP_( + ffi.Pointer> imp) { + return _lib._objc_msgSend_352(_id, _lib._sel_invokeUsingIMP_1, imp); + } + + static NSInvocation new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSInvocation1, _lib._sel_new1); + return NSInvocation._(_ret, _lib, retain: false, release: true); + } + + static NSInvocation alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSInvocation1, _lib._sel_alloc1); + return NSInvocation._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSInvocation1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSInvocation1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSInvocation1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSInvocation1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSInvocation1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSInvocation1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSInvocation1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSInvocation1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSInvocation1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSMethodSignature extends NSObject { + NSMethodSignature._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMethodSignature] that points to the same underlying object as [other]. + static NSMethodSignature castFrom(T other) { + return NSMethodSignature._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMethodSignature] that wraps the given raw object pointer. + static NSMethodSignature castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMethodSignature._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMethodSignature]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMethodSignature1); + } + + static NSMethodSignature signatureWithObjCTypes_( + PedometerBindings _lib, ffi.Pointer types) { + final _ret = _lib._objc_msgSend_9(_lib._class_NSMethodSignature1, + _lib._sel_signatureWithObjCTypes_1, types); + return NSMethodSignature._(_ret, _lib, retain: true, release: true); + } + + int get numberOfArguments { + return _lib._objc_msgSend_10(_id, _lib._sel_numberOfArguments1); + } + + ffi.Pointer getArgumentTypeAtIndex_(int idx) { + return _lib._objc_msgSend_11(_id, _lib._sel_getArgumentTypeAtIndex_1, idx); + } + + int get frameLength { + return _lib._objc_msgSend_10(_id, _lib._sel_frameLength1); + } + + bool isOneway() { + return _lib._objc_msgSend_12(_id, _lib._sel_isOneway1); + } + + ffi.Pointer get methodReturnType { + return _lib._objc_msgSend_13(_id, _lib._sel_methodReturnType1); + } + + int get methodReturnLength { + return _lib._objc_msgSend_10(_id, _lib._sel_methodReturnLength1); + } + + static NSMethodSignature new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMethodSignature1, _lib._sel_new1); + return NSMethodSignature._(_ret, _lib, retain: false, release: true); + } + + static NSMethodSignature alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMethodSignature1, _lib._sel_alloc1); + return NSMethodSignature._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMethodSignature1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMethodSignature1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMethodSignature1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMethodSignature1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMethodSignature1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMethodSignature1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMethodSignature1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMethodSignature1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMethodSignature1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Immutable Set +class NSSet extends NSObject { + NSSet._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSSet] that points to the same underlying object as [other]. + static NSSet castFrom(T other) { + return NSSet._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSSet] that wraps the given raw object pointer. + static NSSet castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSSet._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSSet]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSSet1); + } + + int get count { + return _lib._objc_msgSend_10(_id, _lib._sel_count1); + } + + NSObject member_(NSObject object) { + final _ret = _lib._objc_msgSend_16(_id, _lib._sel_member_1, object._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSEnumerator objectEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_objectEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + @override + NSSet init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet initWithObjects_count_( + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53( + _id, _lib._sel_initWithObjects_count_1, objects, cnt); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSArray? get allObjects { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_allObjects1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject anyObject() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_anyObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool containsObject_(NSObject anObject) { + return _lib._objc_msgSend_0(_id, _lib._sel_containsObject_1, anObject._id); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_(NSObject locale) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_descriptionWithLocale_1, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool intersectsSet_(NSSet? otherSet) { + return _lib._objc_msgSend_335( + _id, _lib._sel_intersectsSet_1, otherSet?._id ?? ffi.nullptr); + } + + bool isEqualToSet_(NSSet? otherSet) { + return _lib._objc_msgSend_335( + _id, _lib._sel_isEqualToSet_1, otherSet?._id ?? ffi.nullptr); + } + + bool isSubsetOfSet_(NSSet? otherSet) { + return _lib._objc_msgSend_335( + _id, _lib._sel_isSubsetOfSet_1, otherSet?._id ?? ffi.nullptr); + } + + void makeObjectsPerformSelector_(ffi.Pointer aSelector) { + return _lib._objc_msgSend_7( + _id, _lib._sel_makeObjectsPerformSelector_1, aSelector); + } + + void makeObjectsPerformSelector_withObject_( + ffi.Pointer aSelector, NSObject argument) { + return _lib._objc_msgSend_76( + _id, + _lib._sel_makeObjectsPerformSelector_withObject_1, + aSelector, + argument._id); + } + + NSSet setByAddingObject_(NSObject anObject) { + final _ret = _lib._objc_msgSend_336( + _id, _lib._sel_setByAddingObject_1, anObject._id); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet setByAddingObjectsFromSet_(NSSet? other) { + final _ret = _lib._objc_msgSend_337( + _id, _lib._sel_setByAddingObjectsFromSet_1, other?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet setByAddingObjectsFromArray_(NSArray? other) { + final _ret = _lib._objc_msgSend_338(_id, + _lib._sel_setByAddingObjectsFromArray_1, other?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + void enumerateObjectsUsingBlock_(ObjCBlock16 block) { + return _lib._objc_msgSend_339( + _id, _lib._sel_enumerateObjectsUsingBlock_1, block._id); + } + + void enumerateObjectsWithOptions_usingBlock_(int opts, ObjCBlock16 block) { + return _lib._objc_msgSend_340(_id, + _lib._sel_enumerateObjectsWithOptions_usingBlock_1, opts, block._id); + } + + NSSet objectsPassingTest_(ObjCBlock17 predicate) { + final _ret = _lib._objc_msgSend_341( + _id, _lib._sel_objectsPassingTest_1, predicate._id); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet objectsWithOptions_passingTest_(int opts, ObjCBlock17 predicate) { + final _ret = _lib._objc_msgSend_342( + _id, _lib._sel_objectsWithOptions_passingTest_1, opts, predicate._id); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet set1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSSet1, _lib._sel_set1); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet setWithObject_(PedometerBindings _lib, NSObject object) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSSet1, _lib._sel_setWithObject_1, object._id); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet setWithObjects_count_(PedometerBindings _lib, + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53( + _lib._class_NSSet1, _lib._sel_setWithObjects_count_1, objects, cnt); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet setWithObjects_(PedometerBindings _lib, NSObject firstObj) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSSet1, _lib._sel_setWithObjects_1, firstObj._id); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet setWithSet_(PedometerBindings _lib, NSSet? set) { + final _ret = _lib._objc_msgSend_343( + _lib._class_NSSet1, _lib._sel_setWithSet_1, set?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet setWithArray_(PedometerBindings _lib, NSArray? array) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSSet1, + _lib._sel_setWithArray_1, array?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet initWithObjects_(NSObject firstObj) { + final _ret = + _lib._objc_msgSend_16(_id, _lib._sel_initWithObjects_1, firstObj._id); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet initWithSet_(NSSet? set) { + final _ret = _lib._objc_msgSend_343( + _id, _lib._sel_initWithSet_1, set?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + NSSet initWithSet_copyItems_(NSSet? set, bool flag) { + final _ret = _lib._objc_msgSend_344( + _id, _lib._sel_initWithSet_copyItems_1, set?._id ?? ffi.nullptr, flag); + return NSSet._(_ret, _lib, retain: false, release: true); + } + + NSSet initWithArray_(NSArray? array) { + final _ret = _lib._objc_msgSend_59( + _id, _lib._sel_initWithArray_1, array?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + @override + NSObject valueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + @override + void setValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setValue_forKey_1, value._id, key?._id ?? ffi.nullptr); + } + + @override + void addObserver_forKeyPath_options_context_(NSObject? observer, + NSString? keyPath, int options, ffi.Pointer context) { + return _lib._objc_msgSend_122( + _id, + _lib._sel_addObserver_forKeyPath_options_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + options, + context); + } + + @override + void removeObserver_forKeyPath_context_( + NSObject? observer, NSString? keyPath, ffi.Pointer context) { + return _lib._objc_msgSend_123( + _id, + _lib._sel_removeObserver_forKeyPath_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + context); + } + + @override + void removeObserver_forKeyPath_(NSObject? observer, NSString? keyPath) { + return _lib._objc_msgSend_124(_id, _lib._sel_removeObserver_forKeyPath_1, + observer?._id ?? ffi.nullptr, keyPath?._id ?? ffi.nullptr); + } + + NSArray sortedArrayUsingDescriptors_(NSArray? sortDescriptors) { + final _ret = _lib._objc_msgSend_55( + _id, + _lib._sel_sortedArrayUsingDescriptors_1, + sortDescriptors?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSSet filteredSetUsingPredicate_(NSPredicate? predicate) { + final _ret = _lib._objc_msgSend_345(_id, + _lib._sel_filteredSetUsingPredicate_1, predicate?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static NSSet new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSSet1, _lib._sel_new1); + return NSSet._(_ret, _lib, retain: false, release: true); + } + + static NSSet alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSSet1, _lib._sel_alloc1); + return NSSet._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSSet1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSSet1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSSet1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSSet1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSSet1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSSet1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSSet1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSEnumerator extends NSObject { + NSEnumerator._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSEnumerator] that points to the same underlying object as [other]. + static NSEnumerator castFrom(T other) { + return NSEnumerator._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSEnumerator] that wraps the given raw object pointer. + static NSEnumerator castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSEnumerator._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSEnumerator]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSEnumerator1); + } + + NSObject nextObject() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_nextObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject? get allObjects { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_allObjects1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSEnumerator new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSEnumerator1, _lib._sel_new1); + return NSEnumerator._(_ret, _lib, retain: false, release: true); + } + + static NSEnumerator alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSEnumerator1, _lib._sel_alloc1); + return NSEnumerator._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSEnumerator1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSEnumerator1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSEnumerator1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSEnumerator1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSEnumerator1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSEnumerator1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSEnumerator1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSEnumerator1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSEnumerator1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSString extends NSObject { + NSString._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSString] that points to the same underlying object as [other]. + static NSString castFrom(T other) { + return NSString._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSString] that wraps the given raw object pointer. + static NSString castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSString._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSString]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSString1); + } + + factory NSString(PedometerBindings _lib, String str) { + final cstr = str.toNativeUtf16(); + final nsstr = stringWithCharacters_length_(_lib, cstr.cast(), str.length); + pkg_ffi.calloc.free(cstr); + return nsstr; + } + + @override + String toString() { + final data = + dataUsingEncoding_(0x94000100 /* NSUTF16LittleEndianStringEncoding */); + return data.bytes.cast().toDartString(length: length); + } + + int get length { + return _lib._objc_msgSend_10(_id, _lib._sel_length1); + } + + int characterAtIndex_(int index) { + return _lib._objc_msgSend_17(_id, _lib._sel_characterAtIndex_1, index); + } + + @override + NSString init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString substringFromIndex_(int from) { + final _ret = + _lib._objc_msgSend_253(_id, _lib._sel_substringFromIndex_1, from); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString substringToIndex_(int to) { + final _ret = _lib._objc_msgSend_253(_id, _lib._sel_substringToIndex_1, to); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString substringWithRange_(_NSRange range) { + final _ret = + _lib._objc_msgSend_254(_id, _lib._sel_substringWithRange_1, range); + return NSString._(_ret, _lib, retain: true, release: true); + } + + void getCharacters_range_( + ffi.Pointer buffer, _NSRange range) { + return _lib._objc_msgSend_255( + _id, _lib._sel_getCharacters_range_1, buffer, range); + } + + int compare_(NSString? string) { + return _lib._objc_msgSend_256( + _id, _lib._sel_compare_1, string?._id ?? ffi.nullptr); + } + + int compare_options_(NSString? string, int mask) { + return _lib._objc_msgSend_257( + _id, _lib._sel_compare_options_1, string?._id ?? ffi.nullptr, mask); + } + + int compare_options_range_( + NSString? string, int mask, _NSRange rangeOfReceiverToCompare) { + return _lib._objc_msgSend_258(_id, _lib._sel_compare_options_range_1, + string?._id ?? ffi.nullptr, mask, rangeOfReceiverToCompare); + } + + int compare_options_range_locale_(NSString? string, int mask, + _NSRange rangeOfReceiverToCompare, NSObject locale) { + return _lib._objc_msgSend_259(_id, _lib._sel_compare_options_range_locale_1, + string?._id ?? ffi.nullptr, mask, rangeOfReceiverToCompare, locale._id); + } + + int caseInsensitiveCompare_(NSString? string) { + return _lib._objc_msgSend_256( + _id, _lib._sel_caseInsensitiveCompare_1, string?._id ?? ffi.nullptr); + } + + int localizedCompare_(NSString? string) { + return _lib._objc_msgSend_256( + _id, _lib._sel_localizedCompare_1, string?._id ?? ffi.nullptr); + } + + int localizedCaseInsensitiveCompare_(NSString? string) { + return _lib._objc_msgSend_256( + _id, + _lib._sel_localizedCaseInsensitiveCompare_1, + string?._id ?? ffi.nullptr); + } + + int localizedStandardCompare_(NSString? string) { + return _lib._objc_msgSend_256( + _id, _lib._sel_localizedStandardCompare_1, string?._id ?? ffi.nullptr); + } + + bool isEqualToString_(NSString? aString) { + return _lib._objc_msgSend_51( + _id, _lib._sel_isEqualToString_1, aString?._id ?? ffi.nullptr); + } + + bool hasPrefix_(NSString? str) { + return _lib._objc_msgSend_51( + _id, _lib._sel_hasPrefix_1, str?._id ?? ffi.nullptr); + } + + bool hasSuffix_(NSString? str) { + return _lib._objc_msgSend_51( + _id, _lib._sel_hasSuffix_1, str?._id ?? ffi.nullptr); + } + + NSString commonPrefixWithString_options_(NSString? str, int mask) { + final _ret = _lib._objc_msgSend_260( + _id, + _lib._sel_commonPrefixWithString_options_1, + str?._id ?? ffi.nullptr, + mask); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool containsString_(NSString? str) { + return _lib._objc_msgSend_51( + _id, _lib._sel_containsString_1, str?._id ?? ffi.nullptr); + } + + bool localizedCaseInsensitiveContainsString_(NSString? str) { + return _lib._objc_msgSend_51( + _id, + _lib._sel_localizedCaseInsensitiveContainsString_1, + str?._id ?? ffi.nullptr); + } + + bool localizedStandardContainsString_(NSString? str) { + return _lib._objc_msgSend_51(_id, + _lib._sel_localizedStandardContainsString_1, str?._id ?? ffi.nullptr); + } + + _NSRange localizedStandardRangeOfString_(NSString? str) { + return _lib._objc_msgSend_261(_id, + _lib._sel_localizedStandardRangeOfString_1, str?._id ?? ffi.nullptr); + } + + _NSRange rangeOfString_(NSString? searchString) { + return _lib._objc_msgSend_261( + _id, _lib._sel_rangeOfString_1, searchString?._id ?? ffi.nullptr); + } + + _NSRange rangeOfString_options_(NSString? searchString, int mask) { + return _lib._objc_msgSend_262(_id, _lib._sel_rangeOfString_options_1, + searchString?._id ?? ffi.nullptr, mask); + } + + _NSRange rangeOfString_options_range_( + NSString? searchString, int mask, _NSRange rangeOfReceiverToSearch) { + return _lib._objc_msgSend_263(_id, _lib._sel_rangeOfString_options_range_1, + searchString?._id ?? ffi.nullptr, mask, rangeOfReceiverToSearch); + } + + _NSRange rangeOfString_options_range_locale_(NSString? searchString, int mask, + _NSRange rangeOfReceiverToSearch, NSLocale? locale) { + return _lib._objc_msgSend_278( + _id, + _lib._sel_rangeOfString_options_range_locale_1, + searchString?._id ?? ffi.nullptr, + mask, + rangeOfReceiverToSearch, + locale?._id ?? ffi.nullptr); + } + + _NSRange rangeOfCharacterFromSet_(NSCharacterSet? searchSet) { + return _lib._objc_msgSend_279(_id, _lib._sel_rangeOfCharacterFromSet_1, + searchSet?._id ?? ffi.nullptr); + } + + _NSRange rangeOfCharacterFromSet_options_( + NSCharacterSet? searchSet, int mask) { + return _lib._objc_msgSend_280( + _id, + _lib._sel_rangeOfCharacterFromSet_options_1, + searchSet?._id ?? ffi.nullptr, + mask); + } + + _NSRange rangeOfCharacterFromSet_options_range_( + NSCharacterSet? searchSet, int mask, _NSRange rangeOfReceiverToSearch) { + return _lib._objc_msgSend_281( + _id, + _lib._sel_rangeOfCharacterFromSet_options_range_1, + searchSet?._id ?? ffi.nullptr, + mask, + rangeOfReceiverToSearch); + } + + _NSRange rangeOfComposedCharacterSequenceAtIndex_(int index) { + return _lib._objc_msgSend_282( + _id, _lib._sel_rangeOfComposedCharacterSequenceAtIndex_1, index); + } + + _NSRange rangeOfComposedCharacterSequencesForRange_(_NSRange range) { + return _lib._objc_msgSend_283( + _id, _lib._sel_rangeOfComposedCharacterSequencesForRange_1, range); + } + + NSString stringByAppendingString_(NSString? aString) { + final _ret = _lib._objc_msgSend_56( + _id, _lib._sel_stringByAppendingString_1, aString?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByAppendingFormat_(NSString? format) { + final _ret = _lib._objc_msgSend_56( + _id, _lib._sel_stringByAppendingFormat_1, format?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + double get doubleValue { + return _lib._objc_msgSend_147(_id, _lib._sel_doubleValue1); + } + + double get floatValue { + return _lib._objc_msgSend_179(_id, _lib._sel_floatValue1); + } + + int get intValue { + return _lib._objc_msgSend_177(_id, _lib._sel_intValue1); + } + + int get integerValue { + return _lib._objc_msgSend_70(_id, _lib._sel_integerValue1); + } + + int get longLongValue { + return _lib._objc_msgSend_178(_id, _lib._sel_longLongValue1); + } + + bool get boolValue { + return _lib._objc_msgSend_12(_id, _lib._sel_boolValue1); + } + + NSString? get uppercaseString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_uppercaseString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get lowercaseString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_lowercaseString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get capitalizedString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_capitalizedString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get localizedUppercaseString { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_localizedUppercaseString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get localizedLowercaseString { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_localizedLowercaseString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get localizedCapitalizedString { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_localizedCapitalizedString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString uppercaseStringWithLocale_(NSLocale? locale) { + final _ret = _lib._objc_msgSend_284( + _id, _lib._sel_uppercaseStringWithLocale_1, locale?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString lowercaseStringWithLocale_(NSLocale? locale) { + final _ret = _lib._objc_msgSend_284( + _id, _lib._sel_lowercaseStringWithLocale_1, locale?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString capitalizedStringWithLocale_(NSLocale? locale) { + final _ret = _lib._objc_msgSend_284(_id, + _lib._sel_capitalizedStringWithLocale_1, locale?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + void getLineStart_end_contentsEnd_forRange_( + ffi.Pointer startPtr, + ffi.Pointer lineEndPtr, + ffi.Pointer contentsEndPtr, + _NSRange range) { + return _lib._objc_msgSend_285( + _id, + _lib._sel_getLineStart_end_contentsEnd_forRange_1, + startPtr, + lineEndPtr, + contentsEndPtr, + range); + } + + _NSRange lineRangeForRange_(_NSRange range) { + return _lib._objc_msgSend_283(_id, _lib._sel_lineRangeForRange_1, range); + } + + void getParagraphStart_end_contentsEnd_forRange_( + ffi.Pointer startPtr, + ffi.Pointer parEndPtr, + ffi.Pointer contentsEndPtr, + _NSRange range) { + return _lib._objc_msgSend_285( + _id, + _lib._sel_getParagraphStart_end_contentsEnd_forRange_1, + startPtr, + parEndPtr, + contentsEndPtr, + range); + } + + _NSRange paragraphRangeForRange_(_NSRange range) { + return _lib._objc_msgSend_283( + _id, _lib._sel_paragraphRangeForRange_1, range); + } + + void enumerateSubstringsInRange_options_usingBlock_( + _NSRange range, int opts, ObjCBlock13 block) { + return _lib._objc_msgSend_286( + _id, + _lib._sel_enumerateSubstringsInRange_options_usingBlock_1, + range, + opts, + block._id); + } + + void enumerateLinesUsingBlock_(ObjCBlock14 block) { + return _lib._objc_msgSend_287( + _id, _lib._sel_enumerateLinesUsingBlock_1, block._id); + } + + ffi.Pointer get UTF8String { + return _lib._objc_msgSend_13(_id, _lib._sel_UTF8String1); + } + + int get fastestEncoding { + return _lib._objc_msgSend_10(_id, _lib._sel_fastestEncoding1); + } + + int get smallestEncoding { + return _lib._objc_msgSend_10(_id, _lib._sel_smallestEncoding1); + } + + NSData dataUsingEncoding_allowLossyConversion_(int encoding, bool lossy) { + final _ret = _lib._objc_msgSend_288(_id, + _lib._sel_dataUsingEncoding_allowLossyConversion_1, encoding, lossy); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData dataUsingEncoding_(int encoding) { + final _ret = + _lib._objc_msgSend_289(_id, _lib._sel_dataUsingEncoding_1, encoding); + return NSData._(_ret, _lib, retain: true, release: true); + } + + bool canBeConvertedToEncoding_(int encoding) { + return _lib._objc_msgSend_83( + _id, _lib._sel_canBeConvertedToEncoding_1, encoding); + } + + ffi.Pointer cStringUsingEncoding_(int encoding) { + return _lib._objc_msgSend_11( + _id, _lib._sel_cStringUsingEncoding_1, encoding); + } + + bool getCString_maxLength_encoding_( + ffi.Pointer buffer, int maxBufferCount, int encoding) { + return _lib._objc_msgSend_290( + _id, + _lib._sel_getCString_maxLength_encoding_1, + buffer, + maxBufferCount, + encoding); + } + + bool getBytes_maxLength_usedLength_encoding_options_range_remainingRange_( + ffi.Pointer buffer, + int maxBufferCount, + ffi.Pointer usedBufferCount, + int encoding, + int options, + _NSRange range, + ffi.Pointer<_NSRange> leftover) { + return _lib._objc_msgSend_291( + _id, + _lib._sel_getBytes_maxLength_usedLength_encoding_options_range_remainingRange_1, + buffer, + maxBufferCount, + usedBufferCount, + encoding, + options, + range, + leftover); + } + + int maximumLengthOfBytesUsingEncoding_(int enc) { + return _lib._objc_msgSend_80( + _id, _lib._sel_maximumLengthOfBytesUsingEncoding_1, enc); + } + + int lengthOfBytesUsingEncoding_(int enc) { + return _lib._objc_msgSend_80( + _id, _lib._sel_lengthOfBytesUsingEncoding_1, enc); + } + + static ffi.Pointer getAvailableStringEncodings( + PedometerBindings _lib) { + return _lib._objc_msgSend_292( + _lib._class_NSString1, _lib._sel_availableStringEncodings1); + } + + static NSString localizedNameOfStringEncoding_( + PedometerBindings _lib, int encoding) { + final _ret = _lib._objc_msgSend_253(_lib._class_NSString1, + _lib._sel_localizedNameOfStringEncoding_1, encoding); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int getDefaultCStringEncoding(PedometerBindings _lib) { + return _lib._objc_msgSend_10( + _lib._class_NSString1, _lib._sel_defaultCStringEncoding1); + } + + NSString? get decomposedStringWithCanonicalMapping { + final _ret = _lib._objc_msgSend_20( + _id, _lib._sel_decomposedStringWithCanonicalMapping1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get precomposedStringWithCanonicalMapping { + final _ret = _lib._objc_msgSend_20( + _id, _lib._sel_precomposedStringWithCanonicalMapping1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get decomposedStringWithCompatibilityMapping { + final _ret = _lib._objc_msgSend_20( + _id, _lib._sel_decomposedStringWithCompatibilityMapping1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get precomposedStringWithCompatibilityMapping { + final _ret = _lib._objc_msgSend_20( + _id, _lib._sel_precomposedStringWithCompatibilityMapping1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray componentsSeparatedByString_(NSString? separator) { + final _ret = _lib._objc_msgSend_115(_id, + _lib._sel_componentsSeparatedByString_1, separator?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray componentsSeparatedByCharactersInSet_(NSCharacterSet? separator) { + final _ret = _lib._objc_msgSend_293( + _id, + _lib._sel_componentsSeparatedByCharactersInSet_1, + separator?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString stringByTrimmingCharactersInSet_(NSCharacterSet? set) { + final _ret = _lib._objc_msgSend_294(_id, + _lib._sel_stringByTrimmingCharactersInSet_1, set?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByPaddingToLength_withString_startingAtIndex_( + int newLength, NSString? padString, int padIndex) { + final _ret = _lib._objc_msgSend_295( + _id, + _lib._sel_stringByPaddingToLength_withString_startingAtIndex_1, + newLength, + padString?._id ?? ffi.nullptr, + padIndex); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByFoldingWithOptions_locale_(int options, NSLocale? locale) { + final _ret = _lib._objc_msgSend_296( + _id, + _lib._sel_stringByFoldingWithOptions_locale_1, + options, + locale?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByReplacingOccurrencesOfString_withString_options_range_( + NSString? target, + NSString? replacement, + int options, + _NSRange searchRange) { + final _ret = _lib._objc_msgSend_297( + _id, + _lib._sel_stringByReplacingOccurrencesOfString_withString_options_range_1, + target?._id ?? ffi.nullptr, + replacement?._id ?? ffi.nullptr, + options, + searchRange); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByReplacingOccurrencesOfString_withString_( + NSString? target, NSString? replacement) { + final _ret = _lib._objc_msgSend_298( + _id, + _lib._sel_stringByReplacingOccurrencesOfString_withString_1, + target?._id ?? ffi.nullptr, + replacement?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByReplacingCharactersInRange_withString_( + _NSRange range, NSString? replacement) { + final _ret = _lib._objc_msgSend_299( + _id, + _lib._sel_stringByReplacingCharactersInRange_withString_1, + range, + replacement?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByApplyingTransform_reverse_( + NSString transform, bool reverse) { + final _ret = _lib._objc_msgSend_300(_id, + _lib._sel_stringByApplyingTransform_reverse_1, transform._id, reverse); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool writeToURL_atomically_encoding_error_(NSURL? url, bool useAuxiliaryFile, + int enc, ffi.Pointer> error) { + return _lib._objc_msgSend_301( + _id, + _lib._sel_writeToURL_atomically_encoding_error_1, + url?._id ?? ffi.nullptr, + useAuxiliaryFile, + enc, + error); + } + + bool writeToFile_atomically_encoding_error_( + NSString? path, + bool useAuxiliaryFile, + int enc, + ffi.Pointer> error) { + return _lib._objc_msgSend_302( + _id, + _lib._sel_writeToFile_atomically_encoding_error_1, + path?._id ?? ffi.nullptr, + useAuxiliaryFile, + enc, + error); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get hash { + return _lib._objc_msgSend_10(_id, _lib._sel_hash1); + } + + NSString initWithCharactersNoCopy_length_freeWhenDone_( + ffi.Pointer characters, int length, bool freeBuffer) { + final _ret = _lib._objc_msgSend_303( + _id, + _lib._sel_initWithCharactersNoCopy_length_freeWhenDone_1, + characters, + length, + freeBuffer); + return NSString._(_ret, _lib, retain: false, release: true); + } + + NSString initWithCharactersNoCopy_length_deallocator_( + ffi.Pointer chars, int len, ObjCBlock15 deallocator) { + final _ret = _lib._objc_msgSend_304( + _id, + _lib._sel_initWithCharactersNoCopy_length_deallocator_1, + chars, + len, + deallocator._id); + return NSString._(_ret, _lib, retain: false, release: true); + } + + NSString initWithCharacters_length_( + ffi.Pointer characters, int length) { + final _ret = _lib._objc_msgSend_305( + _id, _lib._sel_initWithCharacters_length_1, characters, length); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithUTF8String_(ffi.Pointer nullTerminatedCString) { + final _ret = _lib._objc_msgSend_306( + _id, _lib._sel_initWithUTF8String_1, nullTerminatedCString); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithString_(NSString? aString) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithString_1, aString?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithFormat_(NSString? format) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithFormat_1, format?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithFormat_arguments_( + NSString? format, ffi.Pointer argList) { + final _ret = _lib._objc_msgSend_307( + _id, + _lib._sel_initWithFormat_arguments_1, + format?._id ?? ffi.nullptr, + argList); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithFormat_locale_(NSString? format, NSObject locale) { + final _ret = _lib._objc_msgSend_308(_id, _lib._sel_initWithFormat_locale_1, + format?._id ?? ffi.nullptr, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithFormat_locale_arguments_( + NSString? format, NSObject locale, ffi.Pointer argList) { + final _ret = _lib._objc_msgSend_309( + _id, + _lib._sel_initWithFormat_locale_arguments_1, + format?._id ?? ffi.nullptr, + locale._id, + argList); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithValidatedFormat_validFormatSpecifiers_error_( + NSString? format, + NSString? validFormatSpecifiers, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_310( + _id, + _lib._sel_initWithValidatedFormat_validFormatSpecifiers_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithValidatedFormat_validFormatSpecifiers_locale_error_( + NSString? format, + NSString? validFormatSpecifiers, + NSObject locale, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_311( + _id, + _lib._sel_initWithValidatedFormat_validFormatSpecifiers_locale_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + locale._id, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithValidatedFormat_validFormatSpecifiers_arguments_error_( + NSString? format, + NSString? validFormatSpecifiers, + ffi.Pointer argList, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_312( + _id, + _lib._sel_initWithValidatedFormat_validFormatSpecifiers_arguments_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + argList, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString + initWithValidatedFormat_validFormatSpecifiers_locale_arguments_error_( + NSString? format, + NSString? validFormatSpecifiers, + NSObject locale, + ffi.Pointer argList, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_313( + _id, + _lib._sel_initWithValidatedFormat_validFormatSpecifiers_locale_arguments_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + locale._id, + argList, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithData_encoding_(NSData? data, int encoding) { + final _ret = _lib._objc_msgSend_314(_id, _lib._sel_initWithData_encoding_1, + data?._id ?? ffi.nullptr, encoding); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithBytes_length_encoding_( + ffi.Pointer bytes, int len, int encoding) { + final _ret = _lib._objc_msgSend_315( + _id, _lib._sel_initWithBytes_length_encoding_1, bytes, len, encoding); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithBytesNoCopy_length_encoding_freeWhenDone_( + ffi.Pointer bytes, int len, int encoding, bool freeBuffer) { + final _ret = _lib._objc_msgSend_316( + _id, + _lib._sel_initWithBytesNoCopy_length_encoding_freeWhenDone_1, + bytes, + len, + encoding, + freeBuffer); + return NSString._(_ret, _lib, retain: false, release: true); + } + + NSString initWithBytesNoCopy_length_encoding_deallocator_( + ffi.Pointer bytes, + int len, + int encoding, + ObjCBlock12 deallocator) { + final _ret = _lib._objc_msgSend_317( + _id, + _lib._sel_initWithBytesNoCopy_length_encoding_deallocator_1, + bytes, + len, + encoding, + deallocator._id); + return NSString._(_ret, _lib, retain: false, release: true); + } + + static NSString string(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSString1, _lib._sel_string1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithString_(PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSString1, + _lib._sel_stringWithString_1, string?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithCharacters_length_(PedometerBindings _lib, + ffi.Pointer characters, int length) { + final _ret = _lib._objc_msgSend_305(_lib._class_NSString1, + _lib._sel_stringWithCharacters_length_1, characters, length); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithUTF8String_( + PedometerBindings _lib, ffi.Pointer nullTerminatedCString) { + final _ret = _lib._objc_msgSend_306(_lib._class_NSString1, + _lib._sel_stringWithUTF8String_1, nullTerminatedCString); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithFormat_(PedometerBindings _lib, NSString? format) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSString1, + _lib._sel_stringWithFormat_1, format?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString localizedStringWithFormat_( + PedometerBindings _lib, NSString? format) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSString1, + _lib._sel_localizedStringWithFormat_1, format?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithValidatedFormat_validFormatSpecifiers_error_( + PedometerBindings _lib, + NSString? format, + NSString? validFormatSpecifiers, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_310( + _lib._class_NSString1, + _lib._sel_stringWithValidatedFormat_validFormatSpecifiers_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString + localizedStringWithValidatedFormat_validFormatSpecifiers_error_( + PedometerBindings _lib, + NSString? format, + NSString? validFormatSpecifiers, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_310( + _lib._class_NSString1, + _lib._sel_localizedStringWithValidatedFormat_validFormatSpecifiers_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithCString_encoding_( + ffi.Pointer nullTerminatedCString, int encoding) { + final _ret = _lib._objc_msgSend_318(_id, + _lib._sel_initWithCString_encoding_1, nullTerminatedCString, encoding); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithCString_encoding_( + PedometerBindings _lib, ffi.Pointer cString, int enc) { + final _ret = _lib._objc_msgSend_318(_lib._class_NSString1, + _lib._sel_stringWithCString_encoding_1, cString, enc); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithContentsOfURL_encoding_error_( + NSURL? url, int enc, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_319( + _id, + _lib._sel_initWithContentsOfURL_encoding_error_1, + url?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithContentsOfFile_encoding_error_( + NSString? path, int enc, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_320( + _id, + _lib._sel_initWithContentsOfFile_encoding_error_1, + path?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithContentsOfURL_encoding_error_( + PedometerBindings _lib, + NSURL? url, + int enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_319( + _lib._class_NSString1, + _lib._sel_stringWithContentsOfURL_encoding_error_1, + url?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithContentsOfFile_encoding_error_( + PedometerBindings _lib, + NSString? path, + int enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_320( + _lib._class_NSString1, + _lib._sel_stringWithContentsOfFile_encoding_error_1, + path?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithContentsOfURL_usedEncoding_error_( + NSURL? url, + ffi.Pointer enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_321( + _id, + _lib._sel_initWithContentsOfURL_usedEncoding_error_1, + url?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString initWithContentsOfFile_usedEncoding_error_( + NSString? path, + ffi.Pointer enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_322( + _id, + _lib._sel_initWithContentsOfFile_usedEncoding_error_1, + path?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithContentsOfURL_usedEncoding_error_( + PedometerBindings _lib, + NSURL? url, + ffi.Pointer enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_321( + _lib._class_NSString1, + _lib._sel_stringWithContentsOfURL_usedEncoding_error_1, + url?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString stringWithContentsOfFile_usedEncoding_error_( + PedometerBindings _lib, + NSString? path, + ffi.Pointer enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_322( + _lib._class_NSString1, + _lib._sel_stringWithContentsOfFile_usedEncoding_error_1, + path?._id ?? ffi.nullptr, + enc, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int + stringEncodingForData_encodingOptions_convertedString_usedLossyConversion_( + PedometerBindings _lib, + NSData? data, + NSDictionary? opts, + ffi.Pointer> string, + ffi.Pointer usedLossyConversion) { + return _lib._objc_msgSend_323( + _lib._class_NSString1, + _lib._sel_stringEncodingForData_encodingOptions_convertedString_usedLossyConversion_1, + data?._id ?? ffi.nullptr, + opts?._id ?? ffi.nullptr, + string, + usedLossyConversion); + } + + NSObject propertyList() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_propertyList1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSDictionary propertyListFromStringsFileFormat() { + final _ret = _lib._objc_msgSend_324( + _id, _lib._sel_propertyListFromStringsFileFormat1); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + ffi.Pointer cString() { + return _lib._objc_msgSend_13(_id, _lib._sel_cString1); + } + + ffi.Pointer lossyCString() { + return _lib._objc_msgSend_13(_id, _lib._sel_lossyCString1); + } + + int cStringLength() { + return _lib._objc_msgSend_10(_id, _lib._sel_cStringLength1); + } + + void getCString_(ffi.Pointer bytes) { + return _lib._objc_msgSend_220(_id, _lib._sel_getCString_1, bytes); + } + + void getCString_maxLength_(ffi.Pointer bytes, int maxLength) { + return _lib._objc_msgSend_325( + _id, _lib._sel_getCString_maxLength_1, bytes, maxLength); + } + + void getCString_maxLength_range_remainingRange_(ffi.Pointer bytes, + int maxLength, _NSRange aRange, ffi.Pointer<_NSRange> leftoverRange) { + return _lib._objc_msgSend_326( + _id, + _lib._sel_getCString_maxLength_range_remainingRange_1, + bytes, + maxLength, + aRange, + leftoverRange); + } + + bool writeToFile_atomically_(NSString? path, bool useAuxiliaryFile) { + return _lib._objc_msgSend_25(_id, _lib._sel_writeToFile_atomically_1, + path?._id ?? ffi.nullptr, useAuxiliaryFile); + } + + bool writeToURL_atomically_(NSURL? url, bool atomically) { + return _lib._objc_msgSend_117(_id, _lib._sel_writeToURL_atomically_1, + url?._id ?? ffi.nullptr, atomically); + } + + NSObject initWithContentsOfFile_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSString1, + _lib._sel_stringWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithContentsOfURL_(PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSString1, + _lib._sel_stringWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithCStringNoCopy_length_freeWhenDone_( + ffi.Pointer bytes, int length, bool freeBuffer) { + final _ret = _lib._objc_msgSend_327( + _id, + _lib._sel_initWithCStringNoCopy_length_freeWhenDone_1, + bytes, + length, + freeBuffer); + return NSObject._(_ret, _lib, retain: false, release: true); + } + + NSObject initWithCString_length_(ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_318( + _id, _lib._sel_initWithCString_length_1, bytes, length); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithCString_(ffi.Pointer bytes) { + final _ret = + _lib._objc_msgSend_306(_id, _lib._sel_initWithCString_1, bytes); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithCString_length_( + PedometerBindings _lib, ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_318(_lib._class_NSString1, + _lib._sel_stringWithCString_length_1, bytes, length); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithCString_( + PedometerBindings _lib, ffi.Pointer bytes) { + final _ret = _lib._objc_msgSend_306( + _lib._class_NSString1, _lib._sel_stringWithCString_1, bytes); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void getCharacters_(ffi.Pointer buffer) { + return _lib._objc_msgSend_328(_id, _lib._sel_getCharacters_1, buffer); + } + + NSString variantFittingPresentationWidth_(int width) { + final _ret = _lib._objc_msgSend_329( + _id, _lib._sel_variantFittingPresentationWidth_1, width); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString pathWithComponents_( + PedometerBindings _lib, NSArray? components) { + final _ret = _lib._objc_msgSend_330(_lib._class_NSString1, + _lib._sel_pathWithComponents_1, components?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray? get pathComponents { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_pathComponents1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + bool get absolutePath { + return _lib._objc_msgSend_12(_id, _lib._sel_isAbsolutePath1); + } + + NSString? get lastPathComponent { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_lastPathComponent1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByDeletingLastPathComponent { + final _ret = _lib._objc_msgSend_20( + _id, _lib._sel_stringByDeletingLastPathComponent1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByAppendingPathComponent_(NSString? str) { + final _ret = _lib._objc_msgSend_56(_id, + _lib._sel_stringByAppendingPathComponent_1, str?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get pathExtension { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_pathExtension1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByDeletingPathExtension { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_stringByDeletingPathExtension1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByAppendingPathExtension_(NSString? str) { + final _ret = _lib._objc_msgSend_56(_id, + _lib._sel_stringByAppendingPathExtension_1, str?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByAbbreviatingWithTildeInPath { + final _ret = _lib._objc_msgSend_20( + _id, _lib._sel_stringByAbbreviatingWithTildeInPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByExpandingTildeInPath { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_stringByExpandingTildeInPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByStandardizingPath { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_stringByStandardizingPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByResolvingSymlinksInPath { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_stringByResolvingSymlinksInPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray stringsByAppendingPaths_(NSArray? paths) { + final _ret = _lib._objc_msgSend_55( + _id, _lib._sel_stringsByAppendingPaths_1, paths?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + int completePathIntoString_caseSensitive_matchesIntoArray_filterTypes_( + ffi.Pointer> outputName, + bool flag, + ffi.Pointer> outputArray, + NSArray? filterTypes) { + return _lib._objc_msgSend_331( + _id, + _lib._sel_completePathIntoString_caseSensitive_matchesIntoArray_filterTypes_1, + outputName, + flag, + outputArray, + filterTypes?._id ?? ffi.nullptr); + } + + ffi.Pointer get fileSystemRepresentation { + return _lib._objc_msgSend_13(_id, _lib._sel_fileSystemRepresentation1); + } + + bool getFileSystemRepresentation_maxLength_( + ffi.Pointer cname, int max) { + return _lib._objc_msgSend_182( + _id, _lib._sel_getFileSystemRepresentation_maxLength_1, cname, max); + } + + NSString stringByAddingPercentEncodingWithAllowedCharacters_( + NSCharacterSet? allowedCharacters) { + final _ret = _lib._objc_msgSend_294( + _id, + _lib._sel_stringByAddingPercentEncodingWithAllowedCharacters_1, + allowedCharacters?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get stringByRemovingPercentEncoding { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_stringByRemovingPercentEncoding1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByAddingPercentEscapesUsingEncoding_(int enc) { + final _ret = _lib._objc_msgSend_253( + _id, _lib._sel_stringByAddingPercentEscapesUsingEncoding_1, enc); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString stringByReplacingPercentEscapesUsingEncoding_(int enc) { + final _ret = _lib._objc_msgSend_253( + _id, _lib._sel_stringByReplacingPercentEscapesUsingEncoding_1, enc); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray linguisticTagsInRange_scheme_options_orthography_tokenRanges_( + _NSRange range, + NSString scheme, + int options, + NSOrthography? orthography, + ffi.Pointer> tokenRanges) { + final _ret = _lib._objc_msgSend_333( + _id, + _lib._sel_linguisticTagsInRange_scheme_options_orthography_tokenRanges_1, + range, + scheme._id, + options, + orthography?._id ?? ffi.nullptr, + tokenRanges); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + void enumerateLinguisticTagsInRange_scheme_options_orthography_usingBlock_( + _NSRange range, + NSString scheme, + int options, + NSOrthography? orthography, + ObjCBlock13 block) { + return _lib._objc_msgSend_334( + _id, + _lib._sel_enumerateLinguisticTagsInRange_scheme_options_orthography_usingBlock_1, + range, + scheme._id, + options, + orthography?._id ?? ffi.nullptr, + block._id); + } + + static NSString new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSString1, _lib._sel_new1); + return NSString._(_ret, _lib, retain: false, release: true); + } + + static NSString alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSString1, _lib._sel_alloc1); + return NSString._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSString1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSString1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSString1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSString1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSString1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSString1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSString1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +extension StringToNSString on String { + NSString toNSString(PedometerBindings lib) => NSString(lib, this); +} + +class NSCoder extends NSObject { + NSCoder._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSCoder] that points to the same underlying object as [other]. + static NSCoder castFrom(T other) { + return NSCoder._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSCoder] that wraps the given raw object pointer. + static NSCoder castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSCoder._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSCoder]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSCoder1); + } + + void encodeValueOfObjCType_at_( + ffi.Pointer type, ffi.Pointer addr) { + return _lib._objc_msgSend_18( + _id, _lib._sel_encodeValueOfObjCType_at_1, type, addr); + } + + void encodeDataObject_(NSData? data) { + return _lib._objc_msgSend_217( + _id, _lib._sel_encodeDataObject_1, data?._id ?? ffi.nullptr); + } + + NSData decodeDataObject() { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_decodeDataObject1); + return NSData._(_ret, _lib, retain: true, release: true); + } + + void decodeValueOfObjCType_at_size_( + ffi.Pointer type, ffi.Pointer data, int size) { + return _lib._objc_msgSend_218( + _id, _lib._sel_decodeValueOfObjCType_at_size_1, type, data, size); + } + + int versionForClassName_(NSString? className) { + return _lib._objc_msgSend_219( + _id, _lib._sel_versionForClassName_1, className?._id ?? ffi.nullptr); + } + + void encodeObject_(NSObject object) { + return _lib._objc_msgSend_15(_id, _lib._sel_encodeObject_1, object._id); + } + + void encodeRootObject_(NSObject rootObject) { + return _lib._objc_msgSend_15( + _id, _lib._sel_encodeRootObject_1, rootObject._id); + } + + void encodeBycopyObject_(NSObject anObject) { + return _lib._objc_msgSend_15( + _id, _lib._sel_encodeBycopyObject_1, anObject._id); + } + + void encodeByrefObject_(NSObject anObject) { + return _lib._objc_msgSend_15( + _id, _lib._sel_encodeByrefObject_1, anObject._id); + } + + void encodeConditionalObject_(NSObject object) { + return _lib._objc_msgSend_15( + _id, _lib._sel_encodeConditionalObject_1, object._id); + } + + void encodeValuesOfObjCTypes_(ffi.Pointer types) { + return _lib._objc_msgSend_220( + _id, _lib._sel_encodeValuesOfObjCTypes_1, types); + } + + void encodeArrayOfObjCType_count_at_( + ffi.Pointer type, int count, ffi.Pointer array) { + return _lib._objc_msgSend_221( + _id, _lib._sel_encodeArrayOfObjCType_count_at_1, type, count, array); + } + + void encodeBytes_length_(ffi.Pointer byteaddr, int length) { + return _lib._objc_msgSend_21( + _id, _lib._sel_encodeBytes_length_1, byteaddr, length); + } + + NSObject decodeObject() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_decodeObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject decodeTopLevelObjectAndReturnError_( + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_222( + _id, _lib._sel_decodeTopLevelObjectAndReturnError_1, error); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void decodeValuesOfObjCTypes_(ffi.Pointer types) { + return _lib._objc_msgSend_220( + _id, _lib._sel_decodeValuesOfObjCTypes_1, types); + } + + void decodeArrayOfObjCType_count_at_( + ffi.Pointer itemType, int count, ffi.Pointer array) { + return _lib._objc_msgSend_221(_id, + _lib._sel_decodeArrayOfObjCType_count_at_1, itemType, count, array); + } + + ffi.Pointer decodeBytesWithReturnedLength_( + ffi.Pointer lengthp) { + return _lib._objc_msgSend_223( + _id, _lib._sel_decodeBytesWithReturnedLength_1, lengthp); + } + + void encodePropertyList_(NSObject aPropertyList) { + return _lib._objc_msgSend_15( + _id, _lib._sel_encodePropertyList_1, aPropertyList._id); + } + + NSObject decodePropertyList() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_decodePropertyList1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void setObjectZone_(ffi.Pointer<_NSZone> zone) { + return _lib._objc_msgSend_224(_id, _lib._sel_setObjectZone_1, zone); + } + + ffi.Pointer<_NSZone> objectZone() { + return _lib._objc_msgSend_225(_id, _lib._sel_objectZone1); + } + + int get systemVersion { + return _lib._objc_msgSend_155(_id, _lib._sel_systemVersion1); + } + + bool get allowsKeyedCoding { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsKeyedCoding1); + } + + void encodeObject_forKey_(NSObject object, NSString? key) { + return _lib._objc_msgSend_118(_id, _lib._sel_encodeObject_forKey_1, + object._id, key?._id ?? ffi.nullptr); + } + + void encodeConditionalObject_forKey_(NSObject object, NSString? key) { + return _lib._objc_msgSend_118( + _id, + _lib._sel_encodeConditionalObject_forKey_1, + object._id, + key?._id ?? ffi.nullptr); + } + + void encodeBool_forKey_(bool value, NSString? key) { + return _lib._objc_msgSend_226( + _id, _lib._sel_encodeBool_forKey_1, value, key?._id ?? ffi.nullptr); + } + + void encodeInt_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_227( + _id, _lib._sel_encodeInt_forKey_1, value, key?._id ?? ffi.nullptr); + } + + void encodeInt32_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_228( + _id, _lib._sel_encodeInt32_forKey_1, value, key?._id ?? ffi.nullptr); + } + + void encodeInt64_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_229( + _id, _lib._sel_encodeInt64_forKey_1, value, key?._id ?? ffi.nullptr); + } + + void encodeFloat_forKey_(double value, NSString? key) { + return _lib._objc_msgSend_230( + _id, _lib._sel_encodeFloat_forKey_1, value, key?._id ?? ffi.nullptr); + } + + void encodeDouble_forKey_(double value, NSString? key) { + return _lib._objc_msgSend_231( + _id, _lib._sel_encodeDouble_forKey_1, value, key?._id ?? ffi.nullptr); + } + + void encodeBytes_length_forKey_( + ffi.Pointer bytes, int length, NSString? key) { + return _lib._objc_msgSend_232(_id, _lib._sel_encodeBytes_length_forKey_1, + bytes, length, key?._id ?? ffi.nullptr); + } + + bool containsValueForKey_(NSString? key) { + return _lib._objc_msgSend_51( + _id, _lib._sel_containsValueForKey_1, key?._id ?? ffi.nullptr); + } + + NSObject decodeObjectForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_decodeObjectForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject decodeTopLevelObjectForKey_error_( + NSString? key, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_233( + _id, + _lib._sel_decodeTopLevelObjectForKey_error_1, + key?._id ?? ffi.nullptr, + error); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool decodeBoolForKey_(NSString? key) { + return _lib._objc_msgSend_51( + _id, _lib._sel_decodeBoolForKey_1, key?._id ?? ffi.nullptr); + } + + int decodeIntForKey_(NSString? key) { + return _lib._objc_msgSend_234( + _id, _lib._sel_decodeIntForKey_1, key?._id ?? ffi.nullptr); + } + + int decodeInt32ForKey_(NSString? key) { + return _lib._objc_msgSend_235( + _id, _lib._sel_decodeInt32ForKey_1, key?._id ?? ffi.nullptr); + } + + int decodeInt64ForKey_(NSString? key) { + return _lib._objc_msgSend_236( + _id, _lib._sel_decodeInt64ForKey_1, key?._id ?? ffi.nullptr); + } + + double decodeFloatForKey_(NSString? key) { + return _lib._objc_msgSend_237( + _id, _lib._sel_decodeFloatForKey_1, key?._id ?? ffi.nullptr); + } + + double decodeDoubleForKey_(NSString? key) { + return _lib._objc_msgSend_238( + _id, _lib._sel_decodeDoubleForKey_1, key?._id ?? ffi.nullptr); + } + + ffi.Pointer decodeBytesForKey_returnedLength_( + NSString? key, ffi.Pointer lengthp) { + return _lib._objc_msgSend_239( + _id, + _lib._sel_decodeBytesForKey_returnedLength_1, + key?._id ?? ffi.nullptr, + lengthp); + } + + void encodeInteger_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_240( + _id, _lib._sel_encodeInteger_forKey_1, value, key?._id ?? ffi.nullptr); + } + + int decodeIntegerForKey_(NSString? key) { + return _lib._objc_msgSend_219( + _id, _lib._sel_decodeIntegerForKey_1, key?._id ?? ffi.nullptr); + } + + bool get requiresSecureCoding { + return _lib._objc_msgSend_12(_id, _lib._sel_requiresSecureCoding1); + } + + NSObject decodeObjectOfClass_forKey_(NSObject aClass, NSString? key) { + final _ret = _lib._objc_msgSend_241( + _id, + _lib._sel_decodeObjectOfClass_forKey_1, + aClass._id, + key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject decodeTopLevelObjectOfClass_forKey_error_(NSObject aClass, + NSString? key, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_242( + _id, + _lib._sel_decodeTopLevelObjectOfClass_forKey_error_1, + aClass._id, + key?._id ?? ffi.nullptr, + error); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + /// Decodes the \c NSArray object for the given \c key, which should be an \c NSArray, containing the given non-collection class (no nested arrays or arrays of dictionaries, etc) from the coder. + /// + /// Requires \c NSSecureCoding otherwise an exception is thrown and sets the \c decodingFailurePolicy to \c NSDecodingFailurePolicySetErrorAndReturn. + /// + /// Returns \c nil if the object for \c key is not of the expected types, or cannot be decoded, and sets the \c error on the decoder. + NSArray decodeArrayOfObjectsOfClass_forKey_(NSObject cls, NSString? key) { + final _ret = _lib._objc_msgSend_243( + _id, + _lib._sel_decodeArrayOfObjectsOfClass_forKey_1, + cls._id, + key?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + /// Decodes the \c NSDictionary object for the given \c key, which should be an \c NSDictionary , with keys of type given in \c keyCls and objects of the given non-collection class \c objectCls (no nested dictionaries or other dictionaries contained in the dictionary, etc) from the coder. + /// + /// Requires \c NSSecureCoding otherwise an exception is thrown and sets the \c decodingFailurePolicy to \c NSDecodingFailurePolicySetErrorAndReturn. + /// + /// Returns \c nil if the object for \c key is not of the expected types, or cannot be decoded, and sets the \c error on the decoder. + NSDictionary decodeDictionaryWithKeysOfClass_objectsOfClass_forKey_( + NSObject keyCls, NSObject objectCls, NSString? key) { + final _ret = _lib._objc_msgSend_244( + _id, + _lib._sel_decodeDictionaryWithKeysOfClass_objectsOfClass_forKey_1, + keyCls._id, + objectCls._id, + key?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSObject decodeObjectOfClasses_forKey_(NSSet? classes, NSString? key) { + final _ret = _lib._objc_msgSend_245( + _id, + _lib._sel_decodeObjectOfClasses_forKey_1, + classes?._id ?? ffi.nullptr, + key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject decodeTopLevelObjectOfClasses_forKey_error_(NSSet? classes, + NSString? key, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_246( + _id, + _lib._sel_decodeTopLevelObjectOfClasses_forKey_error_1, + classes?._id ?? ffi.nullptr, + key?._id ?? ffi.nullptr, + error); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + /// Decodes the \c NSArray object for the given \c key, which should be an \c NSArray, containing the given non-collection classes (no nested arrays or arrays of dictionaries, etc) from the coder. + /// + /// Requires \c NSSecureCoding otherwise an exception is thrown and sets the \c decodingFailurePolicy to \c NSDecodingFailurePolicySetErrorAndReturn. + /// + /// Returns \c nil if the object for \c key is not of the expected types, or cannot be decoded, and sets the \c error on the decoder. + NSArray decodeArrayOfObjectsOfClasses_forKey_(NSSet? classes, NSString? key) { + final _ret = _lib._objc_msgSend_247( + _id, + _lib._sel_decodeArrayOfObjectsOfClasses_forKey_1, + classes?._id ?? ffi.nullptr, + key?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + /// Decodes the \c NSDictionary object for the given \c key, which should be an \c NSDictionary, with keys of the types given in \c keyClasses and objects of the given non-collection classes in \c objectClasses (no nested dictionaries or other dictionaries contained in the dictionary, etc) from the given coder. + /// + /// Requires \c NSSecureCoding otherwise an exception is thrown and sets the \c decodingFailurePolicy to \c NSDecodingFailurePolicySetErrorAndReturn. + /// + /// Returns \c nil if the object for \c key is not of the expected types, or cannot be decoded, and sets the \c error on the decoder. + NSDictionary decodeDictionaryWithKeysOfClasses_objectsOfClasses_forKey_( + NSSet? keyClasses, NSSet? objectClasses, NSString? key) { + final _ret = _lib._objc_msgSend_248( + _id, + _lib._sel_decodeDictionaryWithKeysOfClasses_objectsOfClasses_forKey_1, + keyClasses?._id ?? ffi.nullptr, + objectClasses?._id ?? ffi.nullptr, + key?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSObject decodePropertyListForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_decodePropertyListForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSSet? get allowedClasses { + final _ret = _lib._objc_msgSend_249(_id, _lib._sel_allowedClasses1); + return _ret.address == 0 + ? null + : NSSet._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Signals to this coder that the decode has failed. + /// @parameter non-nil error that describes the reason why the decode failed + /// @discussion + /// Sets an error on this NSCoder once per TopLevel decode; calling it repeatedly will have no effect until the call stack unwinds to one of the TopLevel decode entry-points. + /// + /// This method is only meaningful to call for decodes. + /// + /// Typically, you would want to call this method in your -initWithCoder: implementation when you detect situations like: + /// - lack of secure coding + /// - corruption of your data + /// - domain validation failures + /// + /// After calling -failWithError: within your -initWithCoder: implementation, you should clean up and return nil as early as possible. + /// + /// Once an error has been signaled to a decoder, it remains set until it has handed off to the first TopLevel decode invocation above it. For example, consider the following call graph: + /// A -decodeTopLevelObjectForKey:error: + /// B -initWithCoder: + /// C -decodeObjectForKey: + /// D -initWithCoder: + /// E -decodeObjectForKey: + /// F -failWithError: + /// + /// In this case the error provided in stack-frame F will be returned via the outError in stack-frame A. Furthermore the result object from decodeTopLevelObjectForKey:error: will be nil, regardless of the result of stack-frame B. + /// + /// NSCoder implementations support two mechanisms for the stack-unwinding from F to A: + /// - forced (NSException based) + /// - particpatory (error based) + /// + /// The kind of unwinding you get is determined by the decodingFailurePolicy property of this NSCoder (which defaults to NSDecodingFailurePolicyRaiseException to match historical behavior). + void failWithError_(NSError? error) { + return _lib._objc_msgSend_250( + _id, _lib._sel_failWithError_1, error?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract Defines the behavior this NSCoder should take on decode failure (i.e. corrupt archive, invalid data, etc.). + /// @discussion + /// The default result of this property is NSDecodingFailurePolicyRaiseException, subclasses can change this to an alternative policy. + int get decodingFailurePolicy { + return _lib._objc_msgSend_251(_id, _lib._sel_decodingFailurePolicy1); + } + + /// ! + /// @abstract The current error (if there is one) for the current TopLevel decode. + /// @discussion + /// The meaning of this property changes based on the result of the decodingFailurePolicy property: + /// For NSDecodingFailurePolicyRaiseException, this property will always be nil. + /// For NSDecodingFailurePolicySetErrorAndReturn, this property can be non-nil, and if so, indicates that there was a failure while decoding the archive (specifically its the very first error encountered). + /// + /// While .error is non-nil, all attempts to decode data from this coder will return a nil/zero-equivalent value. + /// + /// This error is consumed by a TopLevel decode API (which resets this coder back to a being able to potentially decode data). + NSError? get error { + final _ret = _lib._objc_msgSend_252(_id, _lib._sel_error1); + return _ret.address == 0 + ? null + : NSError._(_ret, _lib, retain: true, release: true); + } + + void encodeNXObject_(NSObject object) { + return _lib._objc_msgSend_15(_id, _lib._sel_encodeNXObject_1, object._id); + } + + NSObject decodeNXObject() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_decodeNXObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void decodeValueOfObjCType_at_( + ffi.Pointer type, ffi.Pointer data) { + return _lib._objc_msgSend_18( + _id, _lib._sel_decodeValueOfObjCType_at_1, type, data); + } + + static NSCoder new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSCoder1, _lib._sel_new1); + return NSCoder._(_ret, _lib, retain: false, release: true); + } + + static NSCoder alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSCoder1, _lib._sel_alloc1); + return NSCoder._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSCoder1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSCoder1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSCoder1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSCoder1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSCoder1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSCoder1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSCoder1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSCoder1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSCoder1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Immutable Data +class NSData extends NSObject { + NSData._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSData] that points to the same underlying object as [other]. + static NSData castFrom(T other) { + return NSData._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSData] that wraps the given raw object pointer. + static NSData castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSData._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSData]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSData1); + } + + int get length { + return _lib._objc_msgSend_10(_id, _lib._sel_length1); + } + + ffi.Pointer get bytes { + return _lib._objc_msgSend_19(_id, _lib._sel_bytes1); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + void getBytes_length_(ffi.Pointer buffer, int length) { + return _lib._objc_msgSend_21( + _id, _lib._sel_getBytes_length_1, buffer, length); + } + + void getBytes_range_(ffi.Pointer buffer, _NSRange range) { + return _lib._objc_msgSend_22( + _id, _lib._sel_getBytes_range_1, buffer, range); + } + + bool isEqualToData_(NSData? other) { + return _lib._objc_msgSend_23( + _id, _lib._sel_isEqualToData_1, other?._id ?? ffi.nullptr); + } + + NSData subdataWithRange_(_NSRange range) { + final _ret = + _lib._objc_msgSend_24(_id, _lib._sel_subdataWithRange_1, range); + return NSData._(_ret, _lib, retain: true, release: true); + } + + bool writeToFile_atomically_(NSString? path, bool useAuxiliaryFile) { + return _lib._objc_msgSend_25(_id, _lib._sel_writeToFile_atomically_1, + path?._id ?? ffi.nullptr, useAuxiliaryFile); + } + + bool writeToURL_atomically_(NSURL? url, bool atomically) { + return _lib._objc_msgSend_117(_id, _lib._sel_writeToURL_atomically_1, + url?._id ?? ffi.nullptr, atomically); + } + + bool writeToFile_options_error_(NSString? path, int writeOptionsMask, + ffi.Pointer> errorPtr) { + return _lib._objc_msgSend_201(_id, _lib._sel_writeToFile_options_error_1, + path?._id ?? ffi.nullptr, writeOptionsMask, errorPtr); + } + + bool writeToURL_options_error_(NSURL? url, int writeOptionsMask, + ffi.Pointer> errorPtr) { + return _lib._objc_msgSend_202(_id, _lib._sel_writeToURL_options_error_1, + url?._id ?? ffi.nullptr, writeOptionsMask, errorPtr); + } + + _NSRange rangeOfData_options_range_( + NSData? dataToFind, int mask, _NSRange searchRange) { + return _lib._objc_msgSend_203(_id, _lib._sel_rangeOfData_options_range_1, + dataToFind?._id ?? ffi.nullptr, mask, searchRange); + } + + void enumerateByteRangesUsingBlock_(ObjCBlock11 block) { + return _lib._objc_msgSend_204( + _id, _lib._sel_enumerateByteRangesUsingBlock_1, block._id); + } + + static NSData data(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSData1, _lib._sel_data1); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSData dataWithBytes_length_( + PedometerBindings _lib, ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_205( + _lib._class_NSData1, _lib._sel_dataWithBytes_length_1, bytes, length); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSData dataWithBytesNoCopy_length_( + PedometerBindings _lib, ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_205(_lib._class_NSData1, + _lib._sel_dataWithBytesNoCopy_length_1, bytes, length); + return NSData._(_ret, _lib, retain: false, release: true); + } + + static NSData dataWithBytesNoCopy_length_freeWhenDone_( + PedometerBindings _lib, ffi.Pointer bytes, int length, bool b) { + final _ret = _lib._objc_msgSend_206(_lib._class_NSData1, + _lib._sel_dataWithBytesNoCopy_length_freeWhenDone_1, bytes, length, b); + return NSData._(_ret, _lib, retain: false, release: true); + } + + static NSData dataWithContentsOfFile_options_error_( + PedometerBindings _lib, + NSString? path, + int readOptionsMask, + ffi.Pointer> errorPtr) { + final _ret = _lib._objc_msgSend_207( + _lib._class_NSData1, + _lib._sel_dataWithContentsOfFile_options_error_1, + path?._id ?? ffi.nullptr, + readOptionsMask, + errorPtr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSData dataWithContentsOfURL_options_error_( + PedometerBindings _lib, + NSURL? url, + int readOptionsMask, + ffi.Pointer> errorPtr) { + final _ret = _lib._objc_msgSend_208( + _lib._class_NSData1, + _lib._sel_dataWithContentsOfURL_options_error_1, + url?._id ?? ffi.nullptr, + readOptionsMask, + errorPtr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSData dataWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSData1, + _lib._sel_dataWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSData dataWithContentsOfURL_(PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSData1, + _lib._sel_dataWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithBytes_length_(ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_205( + _id, _lib._sel_initWithBytes_length_1, bytes, length); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithBytesNoCopy_length_(ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_205( + _id, _lib._sel_initWithBytesNoCopy_length_1, bytes, length); + return NSData._(_ret, _lib, retain: false, release: true); + } + + NSData initWithBytesNoCopy_length_freeWhenDone_( + ffi.Pointer bytes, int length, bool b) { + final _ret = _lib._objc_msgSend_206(_id, + _lib._sel_initWithBytesNoCopy_length_freeWhenDone_1, bytes, length, b); + return NSData._(_ret, _lib, retain: false, release: true); + } + + NSData initWithBytesNoCopy_length_deallocator_( + ffi.Pointer bytes, int length, ObjCBlock12 deallocator) { + final _ret = _lib._objc_msgSend_210( + _id, + _lib._sel_initWithBytesNoCopy_length_deallocator_1, + bytes, + length, + deallocator._id); + return NSData._(_ret, _lib, retain: false, release: true); + } + + NSData initWithContentsOfFile_options_error_(NSString? path, + int readOptionsMask, ffi.Pointer> errorPtr) { + final _ret = _lib._objc_msgSend_207( + _id, + _lib._sel_initWithContentsOfFile_options_error_1, + path?._id ?? ffi.nullptr, + readOptionsMask, + errorPtr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithContentsOfURL_options_error_(NSURL? url, int readOptionsMask, + ffi.Pointer> errorPtr) { + final _ret = _lib._objc_msgSend_208( + _id, + _lib._sel_initWithContentsOfURL_options_error_1, + url?._id ?? ffi.nullptr, + readOptionsMask, + errorPtr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithContentsOfFile_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithData_(NSData? data) { + final _ret = _lib._objc_msgSend_211( + _id, _lib._sel_initWithData_1, data?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSData dataWithData_(PedometerBindings _lib, NSData? data) { + final _ret = _lib._objc_msgSend_211(_lib._class_NSData1, + _lib._sel_dataWithData_1, data?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData initWithBase64EncodedString_options_( + NSString? base64String, int options) { + final _ret = _lib._objc_msgSend_212( + _id, + _lib._sel_initWithBase64EncodedString_options_1, + base64String?._id ?? ffi.nullptr, + options); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSString base64EncodedStringWithOptions_(int options) { + final _ret = _lib._objc_msgSend_213( + _id, _lib._sel_base64EncodedStringWithOptions_1, options); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSData initWithBase64EncodedData_options_(NSData? base64Data, int options) { + final _ret = _lib._objc_msgSend_214( + _id, + _lib._sel_initWithBase64EncodedData_options_1, + base64Data?._id ?? ffi.nullptr, + options); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData base64EncodedDataWithOptions_(int options) { + final _ret = _lib._objc_msgSend_215( + _id, _lib._sel_base64EncodedDataWithOptions_1, options); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData decompressedDataUsingAlgorithm_error_( + int algorithm, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_216(_id, + _lib._sel_decompressedDataUsingAlgorithm_error_1, algorithm, error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData compressedDataUsingAlgorithm_error_( + int algorithm, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_216( + _id, _lib._sel_compressedDataUsingAlgorithm_error_1, algorithm, error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + void getBytes_(ffi.Pointer buffer) { + return _lib._objc_msgSend_47(_id, _lib._sel_getBytes_1, buffer); + } + + static NSObject dataWithContentsOfMappedFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSData1, + _lib._sel_dataWithContentsOfMappedFile_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithContentsOfMappedFile_(NSString? path) { + final _ret = _lib._objc_msgSend_30(_id, + _lib._sel_initWithContentsOfMappedFile_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithBase64Encoding_(NSString? base64String) { + final _ret = _lib._objc_msgSend_30(_id, _lib._sel_initWithBase64Encoding_1, + base64String?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSString base64Encoding() { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_base64Encoding1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSData new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSData1, _lib._sel_new1); + return NSData._(_ret, _lib, retain: false, release: true); + } + + static NSData alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSData1, _lib._sel_alloc1); + return NSData._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSData1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSData1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSData1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSData1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSData1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSData1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSData1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSData1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSData1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class _NSRange extends ffi.Struct { + @ffi.UnsignedLong() + external int location; + + @ffi.UnsignedLong() + external int length; +} + +class NSURL extends NSObject { + NSURL._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURL] that points to the same underlying object as [other]. + static NSURL castFrom(T other) { + return NSURL._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSURL] that wraps the given raw object pointer. + static NSURL castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURL._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURL]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSURL1); + } + + NSURL initWithScheme_host_path_( + NSString? scheme, NSString? host, NSString? path) { + final _ret = _lib._objc_msgSend_26( + _id, + _lib._sel_initWithScheme_host_path_1, + scheme?._id ?? ffi.nullptr, + host?._id ?? ffi.nullptr, + path?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initFileURLWithPath_isDirectory_relativeToURL_( + NSString? path, bool isDir, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_27( + _id, + _lib._sel_initFileURLWithPath_isDirectory_relativeToURL_1, + path?._id ?? ffi.nullptr, + isDir, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initFileURLWithPath_relativeToURL_(NSString? path, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_28( + _id, + _lib._sel_initFileURLWithPath_relativeToURL_1, + path?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initFileURLWithPath_isDirectory_(NSString? path, bool isDir) { + final _ret = _lib._objc_msgSend_29( + _id, + _lib._sel_initFileURLWithPath_isDirectory_1, + path?._id ?? ffi.nullptr, + isDir); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initFileURLWithPath_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initFileURLWithPath_1, path?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL fileURLWithPath_isDirectory_relativeToURL_( + PedometerBindings _lib, NSString? path, bool isDir, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_31( + _lib._class_NSURL1, + _lib._sel_fileURLWithPath_isDirectory_relativeToURL_1, + path?._id ?? ffi.nullptr, + isDir, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL fileURLWithPath_relativeToURL_( + PedometerBindings _lib, NSString? path, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_32( + _lib._class_NSURL1, + _lib._sel_fileURLWithPath_relativeToURL_1, + path?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL fileURLWithPath_isDirectory_( + PedometerBindings _lib, NSString? path, bool isDir) { + final _ret = _lib._objc_msgSend_33( + _lib._class_NSURL1, + _lib._sel_fileURLWithPath_isDirectory_1, + path?._id ?? ffi.nullptr, + isDir); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL fileURLWithPath_(PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_34(_lib._class_NSURL1, + _lib._sel_fileURLWithPath_1, path?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initFileURLWithFileSystemRepresentation_isDirectory_relativeToURL_( + ffi.Pointer path, bool isDir, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_35( + _id, + _lib._sel_initFileURLWithFileSystemRepresentation_isDirectory_relativeToURL_1, + path, + isDir, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL fileURLWithFileSystemRepresentation_isDirectory_relativeToURL_( + PedometerBindings _lib, + ffi.Pointer path, + bool isDir, + NSURL? baseURL) { + final _ret = _lib._objc_msgSend_36( + _lib._class_NSURL1, + _lib._sel_fileURLWithFileSystemRepresentation_isDirectory_relativeToURL_1, + path, + isDir, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initWithString_(NSString? URLString) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithString_1, URLString?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initWithString_relativeToURL_(NSString? URLString, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_28( + _id, + _lib._sel_initWithString_relativeToURL_1, + URLString?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL URLWithString_(PedometerBindings _lib, NSString? URLString) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSURL1, + _lib._sel_URLWithString_1, URLString?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL URLWithString_relativeToURL_( + PedometerBindings _lib, NSString? URLString, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_28( + _lib._class_NSURL1, + _lib._sel_URLWithString_relativeToURL_1, + URLString?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initWithDataRepresentation_relativeToURL_( + NSData? data, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_37( + _id, + _lib._sel_initWithDataRepresentation_relativeToURL_1, + data?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL URLWithDataRepresentation_relativeToURL_( + PedometerBindings _lib, NSData? data, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_38( + _lib._class_NSURL1, + _lib._sel_URLWithDataRepresentation_relativeToURL_1, + data?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL initAbsoluteURLWithDataRepresentation_relativeToURL_( + NSData? data, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_37( + _id, + _lib._sel_initAbsoluteURLWithDataRepresentation_relativeToURL_1, + data?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL absoluteURLWithDataRepresentation_relativeToURL_( + PedometerBindings _lib, NSData? data, NSURL? baseURL) { + final _ret = _lib._objc_msgSend_38( + _lib._class_NSURL1, + _lib._sel_absoluteURLWithDataRepresentation_relativeToURL_1, + data?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSData? get dataRepresentation { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_dataRepresentation1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSString? get absoluteString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_absoluteString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get relativeString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_relativeString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSURL? get baseURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_baseURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get absoluteURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_absoluteURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSString? get scheme { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_scheme1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get resourceSpecifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_resourceSpecifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get host { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_host1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get port { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_port1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSString? get user { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_user1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get password { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_password1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get path { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_path1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get fragment { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_fragment1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get parameterString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_parameterString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get query { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_query1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get relativePath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_relativePath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + bool get hasDirectoryPath { + return _lib._objc_msgSend_12(_id, _lib._sel_hasDirectoryPath1); + } + + bool getFileSystemRepresentation_maxLength_( + ffi.Pointer buffer, int maxBufferLength) { + return _lib._objc_msgSend_182( + _id, + _lib._sel_getFileSystemRepresentation_maxLength_1, + buffer, + maxBufferLength); + } + + ffi.Pointer get fileSystemRepresentation { + return _lib._objc_msgSend_13(_id, _lib._sel_fileSystemRepresentation1); + } + + bool get fileURL { + return _lib._objc_msgSend_12(_id, _lib._sel_isFileURL1); + } + + NSURL? get standardizedURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_standardizedURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + bool checkResourceIsReachableAndReturnError_( + ffi.Pointer> error) { + return _lib._objc_msgSend_183( + _id, _lib._sel_checkResourceIsReachableAndReturnError_1, error); + } + + bool isFileReferenceURL() { + return _lib._objc_msgSend_12(_id, _lib._sel_isFileReferenceURL1); + } + + NSURL fileReferenceURL() { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_fileReferenceURL1); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get filePathURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_filePathURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + bool getResourceValue_forKey_error_( + ffi.Pointer> value, + NSString key, + ffi.Pointer> error) { + return _lib._objc_msgSend_184( + _id, _lib._sel_getResourceValue_forKey_error_1, value, key._id, error); + } + + NSObject resourceValuesForKeys_error_( + NSArray? keys, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_185( + _id, + _lib._sel_resourceValuesForKeys_error_1, + keys?._id ?? ffi.nullptr, + error); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool setResourceValue_forKey_error_(NSObject value, NSString key, + ffi.Pointer> error) { + return _lib._objc_msgSend_186(_id, + _lib._sel_setResourceValue_forKey_error_1, value._id, key._id, error); + } + + bool setResourceValues_error_( + NSObject? keyedValues, ffi.Pointer> error) { + return _lib._objc_msgSend_187(_id, _lib._sel_setResourceValues_error_1, + keyedValues?._id ?? ffi.nullptr, error); + } + + void removeCachedResourceValueForKey_(NSString key) { + return _lib._objc_msgSend_188( + _id, _lib._sel_removeCachedResourceValueForKey_1, key._id); + } + + void removeAllCachedResourceValues() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeAllCachedResourceValues1); + } + + void setTemporaryResourceValue_forKey_(NSObject value, NSString key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setTemporaryResourceValue_forKey_1, value._id, key._id); + } + + NSData + bookmarkDataWithOptions_includingResourceValuesForKeys_relativeToURL_error_( + int options, + NSArray? keys, + NSURL? relativeURL, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_189( + _id, + _lib._sel_bookmarkDataWithOptions_includingResourceValuesForKeys_relativeToURL_error_1, + options, + keys?._id ?? ffi.nullptr, + relativeURL?._id ?? ffi.nullptr, + error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSURL + initByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_( + NSData? bookmarkData, + int options, + NSURL? relativeURL, + ffi.Pointer isStale, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_190( + _id, + _lib._sel_initByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_1, + bookmarkData?._id ?? ffi.nullptr, + options, + relativeURL?._id ?? ffi.nullptr, + isStale, + error); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSURL + URLByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_( + PedometerBindings _lib, + NSData? bookmarkData, + int options, + NSURL? relativeURL, + ffi.Pointer isStale, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_190( + _lib._class_NSURL1, + _lib._sel_URLByResolvingBookmarkData_options_relativeToURL_bookmarkDataIsStale_error_1, + bookmarkData?._id ?? ffi.nullptr, + options, + relativeURL?._id ?? ffi.nullptr, + isStale, + error); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSObject resourceValuesForKeys_fromBookmarkData_( + PedometerBindings _lib, NSArray? keys, NSData? bookmarkData) { + final _ret = _lib._objc_msgSend_191( + _lib._class_NSURL1, + _lib._sel_resourceValuesForKeys_fromBookmarkData_1, + keys?._id ?? ffi.nullptr, + bookmarkData?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static bool writeBookmarkData_toURL_options_error_( + PedometerBindings _lib, + NSData? bookmarkData, + NSURL? bookmarkFileURL, + int options, + ffi.Pointer> error) { + return _lib._objc_msgSend_192( + _lib._class_NSURL1, + _lib._sel_writeBookmarkData_toURL_options_error_1, + bookmarkData?._id ?? ffi.nullptr, + bookmarkFileURL?._id ?? ffi.nullptr, + options, + error); + } + + static NSData bookmarkDataWithContentsOfURL_error_(PedometerBindings _lib, + NSURL? bookmarkFileURL, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_193( + _lib._class_NSURL1, + _lib._sel_bookmarkDataWithContentsOfURL_error_1, + bookmarkFileURL?._id ?? ffi.nullptr, + error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static NSURL URLByResolvingAliasFileAtURL_options_error_( + PedometerBindings _lib, + NSURL? url, + int options, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_194( + _lib._class_NSURL1, + _lib._sel_URLByResolvingAliasFileAtURL_options_error_1, + url?._id ?? ffi.nullptr, + options, + error); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + bool startAccessingSecurityScopedResource() { + return _lib._objc_msgSend_12( + _id, _lib._sel_startAccessingSecurityScopedResource1); + } + + void stopAccessingSecurityScopedResource() { + return _lib._objc_msgSend_1( + _id, _lib._sel_stopAccessingSecurityScopedResource1); + } + + bool getPromisedItemResourceValue_forKey_error_( + ffi.Pointer> value, + NSString key, + ffi.Pointer> error) { + return _lib._objc_msgSend_184( + _id, + _lib._sel_getPromisedItemResourceValue_forKey_error_1, + value, + key._id, + error); + } + + NSDictionary promisedItemResourceValuesForKeys_error_( + NSArray? keys, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_195( + _id, + _lib._sel_promisedItemResourceValuesForKeys_error_1, + keys?._id ?? ffi.nullptr, + error); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + bool checkPromisedItemIsReachableAndReturnError_( + ffi.Pointer> error) { + return _lib._objc_msgSend_183( + _id, _lib._sel_checkPromisedItemIsReachableAndReturnError_1, error); + } + + static NSURL fileURLWithPathComponents_( + PedometerBindings _lib, NSArray? components) { + final _ret = _lib._objc_msgSend_196(_lib._class_NSURL1, + _lib._sel_fileURLWithPathComponents_1, components?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSArray? get pathComponents { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_pathComponents1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get lastPathComponent { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_lastPathComponent1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get pathExtension { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_pathExtension1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSURL URLByAppendingPathComponent_(NSString? pathComponent) { + final _ret = _lib._objc_msgSend_34( + _id, + _lib._sel_URLByAppendingPathComponent_1, + pathComponent?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL URLByAppendingPathComponent_isDirectory_( + NSString? pathComponent, bool isDirectory) { + final _ret = _lib._objc_msgSend_33( + _id, + _lib._sel_URLByAppendingPathComponent_isDirectory_1, + pathComponent?._id ?? ffi.nullptr, + isDirectory); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get URLByDeletingLastPathComponent { + final _ret = + _lib._objc_msgSend_40(_id, _lib._sel_URLByDeletingLastPathComponent1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL URLByAppendingPathExtension_(NSString? pathExtension) { + final _ret = _lib._objc_msgSend_34( + _id, + _lib._sel_URLByAppendingPathExtension_1, + pathExtension?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get URLByDeletingPathExtension { + final _ret = + _lib._objc_msgSend_40(_id, _lib._sel_URLByDeletingPathExtension1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get URLByStandardizingPath { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_URLByStandardizingPath1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get URLByResolvingSymlinksInPath { + final _ret = + _lib._objc_msgSend_40(_id, _lib._sel_URLByResolvingSymlinksInPath1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSData resourceDataUsingCache_(bool shouldUseCache) { + final _ret = _lib._objc_msgSend_197( + _id, _lib._sel_resourceDataUsingCache_1, shouldUseCache); + return NSData._(_ret, _lib, retain: true, release: true); + } + + void loadResourceDataNotifyingClient_usingCache_( + NSObject client, bool shouldUseCache) { + return _lib._objc_msgSend_198( + _id, + _lib._sel_loadResourceDataNotifyingClient_usingCache_1, + client._id, + shouldUseCache); + } + + NSObject propertyForKey_(NSString? propertyKey) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_propertyForKey_1, propertyKey?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool setResourceData_(NSData? data) { + return _lib._objc_msgSend_23( + _id, _lib._sel_setResourceData_1, data?._id ?? ffi.nullptr); + } + + bool setProperty_forKey_(NSObject property, NSString? propertyKey) { + return _lib._objc_msgSend_199(_id, _lib._sel_setProperty_forKey_1, + property._id, propertyKey?._id ?? ffi.nullptr); + } + + NSObject URLHandleUsingCache_(bool shouldUseCache) { + final _ret = _lib._objc_msgSend_200( + _id, _lib._sel_URLHandleUsingCache_1, shouldUseCache); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSURL new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURL1, _lib._sel_new1); + return NSURL._(_ret, _lib, retain: false, release: true); + } + + static NSURL alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURL1, _lib._sel_alloc1); + return NSURL._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURL1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURL1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURL1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURL1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURL1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURL1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURL1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURL1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURL1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSNumber extends NSValue { + NSNumber._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSNumber] that points to the same underlying object as [other]. + static NSNumber castFrom(T other) { + return NSNumber._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSNumber] that wraps the given raw object pointer. + static NSNumber castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSNumber._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSNumber]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSNumber1); + } + + @override + NSNumber initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithChar_(int value) { + final _ret = _lib._objc_msgSend_160(_id, _lib._sel_initWithChar_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithUnsignedChar_(int value) { + final _ret = + _lib._objc_msgSend_161(_id, _lib._sel_initWithUnsignedChar_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithShort_(int value) { + final _ret = _lib._objc_msgSend_162(_id, _lib._sel_initWithShort_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithUnsignedShort_(int value) { + final _ret = + _lib._objc_msgSend_163(_id, _lib._sel_initWithUnsignedShort_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithInt_(int value) { + final _ret = _lib._objc_msgSend_164(_id, _lib._sel_initWithInt_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithUnsignedInt_(int value) { + final _ret = + _lib._objc_msgSend_165(_id, _lib._sel_initWithUnsignedInt_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithLong_(int value) { + final _ret = _lib._objc_msgSend_166(_id, _lib._sel_initWithLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithUnsignedLong_(int value) { + final _ret = + _lib._objc_msgSend_167(_id, _lib._sel_initWithUnsignedLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithLongLong_(int value) { + final _ret = + _lib._objc_msgSend_168(_id, _lib._sel_initWithLongLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithUnsignedLongLong_(int value) { + final _ret = _lib._objc_msgSend_169( + _id, _lib._sel_initWithUnsignedLongLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithFloat_(double value) { + final _ret = _lib._objc_msgSend_170(_id, _lib._sel_initWithFloat_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithDouble_(double value) { + final _ret = _lib._objc_msgSend_171(_id, _lib._sel_initWithDouble_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithBool_(bool value) { + final _ret = _lib._objc_msgSend_172(_id, _lib._sel_initWithBool_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithInteger_(int value) { + final _ret = + _lib._objc_msgSend_166(_id, _lib._sel_initWithInteger_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber initWithUnsignedInteger_(int value) { + final _ret = + _lib._objc_msgSend_167(_id, _lib._sel_initWithUnsignedInteger_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + int get charValue { + return _lib._objc_msgSend_173(_id, _lib._sel_charValue1); + } + + int get unsignedCharValue { + return _lib._objc_msgSend_174(_id, _lib._sel_unsignedCharValue1); + } + + int get shortValue { + return _lib._objc_msgSend_175(_id, _lib._sel_shortValue1); + } + + int get unsignedShortValue { + return _lib._objc_msgSend_176(_id, _lib._sel_unsignedShortValue1); + } + + int get intValue { + return _lib._objc_msgSend_177(_id, _lib._sel_intValue1); + } + + int get unsignedIntValue { + return _lib._objc_msgSend_155(_id, _lib._sel_unsignedIntValue1); + } + + int get longValue { + return _lib._objc_msgSend_70(_id, _lib._sel_longValue1); + } + + int get unsignedLongValue { + return _lib._objc_msgSend_10(_id, _lib._sel_unsignedLongValue1); + } + + int get longLongValue { + return _lib._objc_msgSend_178(_id, _lib._sel_longLongValue1); + } + + int get unsignedLongLongValue { + return _lib._objc_msgSend_146(_id, _lib._sel_unsignedLongLongValue1); + } + + double get floatValue { + return _lib._objc_msgSend_179(_id, _lib._sel_floatValue1); + } + + double get doubleValue { + return _lib._objc_msgSend_147(_id, _lib._sel_doubleValue1); + } + + bool get boolValue { + return _lib._objc_msgSend_12(_id, _lib._sel_boolValue1); + } + + int get integerValue { + return _lib._objc_msgSend_70(_id, _lib._sel_integerValue1); + } + + int get unsignedIntegerValue { + return _lib._objc_msgSend_10(_id, _lib._sel_unsignedIntegerValue1); + } + + NSString? get stringValue { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_stringValue1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int compare_(NSNumber? otherNumber) { + return _lib._objc_msgSend_180( + _id, _lib._sel_compare_1, otherNumber?._id ?? ffi.nullptr); + } + + bool isEqualToNumber_(NSNumber? number) { + return _lib._objc_msgSend_181( + _id, _lib._sel_isEqualToNumber_1, number?._id ?? ffi.nullptr); + } + + NSString descriptionWithLocale_(NSObject locale) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_descriptionWithLocale_1, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithChar_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_160( + _lib._class_NSNumber1, _lib._sel_numberWithChar_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithUnsignedChar_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_161( + _lib._class_NSNumber1, _lib._sel_numberWithUnsignedChar_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithShort_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_162( + _lib._class_NSNumber1, _lib._sel_numberWithShort_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithUnsignedShort_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_163( + _lib._class_NSNumber1, _lib._sel_numberWithUnsignedShort_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithInt_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_164( + _lib._class_NSNumber1, _lib._sel_numberWithInt_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithUnsignedInt_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_165( + _lib._class_NSNumber1, _lib._sel_numberWithUnsignedInt_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithLong_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_166( + _lib._class_NSNumber1, _lib._sel_numberWithLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithUnsignedLong_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_167( + _lib._class_NSNumber1, _lib._sel_numberWithUnsignedLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithLongLong_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_168( + _lib._class_NSNumber1, _lib._sel_numberWithLongLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithUnsignedLongLong_( + PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_169( + _lib._class_NSNumber1, _lib._sel_numberWithUnsignedLongLong_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithFloat_(PedometerBindings _lib, double value) { + final _ret = _lib._objc_msgSend_170( + _lib._class_NSNumber1, _lib._sel_numberWithFloat_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithDouble_(PedometerBindings _lib, double value) { + final _ret = _lib._objc_msgSend_171( + _lib._class_NSNumber1, _lib._sel_numberWithDouble_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithBool_(PedometerBindings _lib, bool value) { + final _ret = _lib._objc_msgSend_172( + _lib._class_NSNumber1, _lib._sel_numberWithBool_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithInteger_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_166( + _lib._class_NSNumber1, _lib._sel_numberWithInteger_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSNumber numberWithUnsignedInteger_( + PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_167( + _lib._class_NSNumber1, _lib._sel_numberWithUnsignedInteger_1, value); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithBytes_objCType_(PedometerBindings _lib, + ffi.Pointer value, ffi.Pointer type) { + final _ret = _lib._objc_msgSend_43(_lib._class_NSNumber1, + _lib._sel_valueWithBytes_objCType_1, value, type); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue value_withObjCType_(PedometerBindings _lib, + ffi.Pointer value, ffi.Pointer type) { + final _ret = _lib._objc_msgSend_43( + _lib._class_NSNumber1, _lib._sel_value_withObjCType_1, value, type); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithNonretainedObject_( + PedometerBindings _lib, NSObject anObject) { + final _ret = _lib._objc_msgSend_44(_lib._class_NSNumber1, + _lib._sel_valueWithNonretainedObject_1, anObject._id); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithPointer_( + PedometerBindings _lib, ffi.Pointer pointer) { + final _ret = _lib._objc_msgSend_45( + _lib._class_NSNumber1, _lib._sel_valueWithPointer_1, pointer); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithRange_(PedometerBindings _lib, _NSRange range) { + final _ret = _lib._objc_msgSend_48( + _lib._class_NSNumber1, _lib._sel_valueWithRange_1, range); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSNumber new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSNumber1, _lib._sel_new1); + return NSNumber._(_ret, _lib, retain: false, release: true); + } + + static NSNumber alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSNumber1, _lib._sel_alloc1); + return NSNumber._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSNumber1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSNumber1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSNumber1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSNumber1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSNumber1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSNumber1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSNumber1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSNumber1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSNumber1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSValue extends NSObject { + NSValue._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSValue] that points to the same underlying object as [other]. + static NSValue castFrom(T other) { + return NSValue._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSValue] that wraps the given raw object pointer. + static NSValue castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSValue._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSValue]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSValue1); + } + + void getValue_size_(ffi.Pointer value, int size) { + return _lib._objc_msgSend_21(_id, _lib._sel_getValue_size_1, value, size); + } + + ffi.Pointer get objCType { + return _lib._objc_msgSend_13(_id, _lib._sel_objCType1); + } + + NSValue initWithBytes_objCType_( + ffi.Pointer value, ffi.Pointer type) { + final _ret = _lib._objc_msgSend_41( + _id, _lib._sel_initWithBytes_objCType_1, value, type); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + NSValue initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithBytes_objCType_(PedometerBindings _lib, + ffi.Pointer value, ffi.Pointer type) { + final _ret = _lib._objc_msgSend_43( + _lib._class_NSValue1, _lib._sel_valueWithBytes_objCType_1, value, type); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue value_withObjCType_(PedometerBindings _lib, + ffi.Pointer value, ffi.Pointer type) { + final _ret = _lib._objc_msgSend_43( + _lib._class_NSValue1, _lib._sel_value_withObjCType_1, value, type); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithNonretainedObject_( + PedometerBindings _lib, NSObject anObject) { + final _ret = _lib._objc_msgSend_44(_lib._class_NSValue1, + _lib._sel_valueWithNonretainedObject_1, anObject._id); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + NSObject get nonretainedObjectValue { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_nonretainedObjectValue1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSValue valueWithPointer_( + PedometerBindings _lib, ffi.Pointer pointer) { + final _ret = _lib._objc_msgSend_45( + _lib._class_NSValue1, _lib._sel_valueWithPointer_1, pointer); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + ffi.Pointer get pointerValue { + return _lib._objc_msgSend_19(_id, _lib._sel_pointerValue1); + } + + bool isEqualToValue_(NSValue? value) { + return _lib._objc_msgSend_46( + _id, _lib._sel_isEqualToValue_1, value?._id ?? ffi.nullptr); + } + + void getValue_(ffi.Pointer value) { + return _lib._objc_msgSend_47(_id, _lib._sel_getValue_1, value); + } + + static NSValue valueWithRange_(PedometerBindings _lib, _NSRange range) { + final _ret = _lib._objc_msgSend_48( + _lib._class_NSValue1, _lib._sel_valueWithRange_1, range); + return NSValue._(_ret, _lib, retain: true, release: true); + } + + _NSRange get rangeValue { + return _lib._objc_msgSend_49(_id, _lib._sel_rangeValue1); + } + + static NSValue new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSValue1, _lib._sel_new1); + return NSValue._(_ret, _lib, retain: false, release: true); + } + + static NSValue alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSValue1, _lib._sel_alloc1); + return NSValue._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSValue1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSValue1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSValue1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSValue1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSValue1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSValue1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSValue1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSValue1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSValue1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Immutable Array +class NSArray extends NSObject { + NSArray._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSArray] that points to the same underlying object as [other]. + static NSArray castFrom(T other) { + return NSArray._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSArray] that wraps the given raw object pointer. + static NSArray castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSArray._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSArray]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSArray1); + } + + int get count { + return _lib._objc_msgSend_10(_id, _lib._sel_count1); + } + + NSObject objectAtIndex_(int index) { + final _ret = _lib._objc_msgSend_52(_id, _lib._sel_objectAtIndex_1, index); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + @override + NSArray init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithObjects_count_( + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53( + _id, _lib._sel_initWithObjects_count_1, objects, cnt); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray arrayByAddingObject_(NSObject anObject) { + final _ret = _lib._objc_msgSend_54( + _id, _lib._sel_arrayByAddingObject_1, anObject._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray arrayByAddingObjectsFromArray_(NSArray? otherArray) { + final _ret = _lib._objc_msgSend_55( + _id, + _lib._sel_arrayByAddingObjectsFromArray_1, + otherArray?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString componentsJoinedByString_(NSString? separator) { + final _ret = _lib._objc_msgSend_56(_id, + _lib._sel_componentsJoinedByString_1, separator?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool containsObject_(NSObject anObject) { + return _lib._objc_msgSend_0(_id, _lib._sel_containsObject_1, anObject._id); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_(NSObject locale) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_descriptionWithLocale_1, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_indent_(NSObject locale, int level) { + final _ret = _lib._objc_msgSend_58( + _id, _lib._sel_descriptionWithLocale_indent_1, locale._id, level); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSObject firstObjectCommonWithArray_(NSArray? otherArray) { + final _ret = _lib._objc_msgSend_59(_id, + _lib._sel_firstObjectCommonWithArray_1, otherArray?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void getObjects_range_( + ffi.Pointer> objects, _NSRange range) { + return _lib._objc_msgSend_60( + _id, _lib._sel_getObjects_range_1, objects, range); + } + + int indexOfObject_(NSObject anObject) { + return _lib._objc_msgSend_61(_id, _lib._sel_indexOfObject_1, anObject._id); + } + + int indexOfObject_inRange_(NSObject anObject, _NSRange range) { + return _lib._objc_msgSend_62( + _id, _lib._sel_indexOfObject_inRange_1, anObject._id, range); + } + + int indexOfObjectIdenticalTo_(NSObject anObject) { + return _lib._objc_msgSend_61( + _id, _lib._sel_indexOfObjectIdenticalTo_1, anObject._id); + } + + int indexOfObjectIdenticalTo_inRange_(NSObject anObject, _NSRange range) { + return _lib._objc_msgSend_62( + _id, _lib._sel_indexOfObjectIdenticalTo_inRange_1, anObject._id, range); + } + + bool isEqualToArray_(NSArray? otherArray) { + return _lib._objc_msgSend_63( + _id, _lib._sel_isEqualToArray_1, otherArray?._id ?? ffi.nullptr); + } + + NSObject get firstObject { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_firstObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject get lastObject { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_lastObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSEnumerator objectEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_objectEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + NSEnumerator reverseObjectEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_reverseObjectEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + NSData? get sortedArrayHint { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_sortedArrayHint1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSArray sortedArrayUsingFunction_context_( + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>> + comparator, + ffi.Pointer context) { + final _ret = _lib._objc_msgSend_65( + _id, _lib._sel_sortedArrayUsingFunction_context_1, comparator, context); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray sortedArrayUsingFunction_context_hint_( + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>> + comparator, + ffi.Pointer context, + NSData? hint) { + final _ret = _lib._objc_msgSend_66( + _id, + _lib._sel_sortedArrayUsingFunction_context_hint_1, + comparator, + context, + hint?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray sortedArrayUsingSelector_(ffi.Pointer comparator) { + final _ret = _lib._objc_msgSend_67( + _id, _lib._sel_sortedArrayUsingSelector_1, comparator); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray subarrayWithRange_(_NSRange range) { + final _ret = + _lib._objc_msgSend_68(_id, _lib._sel_subarrayWithRange_1, range); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + bool writeToURL_error_( + NSURL? url, ffi.Pointer> error) { + return _lib._objc_msgSend_75( + _id, _lib._sel_writeToURL_error_1, url?._id ?? ffi.nullptr, error); + } + + void makeObjectsPerformSelector_(ffi.Pointer aSelector) { + return _lib._objc_msgSend_7( + _id, _lib._sel_makeObjectsPerformSelector_1, aSelector); + } + + void makeObjectsPerformSelector_withObject_( + ffi.Pointer aSelector, NSObject argument) { + return _lib._objc_msgSend_76( + _id, + _lib._sel_makeObjectsPerformSelector_withObject_1, + aSelector, + argument._id); + } + + NSArray objectsAtIndexes_(NSIndexSet? indexes) { + final _ret = _lib._objc_msgSend_97( + _id, _lib._sel_objectsAtIndexes_1, indexes?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject objectAtIndexedSubscript_(int idx) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_objectAtIndexedSubscript_1, idx); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void enumerateObjectsUsingBlock_(ObjCBlock4 block) { + return _lib._objc_msgSend_98( + _id, _lib._sel_enumerateObjectsUsingBlock_1, block._id); + } + + void enumerateObjectsWithOptions_usingBlock_(int opts, ObjCBlock4 block) { + return _lib._objc_msgSend_99(_id, + _lib._sel_enumerateObjectsWithOptions_usingBlock_1, opts, block._id); + } + + void enumerateObjectsAtIndexes_options_usingBlock_( + NSIndexSet? s, int opts, ObjCBlock4 block) { + return _lib._objc_msgSend_100( + _id, + _lib._sel_enumerateObjectsAtIndexes_options_usingBlock_1, + s?._id ?? ffi.nullptr, + opts, + block._id); + } + + int indexOfObjectPassingTest_(ObjCBlock5 predicate) { + return _lib._objc_msgSend_101( + _id, _lib._sel_indexOfObjectPassingTest_1, predicate._id); + } + + int indexOfObjectWithOptions_passingTest_(int opts, ObjCBlock5 predicate) { + return _lib._objc_msgSend_102(_id, + _lib._sel_indexOfObjectWithOptions_passingTest_1, opts, predicate._id); + } + + int indexOfObjectAtIndexes_options_passingTest_( + NSIndexSet? s, int opts, ObjCBlock5 predicate) { + return _lib._objc_msgSend_103( + _id, + _lib._sel_indexOfObjectAtIndexes_options_passingTest_1, + s?._id ?? ffi.nullptr, + opts, + predicate._id); + } + + NSIndexSet indexesOfObjectsPassingTest_(ObjCBlock5 predicate) { + final _ret = _lib._objc_msgSend_104( + _id, _lib._sel_indexesOfObjectsPassingTest_1, predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet indexesOfObjectsWithOptions_passingTest_( + int opts, ObjCBlock5 predicate) { + final _ret = _lib._objc_msgSend_105( + _id, + _lib._sel_indexesOfObjectsWithOptions_passingTest_1, + opts, + predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet indexesOfObjectsAtIndexes_options_passingTest_( + NSIndexSet? s, int opts, ObjCBlock5 predicate) { + final _ret = _lib._objc_msgSend_106( + _id, + _lib._sel_indexesOfObjectsAtIndexes_options_passingTest_1, + s?._id ?? ffi.nullptr, + opts, + predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSArray sortedArrayUsingComparator_(ObjCBlock6 cmptr) { + final _ret = _lib._objc_msgSend_107( + _id, _lib._sel_sortedArrayUsingComparator_1, cmptr._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray sortedArrayWithOptions_usingComparator_(int opts, ObjCBlock6 cmptr) { + final _ret = _lib._objc_msgSend_108(_id, + _lib._sel_sortedArrayWithOptions_usingComparator_1, opts, cmptr._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + int indexOfObject_inSortedRange_options_usingComparator_( + NSObject obj, _NSRange r, int opts, ObjCBlock6 cmp) { + return _lib._objc_msgSend_109( + _id, + _lib._sel_indexOfObject_inSortedRange_options_usingComparator_1, + obj._id, + r, + opts, + cmp._id); + } + + static NSArray array(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSArray1, _lib._sel_array1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithObject_(PedometerBindings _lib, NSObject anObject) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSArray1, _lib._sel_arrayWithObject_1, anObject._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithObjects_count_(PedometerBindings _lib, + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53( + _lib._class_NSArray1, _lib._sel_arrayWithObjects_count_1, objects, cnt); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithObjects_(PedometerBindings _lib, NSObject firstObj) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSArray1, _lib._sel_arrayWithObjects_1, firstObj._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithArray_(PedometerBindings _lib, NSArray? array) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSArray1, + _lib._sel_arrayWithArray_1, array?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithObjects_(NSObject firstObj) { + final _ret = + _lib._objc_msgSend_16(_id, _lib._sel_initWithObjects_1, firstObj._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithArray_(NSArray? array) { + final _ret = _lib._objc_msgSend_59( + _id, _lib._sel_initWithArray_1, array?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithArray_copyItems_(NSArray? array, bool flag) { + final _ret = _lib._objc_msgSend_110(_id, + _lib._sel_initWithArray_copyItems_1, array?._id ?? ffi.nullptr, flag); + return NSArray._(_ret, _lib, retain: false, release: true); + } + + NSArray initWithContentsOfURL_error_( + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_111( + _id, + _lib._sel_initWithContentsOfURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithContentsOfURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_111( + _lib._class_NSArray1, + _lib._sel_arrayWithContentsOfURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject differenceFromArray_withOptions_usingEquivalenceTest_( + NSArray? other, int options, ObjCBlock7 block) { + final _ret = _lib._objc_msgSend_112( + _id, + _lib._sel_differenceFromArray_withOptions_usingEquivalenceTest_1, + other?._id ?? ffi.nullptr, + options, + block._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject differenceFromArray_withOptions_(NSArray? other, int options) { + final _ret = _lib._objc_msgSend_113( + _id, + _lib._sel_differenceFromArray_withOptions_1, + other?._id ?? ffi.nullptr, + options); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject differenceFromArray_(NSArray? other) { + final _ret = _lib._objc_msgSend_59( + _id, _lib._sel_differenceFromArray_1, other?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSArray arrayByApplyingDifference_(NSObject? difference) { + final _ret = _lib._objc_msgSend_54(_id, + _lib._sel_arrayByApplyingDifference_1, difference?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + void getObjects_(ffi.Pointer> objects) { + return _lib._objc_msgSend_114(_id, _lib._sel_getObjects_1, objects); + } + + static NSArray arrayWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_115(_lib._class_NSArray1, + _lib._sel_arrayWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithContentsOfURL_(PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_116(_lib._class_NSArray1, + _lib._sel_arrayWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithContentsOfFile_(NSString? path) { + final _ret = _lib._objc_msgSend_115( + _id, _lib._sel_initWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_116( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + bool writeToFile_atomically_(NSString? path, bool useAuxiliaryFile) { + return _lib._objc_msgSend_25(_id, _lib._sel_writeToFile_atomically_1, + path?._id ?? ffi.nullptr, useAuxiliaryFile); + } + + bool writeToURL_atomically_(NSURL? url, bool atomically) { + return _lib._objc_msgSend_117(_id, _lib._sel_writeToURL_atomically_1, + url?._id ?? ffi.nullptr, atomically); + } + + NSArray pathsMatchingExtensions_(NSArray? filterTypes) { + final _ret = _lib._objc_msgSend_55(_id, _lib._sel_pathsMatchingExtensions_1, + filterTypes?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + @override + NSObject valueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + @override + void setValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setValue_forKey_1, value._id, key?._id ?? ffi.nullptr); + } + + void addObserver_toObjectsAtIndexes_forKeyPath_options_context_( + NSObject? observer, + NSIndexSet? indexes, + NSString? keyPath, + int options, + ffi.Pointer context) { + return _lib._objc_msgSend_119( + _id, + _lib._sel_addObserver_toObjectsAtIndexes_forKeyPath_options_context_1, + observer?._id ?? ffi.nullptr, + indexes?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + options, + context); + } + + void removeObserver_fromObjectsAtIndexes_forKeyPath_context_( + NSObject? observer, + NSIndexSet? indexes, + NSString? keyPath, + ffi.Pointer context) { + return _lib._objc_msgSend_120( + _id, + _lib._sel_removeObserver_fromObjectsAtIndexes_forKeyPath_context_1, + observer?._id ?? ffi.nullptr, + indexes?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + context); + } + + void removeObserver_fromObjectsAtIndexes_forKeyPath_( + NSObject? observer, NSIndexSet? indexes, NSString? keyPath) { + return _lib._objc_msgSend_121( + _id, + _lib._sel_removeObserver_fromObjectsAtIndexes_forKeyPath_1, + observer?._id ?? ffi.nullptr, + indexes?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr); + } + + @override + void addObserver_forKeyPath_options_context_(NSObject? observer, + NSString? keyPath, int options, ffi.Pointer context) { + return _lib._objc_msgSend_122( + _id, + _lib._sel_addObserver_forKeyPath_options_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + options, + context); + } + + @override + void removeObserver_forKeyPath_context_( + NSObject? observer, NSString? keyPath, ffi.Pointer context) { + return _lib._objc_msgSend_123( + _id, + _lib._sel_removeObserver_forKeyPath_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + context); + } + + @override + void removeObserver_forKeyPath_(NSObject? observer, NSString? keyPath) { + return _lib._objc_msgSend_124(_id, _lib._sel_removeObserver_forKeyPath_1, + observer?._id ?? ffi.nullptr, keyPath?._id ?? ffi.nullptr); + } + + NSArray sortedArrayUsingDescriptors_(NSArray? sortDescriptors) { + final _ret = _lib._objc_msgSend_55( + _id, + _lib._sel_sortedArrayUsingDescriptors_1, + sortDescriptors?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray filteredArrayUsingPredicate_(NSPredicate? predicate) { + final _ret = _lib._objc_msgSend_159(_id, + _lib._sel_filteredArrayUsingPredicate_1, predicate?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSArray1, _lib._sel_new1); + return NSArray._(_ret, _lib, retain: false, release: true); + } + + static NSArray alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSArray1, _lib._sel_alloc1); + return NSArray._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSArray1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSArray1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSArray1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSArray1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSArray1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSArray1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSArray1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSArray1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSArray1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSError extends NSObject { + NSError._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSError] that points to the same underlying object as [other]. + static NSError castFrom(T other) { + return NSError._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSError] that wraps the given raw object pointer. + static NSError castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSError._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSError]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSError1); + } + + NSError initWithDomain_code_userInfo_( + NSString domain, int code, NSObject? dict) { + final _ret = _lib._objc_msgSend_69( + _id, + _lib._sel_initWithDomain_code_userInfo_1, + domain._id, + code, + dict?._id ?? ffi.nullptr); + return NSError._(_ret, _lib, retain: true, release: true); + } + + static NSError errorWithDomain_code_userInfo_( + PedometerBindings _lib, NSString domain, int code, NSObject? dict) { + final _ret = _lib._objc_msgSend_69( + _lib._class_NSError1, + _lib._sel_errorWithDomain_code_userInfo_1, + domain._id, + code, + dict?._id ?? ffi.nullptr); + return NSError._(_ret, _lib, retain: true, release: true); + } + + NSString get domain { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_domain1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + int get code { + return _lib._objc_msgSend_70(_id, _lib._sel_code1); + } + + NSObject? get userInfo { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_userInfo1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + NSString? get localizedDescription { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_localizedDescription1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get localizedFailureReason { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_localizedFailureReason1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get localizedRecoverySuggestion { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_localizedRecoverySuggestion1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray? get localizedRecoveryOptions { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_localizedRecoveryOptions1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject get recoveryAttempter { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_recoveryAttempter1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSString? get helpAnchor { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_helpAnchor1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray? get underlyingErrors { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_underlyingErrors1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static void setUserInfoValueProviderForDomain_provider_( + PedometerBindings _lib, NSString errorDomain, ObjCBlock provider) { + return _lib._objc_msgSend_72( + _lib._class_NSError1, + _lib._sel_setUserInfoValueProviderForDomain_provider_1, + errorDomain._id, + provider._id); + } + + static ObjCBlock userInfoValueProviderForDomain_(PedometerBindings _lib, + NSError? err, NSString userInfoKey, NSString errorDomain) { + final _ret = _lib._objc_msgSend_73( + _lib._class_NSError1, + _lib._sel_userInfoValueProviderForDomain_1, + err?._id ?? ffi.nullptr, + userInfoKey._id, + errorDomain._id); + return ObjCBlock._(_ret, _lib); + } + + static NSError new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSError1, _lib._sel_new1); + return NSError._(_ret, _lib, retain: false, release: true); + } + + static NSError alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSError1, _lib._sel_alloc1); + return NSError._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSError1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSError1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSError1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSError1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSError1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSError1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSError1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSError1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSError1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class _ObjCBlockBase implements ffi.Finalizable { + final ffi.Pointer<_ObjCBlock> _id; + final PedometerBindings _lib; + bool _pendingRelease; + + _ObjCBlockBase._(this._id, this._lib, + {bool retain = false, bool release = false}) + : _pendingRelease = release { + if (retain) { + _lib._Block_copy(_id.cast()); + } + if (release) { + _lib._objc_releaseFinalizer11.attach(this, _id.cast(), detach: this); + } + } + + /// Releases the reference to the underlying ObjC block held by this wrapper. + /// Throws a StateError if this wrapper doesn't currently hold a reference. + void release() { + if (_pendingRelease) { + _pendingRelease = false; + _lib._Block_release(_id.cast()); + _lib._objc_releaseFinalizer11.detach(this); + } else { + throw StateError( + 'Released an ObjC block that was unowned or already released.'); + } + } + + @override + bool operator ==(Object other) { + return other is _ObjCBlockBase && _id == other._id; + } + + @override + int get hashCode => _id.hashCode; +} + +ffi.Pointer _ObjCBlock_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + ffi.Pointer Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock_closureRegistry = {}; +int _ObjCBlock_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock_registerClosure(Function fn) { + final id = ++_ObjCBlock_closureRegistryIndex; + _ObjCBlock_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +ffi.Pointer _ObjCBlock_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1) { + return _ObjCBlock_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock extends _ObjCBlockBase { + ObjCBlock._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock.fromFunction( + PedometerBindings lib, + ffi.Pointer Function( + ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock_closureTrampoline) + .cast(), + _ObjCBlock_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + ffi.Pointer call( + ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class _ObjCBlockDesc extends ffi.Struct { + @ffi.UnsignedLong() + external int reserved; + + @ffi.UnsignedLong() + external int size; + + external ffi.Pointer copy_helper; + + external ffi.Pointer dispose_helper; + + external ffi.Pointer signature; +} + +class _ObjCBlock extends ffi.Struct { + external ffi.Pointer isa; + + @ffi.Int() + external int flags; + + @ffi.Int() + external int reserved; + + external ffi.Pointer invoke; + + external ffi.Pointer<_ObjCBlockDesc> descriptor; + + external ffi.Pointer target; +} + +class NSIndexSet extends NSObject { + NSIndexSet._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSIndexSet] that points to the same underlying object as [other]. + static NSIndexSet castFrom(T other) { + return NSIndexSet._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSIndexSet] that wraps the given raw object pointer. + static NSIndexSet castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSIndexSet._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSIndexSet]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSIndexSet1); + } + + static NSIndexSet indexSet(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSIndexSet1, _lib._sel_indexSet1); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + static NSIndexSet indexSetWithIndex_(PedometerBindings _lib, int value) { + final _ret = _lib._objc_msgSend_52( + _lib._class_NSIndexSet1, _lib._sel_indexSetWithIndex_1, value); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + static NSIndexSet indexSetWithIndexesInRange_( + PedometerBindings _lib, _NSRange range) { + final _ret = _lib._objc_msgSend_77( + _lib._class_NSIndexSet1, _lib._sel_indexSetWithIndexesInRange_1, range); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet initWithIndexesInRange_(_NSRange range) { + final _ret = + _lib._objc_msgSend_77(_id, _lib._sel_initWithIndexesInRange_1, range); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet initWithIndexSet_(NSIndexSet? indexSet) { + final _ret = _lib._objc_msgSend_78( + _id, _lib._sel_initWithIndexSet_1, indexSet?._id ?? ffi.nullptr); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet initWithIndex_(int value) { + final _ret = _lib._objc_msgSend_52(_id, _lib._sel_initWithIndex_1, value); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + bool isEqualToIndexSet_(NSIndexSet? indexSet) { + return _lib._objc_msgSend_79( + _id, _lib._sel_isEqualToIndexSet_1, indexSet?._id ?? ffi.nullptr); + } + + int get count { + return _lib._objc_msgSend_10(_id, _lib._sel_count1); + } + + int get firstIndex { + return _lib._objc_msgSend_10(_id, _lib._sel_firstIndex1); + } + + int get lastIndex { + return _lib._objc_msgSend_10(_id, _lib._sel_lastIndex1); + } + + int indexGreaterThanIndex_(int value) { + return _lib._objc_msgSend_80(_id, _lib._sel_indexGreaterThanIndex_1, value); + } + + int indexLessThanIndex_(int value) { + return _lib._objc_msgSend_80(_id, _lib._sel_indexLessThanIndex_1, value); + } + + int indexGreaterThanOrEqualToIndex_(int value) { + return _lib._objc_msgSend_80( + _id, _lib._sel_indexGreaterThanOrEqualToIndex_1, value); + } + + int indexLessThanOrEqualToIndex_(int value) { + return _lib._objc_msgSend_80( + _id, _lib._sel_indexLessThanOrEqualToIndex_1, value); + } + + int getIndexes_maxCount_inIndexRange_( + ffi.Pointer indexBuffer, + int bufferSize, + ffi.Pointer<_NSRange> range) { + return _lib._objc_msgSend_81( + _id, + _lib._sel_getIndexes_maxCount_inIndexRange_1, + indexBuffer, + bufferSize, + range); + } + + int countOfIndexesInRange_(_NSRange range) { + return _lib._objc_msgSend_82(_id, _lib._sel_countOfIndexesInRange_1, range); + } + + bool containsIndex_(int value) { + return _lib._objc_msgSend_83(_id, _lib._sel_containsIndex_1, value); + } + + bool containsIndexesInRange_(_NSRange range) { + return _lib._objc_msgSend_84( + _id, _lib._sel_containsIndexesInRange_1, range); + } + + bool containsIndexes_(NSIndexSet? indexSet) { + return _lib._objc_msgSend_79( + _id, _lib._sel_containsIndexes_1, indexSet?._id ?? ffi.nullptr); + } + + bool intersectsIndexesInRange_(_NSRange range) { + return _lib._objc_msgSend_84( + _id, _lib._sel_intersectsIndexesInRange_1, range); + } + + void enumerateIndexesUsingBlock_(ObjCBlock1 block) { + return _lib._objc_msgSend_85( + _id, _lib._sel_enumerateIndexesUsingBlock_1, block._id); + } + + void enumerateIndexesWithOptions_usingBlock_(int opts, ObjCBlock1 block) { + return _lib._objc_msgSend_86(_id, + _lib._sel_enumerateIndexesWithOptions_usingBlock_1, opts, block._id); + } + + void enumerateIndexesInRange_options_usingBlock_( + _NSRange range, int opts, ObjCBlock1 block) { + return _lib._objc_msgSend_87( + _id, + _lib._sel_enumerateIndexesInRange_options_usingBlock_1, + range, + opts, + block._id); + } + + int indexPassingTest_(ObjCBlock2 predicate) { + return _lib._objc_msgSend_88( + _id, _lib._sel_indexPassingTest_1, predicate._id); + } + + int indexWithOptions_passingTest_(int opts, ObjCBlock2 predicate) { + return _lib._objc_msgSend_89( + _id, _lib._sel_indexWithOptions_passingTest_1, opts, predicate._id); + } + + int indexInRange_options_passingTest_( + _NSRange range, int opts, ObjCBlock2 predicate) { + return _lib._objc_msgSend_90( + _id, + _lib._sel_indexInRange_options_passingTest_1, + range, + opts, + predicate._id); + } + + NSIndexSet indexesPassingTest_(ObjCBlock2 predicate) { + final _ret = _lib._objc_msgSend_91( + _id, _lib._sel_indexesPassingTest_1, predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet indexesWithOptions_passingTest_(int opts, ObjCBlock2 predicate) { + final _ret = _lib._objc_msgSend_92( + _id, _lib._sel_indexesWithOptions_passingTest_1, opts, predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet indexesInRange_options_passingTest_( + _NSRange range, int opts, ObjCBlock2 predicate) { + final _ret = _lib._objc_msgSend_93( + _id, + _lib._sel_indexesInRange_options_passingTest_1, + range, + opts, + predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + void enumerateRangesUsingBlock_(ObjCBlock3 block) { + return _lib._objc_msgSend_94( + _id, _lib._sel_enumerateRangesUsingBlock_1, block._id); + } + + void enumerateRangesWithOptions_usingBlock_(int opts, ObjCBlock3 block) { + return _lib._objc_msgSend_95(_id, + _lib._sel_enumerateRangesWithOptions_usingBlock_1, opts, block._id); + } + + void enumerateRangesInRange_options_usingBlock_( + _NSRange range, int opts, ObjCBlock3 block) { + return _lib._objc_msgSend_96( + _id, + _lib._sel_enumerateRangesInRange_options_usingBlock_1, + range, + opts, + block._id); + } + + static NSIndexSet new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSIndexSet1, _lib._sel_new1); + return NSIndexSet._(_ret, _lib, retain: false, release: true); + } + + static NSIndexSet alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSIndexSet1, _lib._sel_alloc1); + return NSIndexSet._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSIndexSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSIndexSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSIndexSet1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSIndexSet1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSIndexSet1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSIndexSet1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSIndexSet1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSIndexSet1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSIndexSet1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock1_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, int arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.UnsignedLong arg0, ffi.Pointer arg1)>>() + .asFunction arg1)>()( + arg0, arg1); +} + +final _ObjCBlock1_closureRegistry = {}; +int _ObjCBlock1_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock1_registerClosure(Function fn) { + final id = ++_ObjCBlock1_closureRegistryIndex; + _ObjCBlock1_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock1_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, int arg0, ffi.Pointer arg1) { + return _ObjCBlock1_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock1 extends _ObjCBlockBase { + ObjCBlock1._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock1.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.UnsignedLong arg0, ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.UnsignedLong arg0, + ffi.Pointer arg1)>( + _ObjCBlock1_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock1.fromFunction(PedometerBindings lib, + void Function(int arg0, ffi.Pointer arg1) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.UnsignedLong arg0, + ffi.Pointer arg1)>( + _ObjCBlock1_closureTrampoline) + .cast(), + _ObjCBlock1_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(int arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.UnsignedLong arg0, ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, int arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSEnumerationOptions { + static const int NSEnumerationConcurrent = 1; + static const int NSEnumerationReverse = 2; +} + +bool _ObjCBlock2_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, int arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.UnsignedLong arg0, ffi.Pointer arg1)>>() + .asFunction arg1)>()( + arg0, arg1); +} + +final _ObjCBlock2_closureRegistry = {}; +int _ObjCBlock2_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock2_registerClosure(Function fn) { + final id = ++_ObjCBlock2_closureRegistryIndex; + _ObjCBlock2_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock2_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, int arg0, ffi.Pointer arg1) { + return _ObjCBlock2_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock2 extends _ObjCBlockBase { + ObjCBlock2._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock2.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.UnsignedLong arg0, ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.UnsignedLong arg0, + ffi.Pointer arg1)>( + _ObjCBlock2_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock2.fromFunction(PedometerBindings lib, + bool Function(int arg0, ffi.Pointer arg1) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.UnsignedLong arg0, + ffi.Pointer arg1)>( + _ObjCBlock2_closureTrampoline, false) + .cast(), + _ObjCBlock2_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call(int arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer<_ObjCBlock> block, + ffi.UnsignedLong arg0, ffi.Pointer arg1)>>() + .asFunction< + bool Function(ffi.Pointer<_ObjCBlock> block, int arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock3_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, _NSRange arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(_NSRange arg0, ffi.Pointer arg1)>>() + .asFunction< + void Function( + _NSRange arg0, ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock3_closureRegistry = {}; +int _ObjCBlock3_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock3_registerClosure(Function fn) { + final id = ++_ObjCBlock3_closureRegistryIndex; + _ObjCBlock3_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock3_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, _NSRange arg0, ffi.Pointer arg1) { + return _ObjCBlock3_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock3 extends _ObjCBlockBase { + ObjCBlock3._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock3.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(_NSRange arg0, ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + _NSRange arg0, ffi.Pointer arg1)>( + _ObjCBlock3_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock3.fromFunction(PedometerBindings lib, + void Function(_NSRange arg0, ffi.Pointer arg1) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + _NSRange arg0, ffi.Pointer arg1)>( + _ObjCBlock3_closureTrampoline) + .cast(), + _ObjCBlock3_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(_NSRange arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, _NSRange arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, _NSRange arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock4_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.UnsignedLong arg1, ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, int arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock4_closureRegistry = {}; +int _ObjCBlock4_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock4_registerClosure(Function fn) { + final id = ++_ObjCBlock4_closureRegistryIndex; + _ObjCBlock4_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock4_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return _ObjCBlock4_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock4 extends _ObjCBlockBase { + ObjCBlock4._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock4.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.UnsignedLong arg1, ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1, + ffi.Pointer arg2)>( + _ObjCBlock4_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock4.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, int arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1, + ffi.Pointer arg2)>( + _ObjCBlock4_closureTrampoline) + .cast(), + _ObjCBlock4_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + int arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +bool _ObjCBlock5_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.UnsignedLong arg1, ffi.Pointer arg2)>>() + .asFunction< + bool Function(ffi.Pointer arg0, int arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock5_closureRegistry = {}; +int _ObjCBlock5_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock5_registerClosure(Function fn) { + final id = ++_ObjCBlock5_closureRegistryIndex; + _ObjCBlock5_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock5_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return _ObjCBlock5_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock5 extends _ObjCBlockBase { + ObjCBlock5._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock5.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.UnsignedLong arg1, ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1, + ffi.Pointer arg2)>( + _ObjCBlock5_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock5.fromFunction( + PedometerBindings lib, + bool Function(ffi.Pointer arg0, int arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1, + ffi.Pointer arg2)>( + _ObjCBlock5_closureTrampoline, false) + .cast(), + _ObjCBlock5_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call( + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1, + ffi.Pointer arg2)>>() + .asFunction< + bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + int arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +int _ObjCBlock6_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + int Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock6_closureRegistry = {}; +int _ObjCBlock6_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock6_registerClosure(Function fn) { + final id = ++_ObjCBlock6_closureRegistryIndex; + _ObjCBlock6_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +int _ObjCBlock6_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock6_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock6 extends _ObjCBlockBase { + ObjCBlock6._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock6.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Int32 Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Int32 Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock6_fnPtrTrampoline, 0) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock6.fromFunction( + PedometerBindings lib, + int Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Int32 Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock6_closureTrampoline, 0) + .cast(), + _ObjCBlock6_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + int call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Int32 Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + int Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSComparisonResult { + static const int NSOrderedAscending = -1; + static const int NSOrderedSame = 0; + static const int NSOrderedDescending = 1; +} + +abstract class NSSortOptions { + static const int NSSortConcurrent = 1; + static const int NSSortStable = 16; +} + +abstract class NSBinarySearchingOptions { + static const int NSBinarySearchingFirstEqual = 256; + static const int NSBinarySearchingLastEqual = 512; + static const int NSBinarySearchingInsertionIndex = 1024; +} + +/// Options supported by methods that produce difference objects. +abstract class NSOrderedCollectionDifferenceCalculationOptions { + /// Insertion changes do not store a reference to the inserted object. + static const int NSOrderedCollectionDifferenceCalculationOmitInsertedObjects = + 1; + + /// Insertion changes do not store a reference to the removed object. + static const int NSOrderedCollectionDifferenceCalculationOmitRemovedObjects = + 2; + + /// Assume objects that were uniquely removed and inserted were moved. + /// This is useful when diffing based on identity instead of equality. + static const int NSOrderedCollectionDifferenceCalculationInferMoves = 4; +} + +bool _ObjCBlock7_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock7_closureRegistry = {}; +int _ObjCBlock7_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock7_registerClosure(Function fn) { + final id = ++_ObjCBlock7_closureRegistryIndex; + _ObjCBlock7_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock7_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock7_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock7 extends _ObjCBlockBase { + ObjCBlock7._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock7.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib + ._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock7_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock7.fromFunction( + PedometerBindings lib, + bool Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock7_closureTrampoline, false) + .cast(), + _ObjCBlock7_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSKeyValueObservingOptions { + static const int NSKeyValueObservingOptionNew = 1; + static const int NSKeyValueObservingOptionOld = 2; + static const int NSKeyValueObservingOptionInitial = 4; + static const int NSKeyValueObservingOptionPrior = 8; +} + +class NSPredicate extends NSObject { + NSPredicate._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSPredicate] that points to the same underlying object as [other]. + static NSPredicate castFrom(T other) { + return NSPredicate._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSPredicate] that wraps the given raw object pointer. + static NSPredicate castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSPredicate._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSPredicate]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSPredicate1); + } + + static NSPredicate predicateWithFormat_argumentArray_( + PedometerBindings _lib, NSString? predicateFormat, NSArray? arguments) { + final _ret = _lib._objc_msgSend_125( + _lib._class_NSPredicate1, + _lib._sel_predicateWithFormat_argumentArray_1, + predicateFormat?._id ?? ffi.nullptr, + arguments?._id ?? ffi.nullptr); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + static NSPredicate predicateWithFormat_( + PedometerBindings _lib, NSString? predicateFormat) { + final _ret = _lib._objc_msgSend_126(_lib._class_NSPredicate1, + _lib._sel_predicateWithFormat_1, predicateFormat?._id ?? ffi.nullptr); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + static NSPredicate predicateWithFormat_arguments_(PedometerBindings _lib, + NSString? predicateFormat, ffi.Pointer argList) { + final _ret = _lib._objc_msgSend_127( + _lib._class_NSPredicate1, + _lib._sel_predicateWithFormat_arguments_1, + predicateFormat?._id ?? ffi.nullptr, + argList); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + static NSPredicate predicateFromMetadataQueryString_( + PedometerBindings _lib, NSString? queryString) { + final _ret = _lib._objc_msgSend_126( + _lib._class_NSPredicate1, + _lib._sel_predicateFromMetadataQueryString_1, + queryString?._id ?? ffi.nullptr); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + static NSPredicate predicateWithValue_(PedometerBindings _lib, bool value) { + final _ret = _lib._objc_msgSend_128( + _lib._class_NSPredicate1, _lib._sel_predicateWithValue_1, value); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + static NSPredicate predicateWithBlock_( + PedometerBindings _lib, ObjCBlock8 block) { + final _ret = _lib._objc_msgSend_157( + _lib._class_NSPredicate1, _lib._sel_predicateWithBlock_1, block._id); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + NSString? get predicateFormat { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_predicateFormat1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSPredicate predicateWithSubstitutionVariables_(NSDictionary? variables) { + final _ret = _lib._objc_msgSend_141( + _id, + _lib._sel_predicateWithSubstitutionVariables_1, + variables?._id ?? ffi.nullptr); + return NSPredicate._(_ret, _lib, retain: true, release: true); + } + + bool evaluateWithObject_(NSObject object) { + return _lib._objc_msgSend_0( + _id, _lib._sel_evaluateWithObject_1, object._id); + } + + bool evaluateWithObject_substitutionVariables_( + NSObject object, NSDictionary? bindings) { + return _lib._objc_msgSend_158( + _id, + _lib._sel_evaluateWithObject_substitutionVariables_1, + object._id, + bindings?._id ?? ffi.nullptr); + } + + void allowEvaluation() { + return _lib._objc_msgSend_1(_id, _lib._sel_allowEvaluation1); + } + + static NSPredicate new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSPredicate1, _lib._sel_new1); + return NSPredicate._(_ret, _lib, retain: false, release: true); + } + + static NSPredicate alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSPredicate1, _lib._sel_alloc1); + return NSPredicate._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSPredicate1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSPredicate1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSPredicate1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSPredicate1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSPredicate1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSPredicate1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSPredicate1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSPredicate1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSPredicate1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +bool _ObjCBlock8_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock8_closureRegistry = {}; +int _ObjCBlock8_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock8_registerClosure(Function fn) { + final id = ++_ObjCBlock8_closureRegistryIndex; + _ObjCBlock8_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock8_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock8_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock8 extends _ObjCBlockBase { + ObjCBlock8._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock8.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib + ._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock8_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock8.fromFunction( + PedometerBindings lib, + bool Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock8_closureTrampoline, false) + .cast(), + _ObjCBlock8_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// Immutable Dictionary +class NSDictionary extends NSObject { + NSDictionary._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSDictionary] that points to the same underlying object as [other]. + static NSDictionary castFrom(T other) { + return NSDictionary._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSDictionary] that wraps the given raw object pointer. + static NSDictionary castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSDictionary._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSDictionary]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSDictionary1); + } + + int get count { + return _lib._objc_msgSend_10(_id, _lib._sel_count1); + } + + NSObject objectForKey_(NSObject aKey) { + final _ret = _lib._objc_msgSend_16(_id, _lib._sel_objectForKey_1, aKey._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSEnumerator keyEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_keyEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + @override + NSDictionary init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithObjects_forKeys_count_( + ffi.Pointer> objects, + ffi.Pointer> keys, + int cnt) { + final _ret = _lib._objc_msgSend_129( + _id, _lib._sel_initWithObjects_forKeys_count_1, objects, keys, cnt); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSArray? get allKeys { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_allKeys1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray allKeysForObject_(NSObject anObject) { + final _ret = + _lib._objc_msgSend_54(_id, _lib._sel_allKeysForObject_1, anObject._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get allValues { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_allValues1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get descriptionInStringsFileFormat { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_descriptionInStringsFileFormat1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_(NSObject locale) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_descriptionWithLocale_1, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_indent_(NSObject locale, int level) { + final _ret = _lib._objc_msgSend_58( + _id, _lib._sel_descriptionWithLocale_indent_1, locale._id, level); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool isEqualToDictionary_(NSDictionary? otherDictionary) { + return _lib._objc_msgSend_130(_id, _lib._sel_isEqualToDictionary_1, + otherDictionary?._id ?? ffi.nullptr); + } + + NSEnumerator objectEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_objectEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + NSArray objectsForKeys_notFoundMarker_(NSArray? keys, NSObject marker) { + final _ret = _lib._objc_msgSend_131( + _id, + _lib._sel_objectsForKeys_notFoundMarker_1, + keys?._id ?? ffi.nullptr, + marker._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + bool writeToURL_error_( + NSURL? url, ffi.Pointer> error) { + return _lib._objc_msgSend_75( + _id, _lib._sel_writeToURL_error_1, url?._id ?? ffi.nullptr, error); + } + + NSArray keysSortedByValueUsingSelector_(ffi.Pointer comparator) { + final _ret = _lib._objc_msgSend_67( + _id, _lib._sel_keysSortedByValueUsingSelector_1, comparator); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + void getObjects_andKeys_count_(ffi.Pointer> objects, + ffi.Pointer> keys, int count) { + return _lib._objc_msgSend_132( + _id, _lib._sel_getObjects_andKeys_count_1, objects, keys, count); + } + + NSObject objectForKeyedSubscript_(NSObject key) { + final _ret = _lib._objc_msgSend_16( + _id, _lib._sel_objectForKeyedSubscript_1, key._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void enumerateKeysAndObjectsUsingBlock_(ObjCBlock9 block) { + return _lib._objc_msgSend_133( + _id, _lib._sel_enumerateKeysAndObjectsUsingBlock_1, block._id); + } + + void enumerateKeysAndObjectsWithOptions_usingBlock_( + int opts, ObjCBlock9 block) { + return _lib._objc_msgSend_134( + _id, + _lib._sel_enumerateKeysAndObjectsWithOptions_usingBlock_1, + opts, + block._id); + } + + NSArray keysSortedByValueUsingComparator_(ObjCBlock6 cmptr) { + final _ret = _lib._objc_msgSend_107( + _id, _lib._sel_keysSortedByValueUsingComparator_1, cmptr._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray keysSortedByValueWithOptions_usingComparator_( + int opts, ObjCBlock6 cmptr) { + final _ret = _lib._objc_msgSend_108( + _id, + _lib._sel_keysSortedByValueWithOptions_usingComparator_1, + opts, + cmptr._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject keysOfEntriesPassingTest_(ObjCBlock10 predicate) { + final _ret = _lib._objc_msgSend_135( + _id, _lib._sel_keysOfEntriesPassingTest_1, predicate._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject keysOfEntriesWithOptions_passingTest_( + int opts, ObjCBlock10 predicate) { + final _ret = _lib._objc_msgSend_136(_id, + _lib._sel_keysOfEntriesWithOptions_passingTest_1, opts, predicate._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + /// This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:andKeys:count: + void getObjects_andKeys_(ffi.Pointer> objects, + ffi.Pointer> keys) { + return _lib._objc_msgSend_137( + _id, _lib._sel_getObjects_andKeys_1, objects, keys); + } + + static NSDictionary dictionaryWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_138(_lib._class_NSDictionary1, + _lib._sel_dictionaryWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithContentsOfURL_( + PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_139(_lib._class_NSDictionary1, + _lib._sel_dictionaryWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithContentsOfFile_(NSString? path) { + final _ret = _lib._objc_msgSend_138( + _id, _lib._sel_initWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_139( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + bool writeToFile_atomically_(NSString? path, bool useAuxiliaryFile) { + return _lib._objc_msgSend_25(_id, _lib._sel_writeToFile_atomically_1, + path?._id ?? ffi.nullptr, useAuxiliaryFile); + } + + bool writeToURL_atomically_(NSURL? url, bool atomically) { + return _lib._objc_msgSend_117(_id, _lib._sel_writeToURL_atomically_1, + url?._id ?? ffi.nullptr, atomically); + } + + static NSDictionary dictionary(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDictionary1, _lib._sel_dictionary1); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithObject_forKey_( + PedometerBindings _lib, NSObject object, NSObject key) { + final _ret = _lib._objc_msgSend_140(_lib._class_NSDictionary1, + _lib._sel_dictionaryWithObject_forKey_1, object._id, key._id); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithObjects_forKeys_count_( + PedometerBindings _lib, + ffi.Pointer> objects, + ffi.Pointer> keys, + int cnt) { + final _ret = _lib._objc_msgSend_129(_lib._class_NSDictionary1, + _lib._sel_dictionaryWithObjects_forKeys_count_1, objects, keys, cnt); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithObjectsAndKeys_( + PedometerBindings _lib, NSObject firstObject) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSDictionary1, + _lib._sel_dictionaryWithObjectsAndKeys_1, firstObject._id); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithDictionary_( + PedometerBindings _lib, NSDictionary? dict) { + final _ret = _lib._objc_msgSend_141(_lib._class_NSDictionary1, + _lib._sel_dictionaryWithDictionary_1, dict?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithObjects_forKeys_( + PedometerBindings _lib, NSArray? objects, NSArray? keys) { + final _ret = _lib._objc_msgSend_142( + _lib._class_NSDictionary1, + _lib._sel_dictionaryWithObjects_forKeys_1, + objects?._id ?? ffi.nullptr, + keys?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithObjectsAndKeys_(NSObject firstObject) { + final _ret = _lib._objc_msgSend_16( + _id, _lib._sel_initWithObjectsAndKeys_1, firstObject._id); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithDictionary_(NSDictionary? otherDictionary) { + final _ret = _lib._objc_msgSend_141(_id, _lib._sel_initWithDictionary_1, + otherDictionary?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithDictionary_copyItems_( + NSDictionary? otherDictionary, bool flag) { + final _ret = _lib._objc_msgSend_143( + _id, + _lib._sel_initWithDictionary_copyItems_1, + otherDictionary?._id ?? ffi.nullptr, + flag); + return NSDictionary._(_ret, _lib, retain: false, release: true); + } + + NSDictionary initWithObjects_forKeys_(NSArray? objects, NSArray? keys) { + final _ret = _lib._objc_msgSend_142( + _id, + _lib._sel_initWithObjects_forKeys_1, + objects?._id ?? ffi.nullptr, + keys?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary initWithContentsOfURL_error_( + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_144( + _id, + _lib._sel_initWithContentsOfURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithContentsOfURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_144( + _lib._class_NSDictionary1, + _lib._sel_dictionaryWithContentsOfURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSObject sharedKeySetForKeys_(PedometerBindings _lib, NSArray? keys) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSDictionary1, + _lib._sel_sharedKeySetForKeys_1, keys?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + int countByEnumeratingWithState_objects_count_( + ffi.Pointer state, + ffi.Pointer> buffer, + int len) { + return _lib._objc_msgSend_145( + _id, + _lib._sel_countByEnumeratingWithState_objects_count_1, + state, + buffer, + len); + } + + int fileSize() { + return _lib._objc_msgSend_146(_id, _lib._sel_fileSize1); + } + + NSDate fileModificationDate() { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_fileModificationDate1); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSString fileType() { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_fileType1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + int filePosixPermissions() { + return _lib._objc_msgSend_10(_id, _lib._sel_filePosixPermissions1); + } + + NSString fileOwnerAccountName() { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_fileOwnerAccountName1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString fileGroupOwnerAccountName() { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_fileGroupOwnerAccountName1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + int fileSystemNumber() { + return _lib._objc_msgSend_70(_id, _lib._sel_fileSystemNumber1); + } + + int fileSystemFileNumber() { + return _lib._objc_msgSend_10(_id, _lib._sel_fileSystemFileNumber1); + } + + bool fileExtensionHidden() { + return _lib._objc_msgSend_12(_id, _lib._sel_fileExtensionHidden1); + } + + int fileHFSCreatorCode() { + return _lib._objc_msgSend_155(_id, _lib._sel_fileHFSCreatorCode1); + } + + int fileHFSTypeCode() { + return _lib._objc_msgSend_155(_id, _lib._sel_fileHFSTypeCode1); + } + + bool fileIsImmutable() { + return _lib._objc_msgSend_12(_id, _lib._sel_fileIsImmutable1); + } + + bool fileIsAppendOnly() { + return _lib._objc_msgSend_12(_id, _lib._sel_fileIsAppendOnly1); + } + + NSDate fileCreationDate() { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_fileCreationDate1); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSNumber fileOwnerAccountID() { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_fileOwnerAccountID1); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber fileGroupOwnerAccountID() { + final _ret = + _lib._objc_msgSend_156(_id, _lib._sel_fileGroupOwnerAccountID1); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + @override + NSObject valueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDictionary1, _lib._sel_new1); + return NSDictionary._(_ret, _lib, retain: false, release: true); + } + + static NSDictionary alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDictionary1, _lib._sel_alloc1); + return NSDictionary._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSDictionary1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSDictionary1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDictionary1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDictionary1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSDictionary1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSDictionary1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSDictionary1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSDictionary1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSDictionary1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock9_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1, ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock9_closureRegistry = {}; +int _ObjCBlock9_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock9_registerClosure(Function fn) { + final id = ++_ObjCBlock9_closureRegistryIndex; + _ObjCBlock9_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock9_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock9_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock9 extends _ObjCBlockBase { + ObjCBlock9._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock9.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock9_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock9.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock9_closureTrampoline) + .cast(), + _ObjCBlock9_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +bool _ObjCBlock10_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1, ffi.Pointer arg2)>>() + .asFunction< + bool Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock10_closureRegistry = {}; +int _ObjCBlock10_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock10_registerClosure(Function fn) { + final id = ++_ObjCBlock10_closureRegistryIndex; + _ObjCBlock10_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock10_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock10_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock10 extends _ObjCBlockBase { + ObjCBlock10._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock10.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer arg0, ffi.Pointer arg1, ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock10_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock10.fromFunction( + PedometerBindings lib, + bool Function(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock10_closureTrampoline, false) + .cast(), + _ObjCBlock10_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSFastEnumerationState extends ffi.Struct { + @ffi.UnsignedLong() + external int state; + + external ffi.Pointer> itemsPtr; + + external ffi.Pointer mutationsPtr; + + @ffi.Array.multi([5]) + external ffi.Array extra; +} + +class NSDate extends NSObject { + NSDate._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSDate] that points to the same underlying object as [other]. + static NSDate castFrom(T other) { + return NSDate._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSDate] that wraps the given raw object pointer. + static NSDate castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSDate._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSDate]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSDate1); + } + + double get timeIntervalSinceReferenceDate { + return _lib._objc_msgSend_147( + _id, _lib._sel_timeIntervalSinceReferenceDate1); + } + + @override + NSDate init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate initWithTimeIntervalSinceReferenceDate_(double ti) { + final _ret = _lib._objc_msgSend_148( + _id, _lib._sel_initWithTimeIntervalSinceReferenceDate_1, ti); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + double timeIntervalSinceDate_(NSDate? anotherDate) { + return _lib._objc_msgSend_149(_id, _lib._sel_timeIntervalSinceDate_1, + anotherDate?._id ?? ffi.nullptr); + } + + double get timeIntervalSinceNow { + return _lib._objc_msgSend_147(_id, _lib._sel_timeIntervalSinceNow1); + } + + double get timeIntervalSince1970 { + return _lib._objc_msgSend_147(_id, _lib._sel_timeIntervalSince19701); + } + + NSObject addTimeInterval_(double seconds) { + final _ret = + _lib._objc_msgSend_148(_id, _lib._sel_addTimeInterval_1, seconds); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSDate dateByAddingTimeInterval_(double ti) { + final _ret = + _lib._objc_msgSend_148(_id, _lib._sel_dateByAddingTimeInterval_1, ti); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate earlierDate_(NSDate? anotherDate) { + final _ret = _lib._objc_msgSend_150( + _id, _lib._sel_earlierDate_1, anotherDate?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate laterDate_(NSDate? anotherDate) { + final _ret = _lib._objc_msgSend_150( + _id, _lib._sel_laterDate_1, anotherDate?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + int compare_(NSDate? other) { + return _lib._objc_msgSend_151( + _id, _lib._sel_compare_1, other?._id ?? ffi.nullptr); + } + + bool isEqualToDate_(NSDate? otherDate) { + return _lib._objc_msgSend_152( + _id, _lib._sel_isEqualToDate_1, otherDate?._id ?? ffi.nullptr); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_(NSObject locale) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_descriptionWithLocale_1, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSDate date(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSDate1, _lib._sel_date1); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate dateWithTimeIntervalSinceNow_( + PedometerBindings _lib, double secs) { + final _ret = _lib._objc_msgSend_148( + _lib._class_NSDate1, _lib._sel_dateWithTimeIntervalSinceNow_1, secs); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate dateWithTimeIntervalSinceReferenceDate_( + PedometerBindings _lib, double ti) { + final _ret = _lib._objc_msgSend_148(_lib._class_NSDate1, + _lib._sel_dateWithTimeIntervalSinceReferenceDate_1, ti); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate dateWithTimeIntervalSince1970_( + PedometerBindings _lib, double secs) { + final _ret = _lib._objc_msgSend_148( + _lib._class_NSDate1, _lib._sel_dateWithTimeIntervalSince1970_1, secs); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate dateWithTimeInterval_sinceDate_( + PedometerBindings _lib, double secsToBeAdded, NSDate? date) { + final _ret = _lib._objc_msgSend_153( + _lib._class_NSDate1, + _lib._sel_dateWithTimeInterval_sinceDate_1, + secsToBeAdded, + date?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate? getDistantFuture(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_154(_lib._class_NSDate1, _lib._sel_distantFuture1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate? getDistantPast(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_154(_lib._class_NSDate1, _lib._sel_distantPast1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate? getNow(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_154(_lib._class_NSDate1, _lib._sel_now1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate initWithTimeIntervalSinceNow_(double secs) { + final _ret = _lib._objc_msgSend_148( + _id, _lib._sel_initWithTimeIntervalSinceNow_1, secs); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate initWithTimeIntervalSince1970_(double secs) { + final _ret = _lib._objc_msgSend_148( + _id, _lib._sel_initWithTimeIntervalSince1970_1, secs); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate initWithTimeInterval_sinceDate_(double secsToBeAdded, NSDate? date) { + final _ret = _lib._objc_msgSend_153( + _id, + _lib._sel_initWithTimeInterval_sinceDate_1, + secsToBeAdded, + date?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSDate new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSDate1, _lib._sel_new1); + return NSDate._(_ret, _lib, retain: false, release: true); + } + + static NSDate alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSDate1, _lib._sel_alloc1); + return NSDate._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSDate1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSDate1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDate1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDate1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSDate1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSDate1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSDate1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSDate1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSDate1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSURLBookmarkCreationOptions { + static const int NSURLBookmarkCreationPreferFileIDResolution = 256; + static const int NSURLBookmarkCreationMinimalBookmark = 512; + static const int NSURLBookmarkCreationSuitableForBookmarkFile = 1024; + static const int NSURLBookmarkCreationWithSecurityScope = 2048; + static const int NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess = 4096; + static const int NSURLBookmarkCreationWithoutImplicitSecurityScope = + 536870912; +} + +abstract class NSURLBookmarkResolutionOptions { + static const int NSURLBookmarkResolutionWithoutUI = 256; + static const int NSURLBookmarkResolutionWithoutMounting = 512; + static const int NSURLBookmarkResolutionWithSecurityScope = 1024; + static const int NSURLBookmarkResolutionWithoutImplicitStartAccessing = 32768; +} + +abstract class NSDataWritingOptions { + static const int NSDataWritingAtomic = 1; + static const int NSDataWritingWithoutOverwriting = 2; + static const int NSDataWritingFileProtectionNone = 268435456; + static const int NSDataWritingFileProtectionComplete = 536870912; + static const int NSDataWritingFileProtectionCompleteUnlessOpen = 805306368; + static const int + NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication = + 1073741824; + static const int NSDataWritingFileProtectionMask = 4026531840; + static const int NSAtomicWrite = 1; +} + +/// Data Search Options +abstract class NSDataSearchOptions { + static const int NSDataSearchBackwards = 1; + static const int NSDataSearchAnchored = 2; +} + +void _ObjCBlock11_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock11_closureRegistry = {}; +int _ObjCBlock11_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock11_registerClosure(Function fn) { + final id = ++_ObjCBlock11_closureRegistryIndex; + _ObjCBlock11_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock11_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return _ObjCBlock11_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock11 extends _ObjCBlockBase { + ObjCBlock11._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock11.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>( + _ObjCBlock11_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock11.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>( + _ObjCBlock11_closureTrampoline) + .cast(), + _ObjCBlock11_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// Read/Write Options +abstract class NSDataReadingOptions { + static const int NSDataReadingMappedIfSafe = 1; + static const int NSDataReadingUncached = 2; + static const int NSDataReadingMappedAlways = 8; + static const int NSDataReadingMapped = 1; + static const int NSMappedRead = 1; + static const int NSUncachedRead = 2; +} + +void _ObjCBlock12_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0, int arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, ffi.UnsignedLong arg1)>>() + .asFunction arg0, int arg1)>()( + arg0, arg1); +} + +final _ObjCBlock12_closureRegistry = {}; +int _ObjCBlock12_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock12_registerClosure(Function fn) { + final id = ++_ObjCBlock12_closureRegistryIndex; + _ObjCBlock12_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock12_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0, int arg1) { + return _ObjCBlock12_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock12 extends _ObjCBlockBase { + ObjCBlock12._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock12.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, ffi.UnsignedLong arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1)>( + _ObjCBlock12_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock12.fromFunction(PedometerBindings lib, + void Function(ffi.Pointer arg0, int arg1) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1)>( + _ObjCBlock12_closureTrampoline) + .cast(), + _ObjCBlock12_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, int arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.UnsignedLong arg1)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSDataBase64DecodingOptions { + static const int NSDataBase64DecodingIgnoreUnknownCharacters = 1; +} + +/// Base 64 Options +abstract class NSDataBase64EncodingOptions { + static const int NSDataBase64Encoding64CharacterLineLength = 1; + static const int NSDataBase64Encoding76CharacterLineLength = 2; + static const int NSDataBase64EncodingEndLineWithCarriageReturn = 16; + static const int NSDataBase64EncodingEndLineWithLineFeed = 32; +} + +abstract class NSDataCompressionAlgorithm { + static const int NSDataCompressionAlgorithmLZFSE = 0; + static const int NSDataCompressionAlgorithmLZ4 = 1; + static const int NSDataCompressionAlgorithmLZMA = 2; + static const int NSDataCompressionAlgorithmZlib = 3; +} + +/// ! +/// Describes the action an NSCoder should take when it encounters decode failures (e.g. corrupt data) for non-TopLevel decodes. +abstract class NSDecodingFailurePolicy { + static const int NSDecodingFailurePolicyRaiseException = 0; + static const int NSDecodingFailurePolicySetErrorAndReturn = 1; +} + +abstract class NSStringCompareOptions { + static const int NSCaseInsensitiveSearch = 1; + static const int NSLiteralSearch = 2; + static const int NSBackwardsSearch = 4; + static const int NSAnchoredSearch = 8; + static const int NSNumericSearch = 64; + static const int NSDiacriticInsensitiveSearch = 128; + static const int NSWidthInsensitiveSearch = 256; + static const int NSForcedOrderingSearch = 512; + static const int NSRegularExpressionSearch = 1024; +} + +class NSLocale extends NSObject { + NSLocale._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSLocale] that points to the same underlying object as [other]. + static NSLocale castFrom(T other) { + return NSLocale._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSLocale] that wraps the given raw object pointer. + static NSLocale castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSLocale._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSLocale]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSLocale1); + } + + NSObject objectForKey_(NSString key) { + final _ret = _lib._objc_msgSend_30(_id, _lib._sel_objectForKey_1, key._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSString displayNameForKey_value_(NSString key, NSObject value) { + final _ret = _lib._objc_msgSend_264( + _id, _lib._sel_displayNameForKey_value_1, key._id, value._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSLocale initWithLocaleIdentifier_(NSString? string) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithLocaleIdentifier_1, string?._id ?? ffi.nullptr); + return NSLocale._(_ret, _lib, retain: true, release: true); + } + + NSLocale initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSLocale._(_ret, _lib, retain: true, release: true); + } + + NSString? get localeIdentifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_localeIdentifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForLocaleIdentifier_(NSString? localeIdentifier) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForLocaleIdentifier_1, + localeIdentifier?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get languageCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_languageCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForLanguageCode_(NSString? languageCode) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForLanguageCode_1, + languageCode?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get countryCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_countryCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForCountryCode_(NSString? countryCode) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForCountryCode_1, + countryCode?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get scriptCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_scriptCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForScriptCode_(NSString? scriptCode) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForScriptCode_1, + scriptCode?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get variantCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_variantCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForVariantCode_(NSString? variantCode) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForVariantCode_1, + variantCode?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSCharacterSet? get exemplarCharacterSet { + final _ret = _lib._objc_msgSend_265(_id, _lib._sel_exemplarCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + NSString? get calendarIdentifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_calendarIdentifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForCalendarIdentifier_(NSString? calendarIdentifier) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForCalendarIdentifier_1, + calendarIdentifier?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get collationIdentifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_collationIdentifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForCollationIdentifier_( + NSString? collationIdentifier) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForCollationIdentifier_1, + collationIdentifier?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool get usesMetricSystem { + return _lib._objc_msgSend_12(_id, _lib._sel_usesMetricSystem1); + } + + NSString? get decimalSeparator { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_decimalSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get groupingSeparator { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_groupingSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get currencySymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_currencySymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get currencyCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_currencyCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForCurrencyCode_(NSString? currencyCode) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForCurrencyCode_1, + currencyCode?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get collatorIdentifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_collatorIdentifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForCollatorIdentifier_(NSString? collatorIdentifier) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_localizedStringForCollatorIdentifier_1, + collatorIdentifier?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get quotationBeginDelimiter { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_quotationBeginDelimiter1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get quotationEndDelimiter { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_quotationEndDelimiter1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get alternateQuotationBeginDelimiter { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_alternateQuotationBeginDelimiter1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get alternateQuotationEndDelimiter { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_alternateQuotationEndDelimiter1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + static NSLocale? getAutoupdatingCurrentLocale(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_273( + _lib._class_NSLocale1, _lib._sel_autoupdatingCurrentLocale1); + return _ret.address == 0 + ? null + : NSLocale._(_ret, _lib, retain: true, release: true); + } + + static NSLocale? getCurrentLocale(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_273(_lib._class_NSLocale1, _lib._sel_currentLocale1); + return _ret.address == 0 + ? null + : NSLocale._(_ret, _lib, retain: true, release: true); + } + + static NSLocale? getSystemLocale(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_273(_lib._class_NSLocale1, _lib._sel_systemLocale1); + return _ret.address == 0 + ? null + : NSLocale._(_ret, _lib, retain: true, release: true); + } + + static NSLocale localeWithLocaleIdentifier_( + PedometerBindings _lib, NSString? ident) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSLocale1, + _lib._sel_localeWithLocaleIdentifier_1, ident?._id ?? ffi.nullptr); + return NSLocale._(_ret, _lib, retain: true, release: true); + } + + @override + NSLocale init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSLocale._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getAvailableLocaleIdentifiers(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_availableLocaleIdentifiers1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getISOLanguageCodes(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_ISOLanguageCodes1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getISOCountryCodes(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_ISOCountryCodes1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getISOCurrencyCodes(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_ISOCurrencyCodes1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getCommonISOCurrencyCodes(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_commonISOCurrencyCodes1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getPreferredLanguages(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_preferredLanguages1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary componentsFromLocaleIdentifier_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_138(_lib._class_NSLocale1, + _lib._sel_componentsFromLocaleIdentifier_1, string?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSString localeIdentifierFromComponents_( + PedometerBindings _lib, NSDictionary? dict) { + final _ret = _lib._objc_msgSend_274(_lib._class_NSLocale1, + _lib._sel_localeIdentifierFromComponents_1, dict?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString canonicalLocaleIdentifierFromString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_56( + _lib._class_NSLocale1, + _lib._sel_canonicalLocaleIdentifierFromString_1, + string?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString canonicalLanguageIdentifierFromString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_56( + _lib._class_NSLocale1, + _lib._sel_canonicalLanguageIdentifierFromString_1, + string?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString localeIdentifierFromWindowsLocaleCode_( + PedometerBindings _lib, int lcid) { + final _ret = _lib._objc_msgSend_275(_lib._class_NSLocale1, + _lib._sel_localeIdentifierFromWindowsLocaleCode_1, lcid); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int windowsLocaleCodeFromLocaleIdentifier_( + PedometerBindings _lib, NSString? localeIdentifier) { + return _lib._objc_msgSend_276( + _lib._class_NSLocale1, + _lib._sel_windowsLocaleCodeFromLocaleIdentifier_1, + localeIdentifier?._id ?? ffi.nullptr); + } + + static int characterDirectionForLanguage_( + PedometerBindings _lib, NSString? isoLangCode) { + return _lib._objc_msgSend_277( + _lib._class_NSLocale1, + _lib._sel_characterDirectionForLanguage_1, + isoLangCode?._id ?? ffi.nullptr); + } + + static int lineDirectionForLanguage_( + PedometerBindings _lib, NSString? isoLangCode) { + return _lib._objc_msgSend_277(_lib._class_NSLocale1, + _lib._sel_lineDirectionForLanguage_1, isoLangCode?._id ?? ffi.nullptr); + } + + static NSLocale new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSLocale1, _lib._sel_new1); + return NSLocale._(_ret, _lib, retain: false, release: true); + } + + static NSLocale alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSLocale1, _lib._sel_alloc1); + return NSLocale._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSLocale1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSLocale1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSLocale1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSLocale1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSLocale1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSLocale1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSLocale1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSLocale1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSLocale1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSCharacterSet extends NSObject { + NSCharacterSet._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSCharacterSet] that points to the same underlying object as [other]. + static NSCharacterSet castFrom(T other) { + return NSCharacterSet._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSCharacterSet] that wraps the given raw object pointer. + static NSCharacterSet castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSCharacterSet._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSCharacterSet]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSCharacterSet1); + } + + static NSCharacterSet? getControlCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_controlCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getWhitespaceCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_whitespaceCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getWhitespaceAndNewlineCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265(_lib._class_NSCharacterSet1, + _lib._sel_whitespaceAndNewlineCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getDecimalDigitCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_decimalDigitCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getLetterCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_letterCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getLowercaseLetterCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_lowercaseLetterCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getUppercaseLetterCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_uppercaseLetterCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getNonBaseCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_nonBaseCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getAlphanumericCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_alphanumericCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getDecomposableCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_decomposableCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getIllegalCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_illegalCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getPunctuationCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_punctuationCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getCapitalizedLetterCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_capitalizedLetterCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getSymbolCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_symbolCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getNewlineCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_newlineCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: false, release: true); + } + + static NSCharacterSet characterSetWithRange_( + PedometerBindings _lib, _NSRange aRange) { + final _ret = _lib._objc_msgSend_266( + _lib._class_NSCharacterSet1, _lib._sel_characterSetWithRange_1, aRange); + return NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet characterSetWithCharactersInString_( + PedometerBindings _lib, NSString? aString) { + final _ret = _lib._objc_msgSend_267( + _lib._class_NSCharacterSet1, + _lib._sel_characterSetWithCharactersInString_1, + aString?._id ?? ffi.nullptr); + return NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet characterSetWithBitmapRepresentation_( + PedometerBindings _lib, NSData? data) { + final _ret = _lib._objc_msgSend_268( + _lib._class_NSCharacterSet1, + _lib._sel_characterSetWithBitmapRepresentation_1, + data?._id ?? ffi.nullptr); + return NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet characterSetWithContentsOfFile_( + PedometerBindings _lib, NSString? fName) { + final _ret = _lib._objc_msgSend_267(_lib._class_NSCharacterSet1, + _lib._sel_characterSetWithContentsOfFile_1, fName?._id ?? ffi.nullptr); + return NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + NSCharacterSet initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + bool characterIsMember_(int aCharacter) { + return _lib._objc_msgSend_269( + _id, _lib._sel_characterIsMember_1, aCharacter); + } + + NSData? get bitmapRepresentation { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_bitmapRepresentation1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSCharacterSet? get invertedSet { + final _ret = _lib._objc_msgSend_265(_id, _lib._sel_invertedSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + bool longCharacterIsMember_(int theLongChar) { + return _lib._objc_msgSend_270( + _id, _lib._sel_longCharacterIsMember_1, theLongChar); + } + + bool isSupersetOfSet_(NSCharacterSet? theOtherSet) { + return _lib._objc_msgSend_271( + _id, _lib._sel_isSupersetOfSet_1, theOtherSet?._id ?? ffi.nullptr); + } + + bool hasMemberInPlane_(int thePlane) { + return _lib._objc_msgSend_272(_id, _lib._sel_hasMemberInPlane_1, thePlane); + } + + static NSCharacterSet? getURLUserAllowedCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_URLUserAllowedCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getURLPasswordAllowedCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_URLPasswordAllowedCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getURLHostAllowedCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_URLHostAllowedCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getURLPathAllowedCharacterSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_URLPathAllowedCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getURLQueryAllowedCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_URLQueryAllowedCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet? getURLFragmentAllowedCharacterSet( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_265( + _lib._class_NSCharacterSet1, _lib._sel_URLFragmentAllowedCharacterSet1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + static NSCharacterSet new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSCharacterSet1, _lib._sel_new1); + return NSCharacterSet._(_ret, _lib, retain: false, release: true); + } + + static NSCharacterSet alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSCharacterSet1, _lib._sel_alloc1); + return NSCharacterSet._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSCharacterSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSCharacterSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSCharacterSet1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSCharacterSet1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSCharacterSet1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSCharacterSet1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSCharacterSet1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSCharacterSet1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSCharacterSet1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSLocaleLanguageDirection { + static const int NSLocaleLanguageDirectionUnknown = 0; + static const int NSLocaleLanguageDirectionLeftToRight = 1; + static const int NSLocaleLanguageDirectionRightToLeft = 2; + static const int NSLocaleLanguageDirectionTopToBottom = 3; + static const int NSLocaleLanguageDirectionBottomToTop = 4; +} + +abstract class NSStringEnumerationOptions { + static const int NSStringEnumerationByLines = 0; + static const int NSStringEnumerationByParagraphs = 1; + static const int NSStringEnumerationByComposedCharacterSequences = 2; + static const int NSStringEnumerationByWords = 3; + static const int NSStringEnumerationBySentences = 4; + static const int NSStringEnumerationByCaretPositions = 5; + static const int NSStringEnumerationByDeletionClusters = 6; + static const int NSStringEnumerationReverse = 256; + static const int NSStringEnumerationSubstringNotRequired = 512; + static const int NSStringEnumerationLocalized = 1024; +} + +void _ObjCBlock13_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + _NSRange arg2, ffi.Pointer arg3)>>() + .asFunction< + void Function( + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3)>()(arg0, arg1, arg2, arg3); +} + +final _ObjCBlock13_closureRegistry = {}; +int _ObjCBlock13_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock13_registerClosure(Function fn) { + final id = ++_ObjCBlock13_closureRegistryIndex; + _ObjCBlock13_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock13_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3) { + return _ObjCBlock13_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2, arg3); +} + +class ObjCBlock13 extends _ObjCBlockBase { + ObjCBlock13._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock13.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + _NSRange arg2, ffi.Pointer arg3)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3)>( + _ObjCBlock13_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock13.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, _NSRange arg1, _NSRange arg2, + ffi.Pointer arg3) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3)>( + _ObjCBlock13_closureTrampoline) + .cast(), + _ObjCBlock13_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, _NSRange arg1, _NSRange arg2, + ffi.Pointer arg3) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + _NSRange arg2, + ffi.Pointer arg3)>()(_id, arg0, arg1, arg2, arg3); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock14_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock14_closureRegistry = {}; +int _ObjCBlock14_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock14_registerClosure(Function fn) { + final id = ++_ObjCBlock14_closureRegistryIndex; + _ObjCBlock14_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock14_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock14_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock14 extends _ObjCBlockBase { + ObjCBlock14._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock14.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock14_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock14.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock14_closureTrampoline) + .cast(), + _ObjCBlock14_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSStringEncodingConversionOptions { + static const int NSStringEncodingConversionAllowLossy = 1; + static const int NSStringEncodingConversionExternalRepresentation = 2; +} + +void _ObjCBlock15_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.UnsignedLong arg1)>>() + .asFunction< + void Function( + ffi.Pointer arg0, int arg1)>()(arg0, arg1); +} + +final _ObjCBlock15_closureRegistry = {}; +int _ObjCBlock15_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock15_registerClosure(Function fn) { + final id = ++_ObjCBlock15_closureRegistryIndex; + _ObjCBlock15_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock15_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1) { + return _ObjCBlock15_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock15 extends _ObjCBlockBase { + ObjCBlock15._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock15.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.UnsignedLong arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1)>( + _ObjCBlock15_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock15.fromFunction(PedometerBindings lib, + void Function(ffi.Pointer arg0, int arg1) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1)>( + _ObjCBlock15_closureTrampoline) + .cast(), + _ObjCBlock15_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, int arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.UnsignedLong arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + int arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSLinguisticTaggerOptions { + static const int NSLinguisticTaggerOmitWords = 1; + static const int NSLinguisticTaggerOmitPunctuation = 2; + static const int NSLinguisticTaggerOmitWhitespace = 4; + static const int NSLinguisticTaggerOmitOther = 8; + static const int NSLinguisticTaggerJoinNames = 16; +} + +class NSOrthography extends NSObject { + NSOrthography._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSOrthography] that points to the same underlying object as [other]. + static NSOrthography castFrom(T other) { + return NSOrthography._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSOrthography] that wraps the given raw object pointer. + static NSOrthography castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSOrthography._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSOrthography]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSOrthography1); + } + + NSString? get dominantScript { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_dominantScript1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get languageMap { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_languageMap1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSOrthography initWithDominantScript_languageMap_( + NSString? script, NSDictionary? map) { + final _ret = _lib._objc_msgSend_332( + _id, + _lib._sel_initWithDominantScript_languageMap_1, + script?._id ?? ffi.nullptr, + map?._id ?? ffi.nullptr); + return NSOrthography._(_ret, _lib, retain: true, release: true); + } + + NSOrthography initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSOrthography._(_ret, _lib, retain: true, release: true); + } + + NSArray languagesForScript_(NSString? script) { + final _ret = _lib._objc_msgSend_115( + _id, _lib._sel_languagesForScript_1, script?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString dominantLanguageForScript_(NSString? script) { + final _ret = _lib._objc_msgSend_56( + _id, _lib._sel_dominantLanguageForScript_1, script?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get dominantLanguage { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_dominantLanguage1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray? get allScripts { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_allScripts1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get allLanguages { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_allLanguages1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSOrthography defaultOrthographyForLanguage_( + PedometerBindings _lib, NSString? language) { + final _ret = _lib._objc_msgSend_30( + _lib._class_NSOrthography1, + _lib._sel_defaultOrthographyForLanguage_1, + language?._id ?? ffi.nullptr); + return NSOrthography._(_ret, _lib, retain: true, release: true); + } + + static NSOrthography orthographyWithDominantScript_languageMap_( + PedometerBindings _lib, NSString? script, NSDictionary? map) { + final _ret = _lib._objc_msgSend_332( + _lib._class_NSOrthography1, + _lib._sel_orthographyWithDominantScript_languageMap_1, + script?._id ?? ffi.nullptr, + map?._id ?? ffi.nullptr); + return NSOrthography._(_ret, _lib, retain: true, release: true); + } + + static NSOrthography new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOrthography1, _lib._sel_new1); + return NSOrthography._(_ret, _lib, retain: false, release: true); + } + + static NSOrthography alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOrthography1, _lib._sel_alloc1); + return NSOrthography._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSOrthography1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSOrthography1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOrthography1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOrthography1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSOrthography1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSOrthography1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSOrthography1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSOrthography1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSOrthography1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock16_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock16_closureRegistry = {}; +int _ObjCBlock16_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock16_registerClosure(Function fn) { + final id = ++_ObjCBlock16_closureRegistryIndex; + _ObjCBlock16_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock16_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock16_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock16 extends _ObjCBlockBase { + ObjCBlock16._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock16.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock16_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock16.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock16_closureTrampoline) + .cast(), + _ObjCBlock16_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +bool _ObjCBlock17_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer arg0, ffi.Pointer arg1)>>() + .asFunction< + bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock17_closureRegistry = {}; +int _ObjCBlock17_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock17_registerClosure(Function fn) { + final id = ++_ObjCBlock17_closureRegistryIndex; + _ObjCBlock17_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock17_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock17_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock17 extends _ObjCBlockBase { + ObjCBlock17._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock17.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock17_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock17.fromFunction( + PedometerBindings lib, + bool Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock17_closureTrampoline, false) + .cast(), + _ObjCBlock17_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSFileManager extends NSObject { + NSFileManager._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSFileManager] that points to the same underlying object as [other]. + static NSFileManager castFrom(T other) { + return NSFileManager._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSFileManager] that wraps the given raw object pointer. + static NSFileManager castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSFileManager._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSFileManager]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSFileManager1); + } + + static NSFileManager? getDefaultManager(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_363( + _lib._class_NSFileManager1, _lib._sel_defaultManager1); + return _ret.address == 0 + ? null + : NSFileManager._(_ret, _lib, retain: true, release: true); + } + + NSArray mountedVolumeURLsIncludingResourceValuesForKeys_options_( + NSArray? propertyKeys, int options) { + final _ret = _lib._objc_msgSend_364( + _id, + _lib._sel_mountedVolumeURLsIncludingResourceValuesForKeys_options_1, + propertyKeys?._id ?? ffi.nullptr, + options); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + void unmountVolumeAtURL_options_completionHandler_( + NSURL? url, int mask, ObjCBlock18 completionHandler) { + return _lib._objc_msgSend_365( + _id, + _lib._sel_unmountVolumeAtURL_options_completionHandler_1, + url?._id ?? ffi.nullptr, + mask, + completionHandler._id); + } + + NSArray contentsOfDirectoryAtURL_includingPropertiesForKeys_options_error_( + NSURL? url, + NSArray? keys, + int mask, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_366( + _id, + _lib._sel_contentsOfDirectoryAtURL_includingPropertiesForKeys_options_error_1, + url?._id ?? ffi.nullptr, + keys?._id ?? ffi.nullptr, + mask, + error); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray URLsForDirectory_inDomains_(int directory, int domainMask) { + final _ret = _lib._objc_msgSend_367( + _id, _lib._sel_URLsForDirectory_inDomains_1, directory, domainMask); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSURL URLForDirectory_inDomain_appropriateForURL_create_error_( + int directory, + int domain, + NSURL? url, + bool shouldCreate, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_368( + _id, + _lib._sel_URLForDirectory_inDomain_appropriateForURL_create_error_1, + directory, + domain, + url?._id ?? ffi.nullptr, + shouldCreate, + error); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + bool getRelationship_ofDirectoryAtURL_toItemAtURL_error_( + ffi.Pointer outRelationship, + NSURL? directoryURL, + NSURL? otherURL, + ffi.Pointer> error) { + return _lib._objc_msgSend_369( + _id, + _lib._sel_getRelationship_ofDirectoryAtURL_toItemAtURL_error_1, + outRelationship, + directoryURL?._id ?? ffi.nullptr, + otherURL?._id ?? ffi.nullptr, + error); + } + + bool getRelationship_ofDirectory_inDomain_toItemAtURL_error_( + ffi.Pointer outRelationship, + int directory, + int domainMask, + NSURL? url, + ffi.Pointer> error) { + return _lib._objc_msgSend_370( + _id, + _lib._sel_getRelationship_ofDirectory_inDomain_toItemAtURL_error_1, + outRelationship, + directory, + domainMask, + url?._id ?? ffi.nullptr, + error); + } + + bool createDirectoryAtURL_withIntermediateDirectories_attributes_error_( + NSURL? url, + bool createIntermediates, + NSDictionary? attributes, + ffi.Pointer> error) { + return _lib._objc_msgSend_371( + _id, + _lib._sel_createDirectoryAtURL_withIntermediateDirectories_attributes_error_1, + url?._id ?? ffi.nullptr, + createIntermediates, + attributes?._id ?? ffi.nullptr, + error); + } + + bool createSymbolicLinkAtURL_withDestinationURL_error_( + NSURL? url, NSURL? destURL, ffi.Pointer> error) { + return _lib._objc_msgSend_372( + _id, + _lib._sel_createSymbolicLinkAtURL_withDestinationURL_error_1, + url?._id ?? ffi.nullptr, + destURL?._id ?? ffi.nullptr, + error); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + set delegate(NSObject? value) { + _lib._objc_msgSend_348( + _id, _lib._sel_setDelegate_1, value?._id ?? ffi.nullptr); + } + + bool setAttributes_ofItemAtPath_error_(NSDictionary? attributes, + NSString? path, ffi.Pointer> error) { + return _lib._objc_msgSend_373( + _id, + _lib._sel_setAttributes_ofItemAtPath_error_1, + attributes?._id ?? ffi.nullptr, + path?._id ?? ffi.nullptr, + error); + } + + bool createDirectoryAtPath_withIntermediateDirectories_attributes_error_( + NSString? path, + bool createIntermediates, + NSDictionary? attributes, + ffi.Pointer> error) { + return _lib._objc_msgSend_374( + _id, + _lib._sel_createDirectoryAtPath_withIntermediateDirectories_attributes_error_1, + path?._id ?? ffi.nullptr, + createIntermediates, + attributes?._id ?? ffi.nullptr, + error); + } + + NSArray contentsOfDirectoryAtPath_error_( + NSString? path, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_375( + _id, + _lib._sel_contentsOfDirectoryAtPath_error_1, + path?._id ?? ffi.nullptr, + error); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray subpathsOfDirectoryAtPath_error_( + NSString? path, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_375( + _id, + _lib._sel_subpathsOfDirectoryAtPath_error_1, + path?._id ?? ffi.nullptr, + error); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSDictionary attributesOfItemAtPath_error_( + NSString? path, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_376( + _id, + _lib._sel_attributesOfItemAtPath_error_1, + path?._id ?? ffi.nullptr, + error); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary attributesOfFileSystemForPath_error_( + NSString? path, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_376( + _id, + _lib._sel_attributesOfFileSystemForPath_error_1, + path?._id ?? ffi.nullptr, + error); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + bool createSymbolicLinkAtPath_withDestinationPath_error_(NSString? path, + NSString? destPath, ffi.Pointer> error) { + return _lib._objc_msgSend_377( + _id, + _lib._sel_createSymbolicLinkAtPath_withDestinationPath_error_1, + path?._id ?? ffi.nullptr, + destPath?._id ?? ffi.nullptr, + error); + } + + NSString destinationOfSymbolicLinkAtPath_error_( + NSString? path, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_378( + _id, + _lib._sel_destinationOfSymbolicLinkAtPath_error_1, + path?._id ?? ffi.nullptr, + error); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool copyItemAtPath_toPath_error_(NSString? srcPath, NSString? dstPath, + ffi.Pointer> error) { + return _lib._objc_msgSend_377(_id, _lib._sel_copyItemAtPath_toPath_error_1, + srcPath?._id ?? ffi.nullptr, dstPath?._id ?? ffi.nullptr, error); + } + + bool moveItemAtPath_toPath_error_(NSString? srcPath, NSString? dstPath, + ffi.Pointer> error) { + return _lib._objc_msgSend_377(_id, _lib._sel_moveItemAtPath_toPath_error_1, + srcPath?._id ?? ffi.nullptr, dstPath?._id ?? ffi.nullptr, error); + } + + bool linkItemAtPath_toPath_error_(NSString? srcPath, NSString? dstPath, + ffi.Pointer> error) { + return _lib._objc_msgSend_377(_id, _lib._sel_linkItemAtPath_toPath_error_1, + srcPath?._id ?? ffi.nullptr, dstPath?._id ?? ffi.nullptr, error); + } + + bool removeItemAtPath_error_( + NSString? path, ffi.Pointer> error) { + return _lib._objc_msgSend_379(_id, _lib._sel_removeItemAtPath_error_1, + path?._id ?? ffi.nullptr, error); + } + + bool copyItemAtURL_toURL_error_(NSURL? srcURL, NSURL? dstURL, + ffi.Pointer> error) { + return _lib._objc_msgSend_372(_id, _lib._sel_copyItemAtURL_toURL_error_1, + srcURL?._id ?? ffi.nullptr, dstURL?._id ?? ffi.nullptr, error); + } + + bool moveItemAtURL_toURL_error_(NSURL? srcURL, NSURL? dstURL, + ffi.Pointer> error) { + return _lib._objc_msgSend_372(_id, _lib._sel_moveItemAtURL_toURL_error_1, + srcURL?._id ?? ffi.nullptr, dstURL?._id ?? ffi.nullptr, error); + } + + bool linkItemAtURL_toURL_error_(NSURL? srcURL, NSURL? dstURL, + ffi.Pointer> error) { + return _lib._objc_msgSend_372(_id, _lib._sel_linkItemAtURL_toURL_error_1, + srcURL?._id ?? ffi.nullptr, dstURL?._id ?? ffi.nullptr, error); + } + + bool removeItemAtURL_error_( + NSURL? URL, ffi.Pointer> error) { + return _lib._objc_msgSend_75( + _id, _lib._sel_removeItemAtURL_error_1, URL?._id ?? ffi.nullptr, error); + } + + bool trashItemAtURL_resultingItemURL_error_( + NSURL? url, + ffi.Pointer> outResultingURL, + ffi.Pointer> error) { + return _lib._objc_msgSend_380( + _id, + _lib._sel_trashItemAtURL_resultingItemURL_error_1, + url?._id ?? ffi.nullptr, + outResultingURL, + error); + } + + NSDictionary fileAttributesAtPath_traverseLink_(NSString? path, bool yorn) { + final _ret = _lib._objc_msgSend_381( + _id, + _lib._sel_fileAttributesAtPath_traverseLink_1, + path?._id ?? ffi.nullptr, + yorn); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + bool changeFileAttributes_atPath_(NSDictionary? attributes, NSString? path) { + return _lib._objc_msgSend_382(_id, _lib._sel_changeFileAttributes_atPath_1, + attributes?._id ?? ffi.nullptr, path?._id ?? ffi.nullptr); + } + + NSArray directoryContentsAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_115( + _id, _lib._sel_directoryContentsAtPath_1, path?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSDictionary fileSystemAttributesAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_138( + _id, _lib._sel_fileSystemAttributesAtPath_1, path?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSString pathContentOfSymbolicLinkAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_56(_id, + _lib._sel_pathContentOfSymbolicLinkAtPath_1, path?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool createSymbolicLinkAtPath_pathContent_( + NSString? path, NSString? otherpath) { + return _lib._objc_msgSend_383( + _id, + _lib._sel_createSymbolicLinkAtPath_pathContent_1, + path?._id ?? ffi.nullptr, + otherpath?._id ?? ffi.nullptr); + } + + bool createDirectoryAtPath_attributes_( + NSString? path, NSDictionary? attributes) { + return _lib._objc_msgSend_384( + _id, + _lib._sel_createDirectoryAtPath_attributes_1, + path?._id ?? ffi.nullptr, + attributes?._id ?? ffi.nullptr); + } + + bool linkPath_toPath_handler_( + NSString? src, NSString? dest, NSObject handler) { + return _lib._objc_msgSend_385(_id, _lib._sel_linkPath_toPath_handler_1, + src?._id ?? ffi.nullptr, dest?._id ?? ffi.nullptr, handler._id); + } + + bool copyPath_toPath_handler_( + NSString? src, NSString? dest, NSObject handler) { + return _lib._objc_msgSend_385(_id, _lib._sel_copyPath_toPath_handler_1, + src?._id ?? ffi.nullptr, dest?._id ?? ffi.nullptr, handler._id); + } + + bool movePath_toPath_handler_( + NSString? src, NSString? dest, NSObject handler) { + return _lib._objc_msgSend_385(_id, _lib._sel_movePath_toPath_handler_1, + src?._id ?? ffi.nullptr, dest?._id ?? ffi.nullptr, handler._id); + } + + bool removeFileAtPath_handler_(NSString? path, NSObject handler) { + return _lib._objc_msgSend_386(_id, _lib._sel_removeFileAtPath_handler_1, + path?._id ?? ffi.nullptr, handler._id); + } + + NSString? get currentDirectoryPath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_currentDirectoryPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + bool changeCurrentDirectoryPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_changeCurrentDirectoryPath_1, path?._id ?? ffi.nullptr); + } + + bool fileExistsAtPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_fileExistsAtPath_1, path?._id ?? ffi.nullptr); + } + + bool fileExistsAtPath_isDirectory_( + NSString? path, ffi.Pointer isDirectory) { + return _lib._objc_msgSend_387(_id, _lib._sel_fileExistsAtPath_isDirectory_1, + path?._id ?? ffi.nullptr, isDirectory); + } + + bool isReadableFileAtPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_isReadableFileAtPath_1, path?._id ?? ffi.nullptr); + } + + bool isWritableFileAtPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_isWritableFileAtPath_1, path?._id ?? ffi.nullptr); + } + + bool isExecutableFileAtPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_isExecutableFileAtPath_1, path?._id ?? ffi.nullptr); + } + + bool isDeletableFileAtPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_isDeletableFileAtPath_1, path?._id ?? ffi.nullptr); + } + + bool contentsEqualAtPath_andPath_(NSString? path1, NSString? path2) { + return _lib._objc_msgSend_383(_id, _lib._sel_contentsEqualAtPath_andPath_1, + path1?._id ?? ffi.nullptr, path2?._id ?? ffi.nullptr); + } + + NSString displayNameAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_56( + _id, _lib._sel_displayNameAtPath_1, path?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray componentsToDisplayForPath_(NSString? path) { + final _ret = _lib._objc_msgSend_115( + _id, _lib._sel_componentsToDisplayForPath_1, path?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject enumeratorAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_enumeratorAtPath_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject enumeratorAtURL_includingPropertiesForKeys_options_errorHandler_( + NSURL? url, NSArray? keys, int mask, ObjCBlock19 handler) { + final _ret = _lib._objc_msgSend_388( + _id, + _lib._sel_enumeratorAtURL_includingPropertiesForKeys_options_errorHandler_1, + url?._id ?? ffi.nullptr, + keys?._id ?? ffi.nullptr, + mask, + handler._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSArray subpathsAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_115( + _id, _lib._sel_subpathsAtPath_1, path?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSData contentsAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_389( + _id, _lib._sel_contentsAtPath_1, path?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + bool createFileAtPath_contents_attributes_( + NSString? path, NSData? data, NSDictionary? attr) { + return _lib._objc_msgSend_390( + _id, + _lib._sel_createFileAtPath_contents_attributes_1, + path?._id ?? ffi.nullptr, + data?._id ?? ffi.nullptr, + attr?._id ?? ffi.nullptr); + } + + ffi.Pointer fileSystemRepresentationWithPath_(NSString? path) { + return _lib._objc_msgSend_391(_id, + _lib._sel_fileSystemRepresentationWithPath_1, path?._id ?? ffi.nullptr); + } + + NSString stringWithFileSystemRepresentation_length_( + ffi.Pointer str, int len) { + final _ret = _lib._objc_msgSend_392( + _id, _lib._sel_stringWithFileSystemRepresentation_length_1, str, len); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool + replaceItemAtURL_withItemAtURL_backupItemName_options_resultingItemURL_error_( + NSURL? originalItemURL, + NSURL? newItemURL, + NSString? backupItemName, + int options, + ffi.Pointer> resultingURL, + ffi.Pointer> error) { + return _lib._objc_msgSend_393( + _id, + _lib._sel_replaceItemAtURL_withItemAtURL_backupItemName_options_resultingItemURL_error_1, + originalItemURL?._id ?? ffi.nullptr, + newItemURL?._id ?? ffi.nullptr, + backupItemName?._id ?? ffi.nullptr, + options, + resultingURL, + error); + } + + bool setUbiquitous_itemAtURL_destinationURL_error_(bool flag, NSURL? url, + NSURL? destinationURL, ffi.Pointer> error) { + return _lib._objc_msgSend_394( + _id, + _lib._sel_setUbiquitous_itemAtURL_destinationURL_error_1, + flag, + url?._id ?? ffi.nullptr, + destinationURL?._id ?? ffi.nullptr, + error); + } + + bool isUbiquitousItemAtURL_(NSURL? url) { + return _lib._objc_msgSend_395( + _id, _lib._sel_isUbiquitousItemAtURL_1, url?._id ?? ffi.nullptr); + } + + bool startDownloadingUbiquitousItemAtURL_error_( + NSURL? url, ffi.Pointer> error) { + return _lib._objc_msgSend_75( + _id, + _lib._sel_startDownloadingUbiquitousItemAtURL_error_1, + url?._id ?? ffi.nullptr, + error); + } + + bool evictUbiquitousItemAtURL_error_( + NSURL? url, ffi.Pointer> error) { + return _lib._objc_msgSend_75( + _id, + _lib._sel_evictUbiquitousItemAtURL_error_1, + url?._id ?? ffi.nullptr, + error); + } + + NSURL URLForUbiquityContainerIdentifier_(NSString? containerIdentifier) { + final _ret = _lib._objc_msgSend_34( + _id, + _lib._sel_URLForUbiquityContainerIdentifier_1, + containerIdentifier?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL URLForPublishingUbiquitousItemAtURL_expirationDate_error_( + NSURL? url, + ffi.Pointer> outDate, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_396( + _id, + _lib._sel_URLForPublishingUbiquitousItemAtURL_expirationDate_error_1, + url?._id ?? ffi.nullptr, + outDate, + error); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSObject? get ubiquityIdentityToken { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_ubiquityIdentityToken1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + void getFileProviderServicesForItemAtURL_completionHandler_( + NSURL? url, ObjCBlock20 completionHandler) { + return _lib._objc_msgSend_397( + _id, + _lib._sel_getFileProviderServicesForItemAtURL_completionHandler_1, + url?._id ?? ffi.nullptr, + completionHandler._id); + } + + NSURL containerURLForSecurityApplicationGroupIdentifier_( + NSString? groupIdentifier) { + final _ret = _lib._objc_msgSend_34( + _id, + _lib._sel_containerURLForSecurityApplicationGroupIdentifier_1, + groupIdentifier?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get homeDirectoryForCurrentUser { + final _ret = + _lib._objc_msgSend_40(_id, _lib._sel_homeDirectoryForCurrentUser1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get temporaryDirectory { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_temporaryDirectory1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL homeDirectoryForUser_(NSString? userName) { + final _ret = _lib._objc_msgSend_34( + _id, _lib._sel_homeDirectoryForUser_1, userName?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSFileManager new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFileManager1, _lib._sel_new1); + return NSFileManager._(_ret, _lib, retain: false, release: true); + } + + static NSFileManager alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFileManager1, _lib._sel_alloc1); + return NSFileManager._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSFileManager1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSFileManager1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFileManager1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFileManager1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSFileManager1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSFileManager1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSFileManager1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSFileManager1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSFileManager1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSVolumeEnumerationOptions { + static const int NSVolumeEnumerationSkipHiddenVolumes = 2; + static const int NSVolumeEnumerationProduceFileReferenceURLs = 4; +} + +abstract class NSFileManagerUnmountOptions { + static const int NSFileManagerUnmountAllPartitionsAndEjectDisk = 1; + static const int NSFileManagerUnmountWithoutUI = 2; +} + +void _ObjCBlock18_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock18_closureRegistry = {}; +int _ObjCBlock18_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock18_registerClosure(Function fn) { + final id = ++_ObjCBlock18_closureRegistryIndex; + _ObjCBlock18_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock18_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock18_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock18 extends _ObjCBlockBase { + ObjCBlock18._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock18.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock18_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock18.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock18_closureTrampoline) + .cast(), + _ObjCBlock18_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSDirectoryEnumerationOptions { + static const int NSDirectoryEnumerationSkipsSubdirectoryDescendants = 1; + static const int NSDirectoryEnumerationSkipsPackageDescendants = 2; + static const int NSDirectoryEnumerationSkipsHiddenFiles = 4; + static const int NSDirectoryEnumerationIncludesDirectoriesPostOrder = 8; + static const int NSDirectoryEnumerationProducesRelativePathURLs = 16; +} + +abstract class NSSearchPathDirectory { + static const int NSApplicationDirectory = 1; + static const int NSDemoApplicationDirectory = 2; + static const int NSDeveloperApplicationDirectory = 3; + static const int NSAdminApplicationDirectory = 4; + static const int NSLibraryDirectory = 5; + static const int NSDeveloperDirectory = 6; + static const int NSUserDirectory = 7; + static const int NSDocumentationDirectory = 8; + static const int NSDocumentDirectory = 9; + static const int NSCoreServiceDirectory = 10; + static const int NSAutosavedInformationDirectory = 11; + static const int NSDesktopDirectory = 12; + static const int NSCachesDirectory = 13; + static const int NSApplicationSupportDirectory = 14; + static const int NSDownloadsDirectory = 15; + static const int NSInputMethodsDirectory = 16; + static const int NSMoviesDirectory = 17; + static const int NSMusicDirectory = 18; + static const int NSPicturesDirectory = 19; + static const int NSPrinterDescriptionDirectory = 20; + static const int NSSharedPublicDirectory = 21; + static const int NSPreferencePanesDirectory = 22; + static const int NSApplicationScriptsDirectory = 23; + static const int NSItemReplacementDirectory = 99; + static const int NSAllApplicationsDirectory = 100; + static const int NSAllLibrariesDirectory = 101; + static const int NSTrashDirectory = 102; +} + +abstract class NSSearchPathDomainMask { + static const int NSUserDomainMask = 1; + static const int NSLocalDomainMask = 2; + static const int NSNetworkDomainMask = 4; + static const int NSSystemDomainMask = 8; + static const int NSAllDomainsMask = 65535; +} + +abstract class NSURLRelationship { + static const int NSURLRelationshipContains = 0; + static const int NSURLRelationshipSame = 1; + static const int NSURLRelationshipOther = 2; +} + +bool _ObjCBlock19_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock19_closureRegistry = {}; +int _ObjCBlock19_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock19_registerClosure(Function fn) { + final id = ++_ObjCBlock19_closureRegistryIndex; + _ObjCBlock19_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +bool _ObjCBlock19_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock19_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock19 extends _ObjCBlockBase { + ObjCBlock19._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock19.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib + ._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock19_fnPtrTrampoline, false) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock19.fromFunction( + PedometerBindings lib, + bool Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock19_closureTrampoline, false) + .cast(), + _ObjCBlock19_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + bool call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSFileManagerItemReplacementOptions { + static const int NSFileManagerItemReplacementUsingNewMetadataOnly = 1; + static const int NSFileManagerItemReplacementWithoutDeletingBackupItem = 2; +} + +void _ObjCBlock20_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock20_closureRegistry = {}; +int _ObjCBlock20_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock20_registerClosure(Function fn) { + final id = ++_ObjCBlock20_closureRegistryIndex; + _ObjCBlock20_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock20_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock20_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock20 extends _ObjCBlockBase { + ObjCBlock20._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock20.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock20_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock20.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock20_closureTrampoline) + .cast(), + _ObjCBlock20_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// Mutable Array +class NSMutableArray extends NSArray { + NSMutableArray._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableArray] that points to the same underlying object as [other]. + static NSMutableArray castFrom(T other) { + return NSMutableArray._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSMutableArray] that wraps the given raw object pointer. + static NSMutableArray castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableArray._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableArray]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMutableArray1); + } + + void addObject_(NSObject anObject) { + return _lib._objc_msgSend_15(_id, _lib._sel_addObject_1, anObject._id); + } + + void insertObject_atIndex_(NSObject anObject, int index) { + return _lib._objc_msgSend_400( + _id, _lib._sel_insertObject_atIndex_1, anObject._id, index); + } + + void removeLastObject() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeLastObject1); + } + + void removeObjectAtIndex_(int index) { + return _lib._objc_msgSend_401(_id, _lib._sel_removeObjectAtIndex_1, index); + } + + void replaceObjectAtIndex_withObject_(int index, NSObject anObject) { + return _lib._objc_msgSend_402( + _id, _lib._sel_replaceObjectAtIndex_withObject_1, index, anObject._id); + } + + @override + NSMutableArray init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + NSMutableArray initWithCapacity_(int numItems) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_initWithCapacity_1, numItems); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + @override + NSMutableArray initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + void addObjectsFromArray_(NSArray? otherArray) { + return _lib._objc_msgSend_403( + _id, _lib._sel_addObjectsFromArray_1, otherArray?._id ?? ffi.nullptr); + } + + void exchangeObjectAtIndex_withObjectAtIndex_(int idx1, int idx2) { + return _lib._objc_msgSend_404( + _id, _lib._sel_exchangeObjectAtIndex_withObjectAtIndex_1, idx1, idx2); + } + + void removeAllObjects() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeAllObjects1); + } + + void removeObject_inRange_(NSObject anObject, _NSRange range) { + return _lib._objc_msgSend_405( + _id, _lib._sel_removeObject_inRange_1, anObject._id, range); + } + + void removeObject_(NSObject anObject) { + return _lib._objc_msgSend_15(_id, _lib._sel_removeObject_1, anObject._id); + } + + void removeObjectIdenticalTo_inRange_(NSObject anObject, _NSRange range) { + return _lib._objc_msgSend_405( + _id, _lib._sel_removeObjectIdenticalTo_inRange_1, anObject._id, range); + } + + void removeObjectIdenticalTo_(NSObject anObject) { + return _lib._objc_msgSend_15( + _id, _lib._sel_removeObjectIdenticalTo_1, anObject._id); + } + + void removeObjectsFromIndices_numIndices_( + ffi.Pointer indices, int cnt) { + return _lib._objc_msgSend_406( + _id, _lib._sel_removeObjectsFromIndices_numIndices_1, indices, cnt); + } + + void removeObjectsInArray_(NSArray? otherArray) { + return _lib._objc_msgSend_403( + _id, _lib._sel_removeObjectsInArray_1, otherArray?._id ?? ffi.nullptr); + } + + void removeObjectsInRange_(_NSRange range) { + return _lib._objc_msgSend_407(_id, _lib._sel_removeObjectsInRange_1, range); + } + + void replaceObjectsInRange_withObjectsFromArray_range_( + _NSRange range, NSArray? otherArray, _NSRange otherRange) { + return _lib._objc_msgSend_408( + _id, + _lib._sel_replaceObjectsInRange_withObjectsFromArray_range_1, + range, + otherArray?._id ?? ffi.nullptr, + otherRange); + } + + void replaceObjectsInRange_withObjectsFromArray_( + _NSRange range, NSArray? otherArray) { + return _lib._objc_msgSend_409( + _id, + _lib._sel_replaceObjectsInRange_withObjectsFromArray_1, + range, + otherArray?._id ?? ffi.nullptr); + } + + void setArray_(NSArray? otherArray) { + return _lib._objc_msgSend_403( + _id, _lib._sel_setArray_1, otherArray?._id ?? ffi.nullptr); + } + + void sortUsingFunction_context_( + ffi.Pointer< + ffi.NativeFunction< + ffi.Long Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>> + compare, + ffi.Pointer context) { + return _lib._objc_msgSend_410( + _id, _lib._sel_sortUsingFunction_context_1, compare, context); + } + + void sortUsingSelector_(ffi.Pointer comparator) { + return _lib._objc_msgSend_7(_id, _lib._sel_sortUsingSelector_1, comparator); + } + + void insertObjects_atIndexes_(NSArray? objects, NSIndexSet? indexes) { + return _lib._objc_msgSend_411(_id, _lib._sel_insertObjects_atIndexes_1, + objects?._id ?? ffi.nullptr, indexes?._id ?? ffi.nullptr); + } + + void removeObjectsAtIndexes_(NSIndexSet? indexes) { + return _lib._objc_msgSend_412( + _id, _lib._sel_removeObjectsAtIndexes_1, indexes?._id ?? ffi.nullptr); + } + + void replaceObjectsAtIndexes_withObjects_( + NSIndexSet? indexes, NSArray? objects) { + return _lib._objc_msgSend_413( + _id, + _lib._sel_replaceObjectsAtIndexes_withObjects_1, + indexes?._id ?? ffi.nullptr, + objects?._id ?? ffi.nullptr); + } + + void setObject_atIndexedSubscript_(NSObject obj, int idx) { + return _lib._objc_msgSend_400( + _id, _lib._sel_setObject_atIndexedSubscript_1, obj._id, idx); + } + + void sortUsingComparator_(ObjCBlock6 cmptr) { + return _lib._objc_msgSend_414( + _id, _lib._sel_sortUsingComparator_1, cmptr._id); + } + + void sortWithOptions_usingComparator_(int opts, ObjCBlock6 cmptr) { + return _lib._objc_msgSend_415( + _id, _lib._sel_sortWithOptions_usingComparator_1, opts, cmptr._id); + } + + static NSMutableArray arrayWithCapacity_( + PedometerBindings _lib, int numItems) { + final _ret = _lib._objc_msgSend_52( + _lib._class_NSMutableArray1, _lib._sel_arrayWithCapacity_1, numItems); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray arrayWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_416(_lib._class_NSMutableArray1, + _lib._sel_arrayWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray arrayWithContentsOfURL_( + PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_417(_lib._class_NSMutableArray1, + _lib._sel_arrayWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + NSMutableArray initWithContentsOfFile_(NSString? path) { + final _ret = _lib._objc_msgSend_416( + _id, _lib._sel_initWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + NSMutableArray initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_417( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + void applyDifference_(NSObject? difference) { + return _lib._objc_msgSend_15( + _id, _lib._sel_applyDifference_1, difference?._id ?? ffi.nullptr); + } + + void sortUsingDescriptors_(NSArray? sortDescriptors) { + return _lib._objc_msgSend_403(_id, _lib._sel_sortUsingDescriptors_1, + sortDescriptors?._id ?? ffi.nullptr); + } + + void filterUsingPredicate_(NSPredicate? predicate) { + return _lib._objc_msgSend_418( + _id, _lib._sel_filterUsingPredicate_1, predicate?._id ?? ffi.nullptr); + } + + static NSMutableArray array(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableArray1, _lib._sel_array1); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray arrayWithObject_( + PedometerBindings _lib, NSObject anObject) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSMutableArray1, _lib._sel_arrayWithObject_1, anObject._id); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray arrayWithObjects_count_(PedometerBindings _lib, + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53(_lib._class_NSMutableArray1, + _lib._sel_arrayWithObjects_count_1, objects, cnt); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray arrayWithObjects_( + PedometerBindings _lib, NSObject firstObj) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSMutableArray1, + _lib._sel_arrayWithObjects_1, firstObj._id); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray arrayWithArray_( + PedometerBindings _lib, NSArray? array) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSMutableArray1, + _lib._sel_arrayWithArray_1, array?._id ?? ffi.nullptr); + return NSMutableArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray arrayWithContentsOfURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_111( + _lib._class_NSMutableArray1, + _lib._sel_arrayWithContentsOfURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSMutableArray new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableArray1, _lib._sel_new1); + return NSMutableArray._(_ret, _lib, retain: false, release: true); + } + + static NSMutableArray alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableArray1, _lib._sel_alloc1); + return NSMutableArray._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableArray1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableArray1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMutableArray1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableArray1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableArray1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableArray1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableArray1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSMutableArray1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableArray1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Mutable Ordered Set +class NSMutableOrderedSet extends NSOrderedSet { + NSMutableOrderedSet._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableOrderedSet] that points to the same underlying object as [other]. + static NSMutableOrderedSet castFrom(T other) { + return NSMutableOrderedSet._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMutableOrderedSet] that wraps the given raw object pointer. + static NSMutableOrderedSet castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableOrderedSet._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableOrderedSet]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMutableOrderedSet1); + } + + void insertObject_atIndex_(NSObject object, int idx) { + return _lib._objc_msgSend_400( + _id, _lib._sel_insertObject_atIndex_1, object._id, idx); + } + + void removeObjectAtIndex_(int idx) { + return _lib._objc_msgSend_401(_id, _lib._sel_removeObjectAtIndex_1, idx); + } + + void replaceObjectAtIndex_withObject_(int idx, NSObject object) { + return _lib._objc_msgSend_402( + _id, _lib._sel_replaceObjectAtIndex_withObject_1, idx, object._id); + } + + @override + NSMutableOrderedSet initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + @override + NSMutableOrderedSet init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSMutableOrderedSet initWithCapacity_(int numItems) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_initWithCapacity_1, numItems); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + void addObject_(NSObject object) { + return _lib._objc_msgSend_15(_id, _lib._sel_addObject_1, object._id); + } + + void addObjects_count_( + ffi.Pointer> objects, int count) { + return _lib._objc_msgSend_429( + _id, _lib._sel_addObjects_count_1, objects, count); + } + + void addObjectsFromArray_(NSArray? array) { + return _lib._objc_msgSend_403( + _id, _lib._sel_addObjectsFromArray_1, array?._id ?? ffi.nullptr); + } + + void exchangeObjectAtIndex_withObjectAtIndex_(int idx1, int idx2) { + return _lib._objc_msgSend_404( + _id, _lib._sel_exchangeObjectAtIndex_withObjectAtIndex_1, idx1, idx2); + } + + void moveObjectsAtIndexes_toIndex_(NSIndexSet? indexes, int idx) { + return _lib._objc_msgSend_430(_id, _lib._sel_moveObjectsAtIndexes_toIndex_1, + indexes?._id ?? ffi.nullptr, idx); + } + + void insertObjects_atIndexes_(NSArray? objects, NSIndexSet? indexes) { + return _lib._objc_msgSend_411(_id, _lib._sel_insertObjects_atIndexes_1, + objects?._id ?? ffi.nullptr, indexes?._id ?? ffi.nullptr); + } + + void setObject_atIndex_(NSObject obj, int idx) { + return _lib._objc_msgSend_400( + _id, _lib._sel_setObject_atIndex_1, obj._id, idx); + } + + void setObject_atIndexedSubscript_(NSObject obj, int idx) { + return _lib._objc_msgSend_400( + _id, _lib._sel_setObject_atIndexedSubscript_1, obj._id, idx); + } + + void replaceObjectsInRange_withObjects_count_( + _NSRange range, ffi.Pointer> objects, int count) { + return _lib._objc_msgSend_431( + _id, + _lib._sel_replaceObjectsInRange_withObjects_count_1, + range, + objects, + count); + } + + void replaceObjectsAtIndexes_withObjects_( + NSIndexSet? indexes, NSArray? objects) { + return _lib._objc_msgSend_413( + _id, + _lib._sel_replaceObjectsAtIndexes_withObjects_1, + indexes?._id ?? ffi.nullptr, + objects?._id ?? ffi.nullptr); + } + + void removeObjectsInRange_(_NSRange range) { + return _lib._objc_msgSend_407(_id, _lib._sel_removeObjectsInRange_1, range); + } + + void removeObjectsAtIndexes_(NSIndexSet? indexes) { + return _lib._objc_msgSend_412( + _id, _lib._sel_removeObjectsAtIndexes_1, indexes?._id ?? ffi.nullptr); + } + + void removeAllObjects() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeAllObjects1); + } + + void removeObject_(NSObject object) { + return _lib._objc_msgSend_15(_id, _lib._sel_removeObject_1, object._id); + } + + void removeObjectsInArray_(NSArray? array) { + return _lib._objc_msgSend_403( + _id, _lib._sel_removeObjectsInArray_1, array?._id ?? ffi.nullptr); + } + + void intersectOrderedSet_(NSOrderedSet? other) { + return _lib._objc_msgSend_432( + _id, _lib._sel_intersectOrderedSet_1, other?._id ?? ffi.nullptr); + } + + void minusOrderedSet_(NSOrderedSet? other) { + return _lib._objc_msgSend_432( + _id, _lib._sel_minusOrderedSet_1, other?._id ?? ffi.nullptr); + } + + void unionOrderedSet_(NSOrderedSet? other) { + return _lib._objc_msgSend_432( + _id, _lib._sel_unionOrderedSet_1, other?._id ?? ffi.nullptr); + } + + void intersectSet_(NSSet? other) { + return _lib._objc_msgSend_433( + _id, _lib._sel_intersectSet_1, other?._id ?? ffi.nullptr); + } + + void minusSet_(NSSet? other) { + return _lib._objc_msgSend_433( + _id, _lib._sel_minusSet_1, other?._id ?? ffi.nullptr); + } + + void unionSet_(NSSet? other) { + return _lib._objc_msgSend_433( + _id, _lib._sel_unionSet_1, other?._id ?? ffi.nullptr); + } + + void sortUsingComparator_(ObjCBlock6 cmptr) { + return _lib._objc_msgSend_414( + _id, _lib._sel_sortUsingComparator_1, cmptr._id); + } + + void sortWithOptions_usingComparator_(int opts, ObjCBlock6 cmptr) { + return _lib._objc_msgSend_415( + _id, _lib._sel_sortWithOptions_usingComparator_1, opts, cmptr._id); + } + + void sortRange_options_usingComparator_( + _NSRange range, int opts, ObjCBlock6 cmptr) { + return _lib._objc_msgSend_434(_id, + _lib._sel_sortRange_options_usingComparator_1, range, opts, cmptr._id); + } + + static NSMutableOrderedSet orderedSetWithCapacity_( + PedometerBindings _lib, int numItems) { + final _ret = _lib._objc_msgSend_52(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithCapacity_1, numItems); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + void applyDifference_(NSObject? difference) { + return _lib._objc_msgSend_15( + _id, _lib._sel_applyDifference_1, difference?._id ?? ffi.nullptr); + } + + void sortUsingDescriptors_(NSArray? sortDescriptors) { + return _lib._objc_msgSend_403(_id, _lib._sel_sortUsingDescriptors_1, + sortDescriptors?._id ?? ffi.nullptr); + } + + void filterUsingPredicate_(NSPredicate? p) { + return _lib._objc_msgSend_418( + _id, _lib._sel_filterUsingPredicate_1, p?._id ?? ffi.nullptr); + } + + static NSMutableOrderedSet orderedSet(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableOrderedSet1, _lib._sel_orderedSet1); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithObject_( + PedometerBindings _lib, NSObject object) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithObject_1, object._id); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithObjects_count_( + PedometerBindings _lib, + ffi.Pointer> objects, + int cnt) { + final _ret = _lib._objc_msgSend_53(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithObjects_count_1, objects, cnt); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithObjects_( + PedometerBindings _lib, NSObject firstObj) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithObjects_1, firstObj._id); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithOrderedSet_( + PedometerBindings _lib, NSOrderedSet? set) { + final _ret = _lib._objc_msgSend_421(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithOrderedSet_1, set?._id ?? ffi.nullptr); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithOrderedSet_range_copyItems_( + PedometerBindings _lib, NSOrderedSet? set, _NSRange range, bool flag) { + final _ret = _lib._objc_msgSend_422( + _lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithOrderedSet_range_copyItems_1, + set?._id ?? ffi.nullptr, + range, + flag); + return NSMutableOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSMutableOrderedSet orderedSetWithArray_( + PedometerBindings _lib, NSArray? array) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithArray_1, array?._id ?? ffi.nullptr); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithArray_range_copyItems_( + PedometerBindings _lib, NSArray? array, _NSRange range, bool flag) { + final _ret = _lib._objc_msgSend_423( + _lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithArray_range_copyItems_1, + array?._id ?? ffi.nullptr, + range, + flag); + return NSMutableOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSMutableOrderedSet orderedSetWithSet_( + PedometerBindings _lib, NSSet? set) { + final _ret = _lib._objc_msgSend_343(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithSet_1, set?._id ?? ffi.nullptr); + return NSMutableOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableOrderedSet orderedSetWithSet_copyItems_( + PedometerBindings _lib, NSSet? set, bool flag) { + final _ret = _lib._objc_msgSend_344(_lib._class_NSMutableOrderedSet1, + _lib._sel_orderedSetWithSet_copyItems_1, set?._id ?? ffi.nullptr, flag); + return NSMutableOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSMutableOrderedSet new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableOrderedSet1, _lib._sel_new1); + return NSMutableOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSMutableOrderedSet alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableOrderedSet1, _lib._sel_alloc1); + return NSMutableOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableOrderedSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableOrderedSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMutableOrderedSet1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableOrderedSet1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableOrderedSet1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableOrderedSet1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableOrderedSet1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMutableOrderedSet1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableOrderedSet1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Immutable Ordered Set +class NSOrderedSet extends NSObject { + NSOrderedSet._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSOrderedSet] that points to the same underlying object as [other]. + static NSOrderedSet castFrom(T other) { + return NSOrderedSet._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSOrderedSet] that wraps the given raw object pointer. + static NSOrderedSet castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSOrderedSet._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSOrderedSet]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSOrderedSet1); + } + + int get count { + return _lib._objc_msgSend_10(_id, _lib._sel_count1); + } + + NSObject objectAtIndex_(int idx) { + final _ret = _lib._objc_msgSend_52(_id, _lib._sel_objectAtIndex_1, idx); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + int indexOfObject_(NSObject object) { + return _lib._objc_msgSend_61(_id, _lib._sel_indexOfObject_1, object._id); + } + + @override + NSOrderedSet init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithObjects_count_( + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53( + _id, _lib._sel_initWithObjects_count_1, objects, cnt); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + void getObjects_range_( + ffi.Pointer> objects, _NSRange range) { + return _lib._objc_msgSend_60( + _id, _lib._sel_getObjects_range_1, objects, range); + } + + NSArray objectsAtIndexes_(NSIndexSet? indexes) { + final _ret = _lib._objc_msgSend_97( + _id, _lib._sel_objectsAtIndexes_1, indexes?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSObject get firstObject { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_firstObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject get lastObject { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_lastObject1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool isEqualToOrderedSet_(NSOrderedSet? other) { + return _lib._objc_msgSend_419( + _id, _lib._sel_isEqualToOrderedSet_1, other?._id ?? ffi.nullptr); + } + + bool containsObject_(NSObject object) { + return _lib._objc_msgSend_0(_id, _lib._sel_containsObject_1, object._id); + } + + bool intersectsOrderedSet_(NSOrderedSet? other) { + return _lib._objc_msgSend_419( + _id, _lib._sel_intersectsOrderedSet_1, other?._id ?? ffi.nullptr); + } + + bool intersectsSet_(NSSet? set) { + return _lib._objc_msgSend_335( + _id, _lib._sel_intersectsSet_1, set?._id ?? ffi.nullptr); + } + + bool isSubsetOfOrderedSet_(NSOrderedSet? other) { + return _lib._objc_msgSend_419( + _id, _lib._sel_isSubsetOfOrderedSet_1, other?._id ?? ffi.nullptr); + } + + bool isSubsetOfSet_(NSSet? set) { + return _lib._objc_msgSend_335( + _id, _lib._sel_isSubsetOfSet_1, set?._id ?? ffi.nullptr); + } + + NSObject objectAtIndexedSubscript_(int idx) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_objectAtIndexedSubscript_1, idx); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSEnumerator objectEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_objectEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + NSEnumerator reverseObjectEnumerator() { + final _ret = _lib._objc_msgSend_64(_id, _lib._sel_reverseObjectEnumerator1); + return NSEnumerator._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet? get reversedOrderedSet { + final _ret = _lib._objc_msgSend_420(_id, _lib._sel_reversedOrderedSet1); + return _ret.address == 0 + ? null + : NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSArray? get array { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_array1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSSet? get set1 { + final _ret = _lib._objc_msgSend_249(_id, _lib._sel_set1); + return _ret.address == 0 + ? null + : NSSet._(_ret, _lib, retain: true, release: true); + } + + void enumerateObjectsUsingBlock_(ObjCBlock4 block) { + return _lib._objc_msgSend_98( + _id, _lib._sel_enumerateObjectsUsingBlock_1, block._id); + } + + void enumerateObjectsWithOptions_usingBlock_(int opts, ObjCBlock4 block) { + return _lib._objc_msgSend_99(_id, + _lib._sel_enumerateObjectsWithOptions_usingBlock_1, opts, block._id); + } + + void enumerateObjectsAtIndexes_options_usingBlock_( + NSIndexSet? s, int opts, ObjCBlock4 block) { + return _lib._objc_msgSend_100( + _id, + _lib._sel_enumerateObjectsAtIndexes_options_usingBlock_1, + s?._id ?? ffi.nullptr, + opts, + block._id); + } + + int indexOfObjectPassingTest_(ObjCBlock5 predicate) { + return _lib._objc_msgSend_101( + _id, _lib._sel_indexOfObjectPassingTest_1, predicate._id); + } + + int indexOfObjectWithOptions_passingTest_(int opts, ObjCBlock5 predicate) { + return _lib._objc_msgSend_102(_id, + _lib._sel_indexOfObjectWithOptions_passingTest_1, opts, predicate._id); + } + + int indexOfObjectAtIndexes_options_passingTest_( + NSIndexSet? s, int opts, ObjCBlock5 predicate) { + return _lib._objc_msgSend_103( + _id, + _lib._sel_indexOfObjectAtIndexes_options_passingTest_1, + s?._id ?? ffi.nullptr, + opts, + predicate._id); + } + + NSIndexSet indexesOfObjectsPassingTest_(ObjCBlock5 predicate) { + final _ret = _lib._objc_msgSend_104( + _id, _lib._sel_indexesOfObjectsPassingTest_1, predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet indexesOfObjectsWithOptions_passingTest_( + int opts, ObjCBlock5 predicate) { + final _ret = _lib._objc_msgSend_105( + _id, + _lib._sel_indexesOfObjectsWithOptions_passingTest_1, + opts, + predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + NSIndexSet indexesOfObjectsAtIndexes_options_passingTest_( + NSIndexSet? s, int opts, ObjCBlock5 predicate) { + final _ret = _lib._objc_msgSend_106( + _id, + _lib._sel_indexesOfObjectsAtIndexes_options_passingTest_1, + s?._id ?? ffi.nullptr, + opts, + predicate._id); + return NSIndexSet._(_ret, _lib, retain: true, release: true); + } + + int indexOfObject_inSortedRange_options_usingComparator_( + NSObject object, _NSRange range, int opts, ObjCBlock6 cmp) { + return _lib._objc_msgSend_109( + _id, + _lib._sel_indexOfObject_inSortedRange_options_usingComparator_1, + object._id, + range, + opts, + cmp._id); + } + + NSArray sortedArrayUsingComparator_(ObjCBlock6 cmptr) { + final _ret = _lib._objc_msgSend_107( + _id, _lib._sel_sortedArrayUsingComparator_1, cmptr._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray sortedArrayWithOptions_usingComparator_(int opts, ObjCBlock6 cmptr) { + final _ret = _lib._objc_msgSend_108(_id, + _lib._sel_sortedArrayWithOptions_usingComparator_1, opts, cmptr._id); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_(NSObject locale) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_descriptionWithLocale_1, locale._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString descriptionWithLocale_indent_(NSObject locale, int level) { + final _ret = _lib._objc_msgSend_58( + _id, _lib._sel_descriptionWithLocale_indent_1, locale._id, level); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSet(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOrderedSet1, _lib._sel_orderedSet1); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithObject_( + PedometerBindings _lib, NSObject object) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithObject_1, object._id); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithObjects_count_(PedometerBindings _lib, + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithObjects_count_1, objects, cnt); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithObjects_( + PedometerBindings _lib, NSObject firstObj) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithObjects_1, firstObj._id); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithOrderedSet_( + PedometerBindings _lib, NSOrderedSet? set) { + final _ret = _lib._objc_msgSend_421(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithOrderedSet_1, set?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithOrderedSet_range_copyItems_( + PedometerBindings _lib, NSOrderedSet? set, _NSRange range, bool flag) { + final _ret = _lib._objc_msgSend_422( + _lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithOrderedSet_range_copyItems_1, + set?._id ?? ffi.nullptr, + range, + flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSOrderedSet orderedSetWithArray_( + PedometerBindings _lib, NSArray? array) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithArray_1, array?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithArray_range_copyItems_( + PedometerBindings _lib, NSArray? array, _NSRange range, bool flag) { + final _ret = _lib._objc_msgSend_423( + _lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithArray_range_copyItems_1, + array?._id ?? ffi.nullptr, + range, + flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSOrderedSet orderedSetWithSet_(PedometerBindings _lib, NSSet? set) { + final _ret = _lib._objc_msgSend_343(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithSet_1, set?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet orderedSetWithSet_copyItems_( + PedometerBindings _lib, NSSet? set, bool flag) { + final _ret = _lib._objc_msgSend_344(_lib._class_NSOrderedSet1, + _lib._sel_orderedSetWithSet_copyItems_1, set?._id ?? ffi.nullptr, flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + NSOrderedSet initWithObject_(NSObject object) { + final _ret = + _lib._objc_msgSend_16(_id, _lib._sel_initWithObject_1, object._id); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithObjects_(NSObject firstObj) { + final _ret = + _lib._objc_msgSend_16(_id, _lib._sel_initWithObjects_1, firstObj._id); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithOrderedSet_(NSOrderedSet? set) { + final _ret = _lib._objc_msgSend_421( + _id, _lib._sel_initWithOrderedSet_1, set?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithOrderedSet_copyItems_(NSOrderedSet? set, bool flag) { + final _ret = _lib._objc_msgSend_424( + _id, + _lib._sel_initWithOrderedSet_copyItems_1, + set?._id ?? ffi.nullptr, + flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + NSOrderedSet initWithOrderedSet_range_copyItems_( + NSOrderedSet? set, _NSRange range, bool flag) { + final _ret = _lib._objc_msgSend_422( + _id, + _lib._sel_initWithOrderedSet_range_copyItems_1, + set?._id ?? ffi.nullptr, + range, + flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + NSOrderedSet initWithArray_(NSArray? array) { + final _ret = _lib._objc_msgSend_59( + _id, _lib._sel_initWithArray_1, array?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithArray_copyItems_(NSArray? set, bool flag) { + final _ret = _lib._objc_msgSend_110(_id, + _lib._sel_initWithArray_copyItems_1, set?._id ?? ffi.nullptr, flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + NSOrderedSet initWithArray_range_copyItems_( + NSArray? set, _NSRange range, bool flag) { + final _ret = _lib._objc_msgSend_423( + _id, + _lib._sel_initWithArray_range_copyItems_1, + set?._id ?? ffi.nullptr, + range, + flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + NSOrderedSet initWithSet_(NSSet? set) { + final _ret = _lib._objc_msgSend_343( + _id, _lib._sel_initWithSet_1, set?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet initWithSet_copyItems_(NSSet? set, bool flag) { + final _ret = _lib._objc_msgSend_344( + _id, _lib._sel_initWithSet_copyItems_1, set?._id ?? ffi.nullptr, flag); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + NSObject differenceFromOrderedSet_withOptions_usingEquivalenceTest_( + NSOrderedSet? other, int options, ObjCBlock7 block) { + final _ret = _lib._objc_msgSend_425( + _id, + _lib._sel_differenceFromOrderedSet_withOptions_usingEquivalenceTest_1, + other?._id ?? ffi.nullptr, + options, + block._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject differenceFromOrderedSet_withOptions_( + NSOrderedSet? other, int options) { + final _ret = _lib._objc_msgSend_426( + _id, + _lib._sel_differenceFromOrderedSet_withOptions_1, + other?._id ?? ffi.nullptr, + options); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject differenceFromOrderedSet_(NSOrderedSet? other) { + final _ret = _lib._objc_msgSend_421( + _id, _lib._sel_differenceFromOrderedSet_1, other?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet orderedSetByApplyingDifference_(NSObject? difference) { + final _ret = _lib._objc_msgSend_427( + _id, + _lib._sel_orderedSetByApplyingDifference_1, + difference?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + @override + NSObject valueForKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_valueForKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + @override + void setValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setValue_forKey_1, value._id, key?._id ?? ffi.nullptr); + } + + @override + void addObserver_forKeyPath_options_context_(NSObject? observer, + NSString? keyPath, int options, ffi.Pointer context) { + return _lib._objc_msgSend_122( + _id, + _lib._sel_addObserver_forKeyPath_options_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + options, + context); + } + + @override + void removeObserver_forKeyPath_context_( + NSObject? observer, NSString? keyPath, ffi.Pointer context) { + return _lib._objc_msgSend_123( + _id, + _lib._sel_removeObserver_forKeyPath_context_1, + observer?._id ?? ffi.nullptr, + keyPath?._id ?? ffi.nullptr, + context); + } + + @override + void removeObserver_forKeyPath_(NSObject? observer, NSString? keyPath) { + return _lib._objc_msgSend_124(_id, _lib._sel_removeObserver_forKeyPath_1, + observer?._id ?? ffi.nullptr, keyPath?._id ?? ffi.nullptr); + } + + NSArray sortedArrayUsingDescriptors_(NSArray? sortDescriptors) { + final _ret = _lib._objc_msgSend_55( + _id, + _lib._sel_sortedArrayUsingDescriptors_1, + sortDescriptors?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSOrderedSet filteredOrderedSetUsingPredicate_(NSPredicate? p) { + final _ret = _lib._objc_msgSend_428(_id, + _lib._sel_filteredOrderedSetUsingPredicate_1, p?._id ?? ffi.nullptr); + return NSOrderedSet._(_ret, _lib, retain: true, release: true); + } + + static NSOrderedSet new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOrderedSet1, _lib._sel_new1); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static NSOrderedSet alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOrderedSet1, _lib._sel_alloc1); + return NSOrderedSet._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSOrderedSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSOrderedSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOrderedSet1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOrderedSet1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSOrderedSet1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSOrderedSet1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSOrderedSet1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSOrderedSet1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSOrderedSet1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Mutable Set +class NSMutableSet extends NSSet { + NSMutableSet._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableSet] that points to the same underlying object as [other]. + static NSMutableSet castFrom(T other) { + return NSMutableSet._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSMutableSet] that wraps the given raw object pointer. + static NSMutableSet castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableSet._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableSet]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSMutableSet1); + } + + void addObject_(NSObject object) { + return _lib._objc_msgSend_15(_id, _lib._sel_addObject_1, object._id); + } + + void removeObject_(NSObject object) { + return _lib._objc_msgSend_15(_id, _lib._sel_removeObject_1, object._id); + } + + @override + NSMutableSet initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + @override + NSMutableSet init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + NSMutableSet initWithCapacity_(int numItems) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_initWithCapacity_1, numItems); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + void addObjectsFromArray_(NSArray? array) { + return _lib._objc_msgSend_403( + _id, _lib._sel_addObjectsFromArray_1, array?._id ?? ffi.nullptr); + } + + void intersectSet_(NSSet? otherSet) { + return _lib._objc_msgSend_433( + _id, _lib._sel_intersectSet_1, otherSet?._id ?? ffi.nullptr); + } + + void minusSet_(NSSet? otherSet) { + return _lib._objc_msgSend_433( + _id, _lib._sel_minusSet_1, otherSet?._id ?? ffi.nullptr); + } + + void removeAllObjects() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeAllObjects1); + } + + void unionSet_(NSSet? otherSet) { + return _lib._objc_msgSend_433( + _id, _lib._sel_unionSet_1, otherSet?._id ?? ffi.nullptr); + } + + void setSet_(NSSet? otherSet) { + return _lib._objc_msgSend_433( + _id, _lib._sel_setSet_1, otherSet?._id ?? ffi.nullptr); + } + + static NSMutableSet setWithCapacity_(PedometerBindings _lib, int numItems) { + final _ret = _lib._objc_msgSend_52( + _lib._class_NSMutableSet1, _lib._sel_setWithCapacity_1, numItems); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + void filterUsingPredicate_(NSPredicate? predicate) { + return _lib._objc_msgSend_418( + _id, _lib._sel_filterUsingPredicate_1, predicate?._id ?? ffi.nullptr); + } + + static NSMutableSet set1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableSet1, _lib._sel_set1); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableSet setWithObject_(PedometerBindings _lib, NSObject object) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSMutableSet1, _lib._sel_setWithObject_1, object._id); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableSet setWithObjects_count_(PedometerBindings _lib, + ffi.Pointer> objects, int cnt) { + final _ret = _lib._objc_msgSend_53(_lib._class_NSMutableSet1, + _lib._sel_setWithObjects_count_1, objects, cnt); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableSet setWithObjects_( + PedometerBindings _lib, NSObject firstObj) { + final _ret = _lib._objc_msgSend_16( + _lib._class_NSMutableSet1, _lib._sel_setWithObjects_1, firstObj._id); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableSet setWithSet_(PedometerBindings _lib, NSSet? set) { + final _ret = _lib._objc_msgSend_343(_lib._class_NSMutableSet1, + _lib._sel_setWithSet_1, set?._id ?? ffi.nullptr); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableSet setWithArray_(PedometerBindings _lib, NSArray? array) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSMutableSet1, + _lib._sel_setWithArray_1, array?._id ?? ffi.nullptr); + return NSMutableSet._(_ret, _lib, retain: true, release: true); + } + + static NSMutableSet new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableSet1, _lib._sel_new1); + return NSMutableSet._(_ret, _lib, retain: false, release: true); + } + + static NSMutableSet alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableSet1, _lib._sel_alloc1); + return NSMutableSet._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableSet1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableSet1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableSet1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableSet1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableSet1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableSet1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSMutableSet1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableSet1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSKeyValueChange { + static const int NSKeyValueChangeSetting = 1; + static const int NSKeyValueChangeInsertion = 2; + static const int NSKeyValueChangeRemoval = 3; + static const int NSKeyValueChangeReplacement = 4; +} + +abstract class NSKeyValueSetMutationKind { + static const int NSKeyValueUnionSetMutation = 1; + static const int NSKeyValueMinusSetMutation = 2; + static const int NSKeyValueIntersectSetMutation = 3; + static const int NSKeyValueSetSetMutation = 4; +} + +class NSKeyedArchiver extends NSCoder { + NSKeyedArchiver._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSKeyedArchiver] that points to the same underlying object as [other]. + static NSKeyedArchiver castFrom(T other) { + return NSKeyedArchiver._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSKeyedArchiver] that wraps the given raw object pointer. + static NSKeyedArchiver castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSKeyedArchiver._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSKeyedArchiver]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSKeyedArchiver1); + } + + /// Initializes the receiver for encoding an archive, optionally disabling secure coding. + /// + /// If \c NSSecureCoding cannot be used, \c requiresSecureCoding may be turned off here; for improved security, however, \c requiresSecureCoding should be left enabled whenever possible. \c requiresSecureCoding ensures that all encoded objects conform to \c NSSecureCoding, preventing the possibility of encoding objects which cannot be decoded later. + /// + /// To produce archives whose structure matches those previously encoded using \c +archivedDataWithRootObject, encode the top-level object in your archive for the \c NSKeyedArchiveRootObjectKey. + NSKeyedArchiver initRequiringSecureCoding_(bool requiresSecureCoding) { + final _ret = _lib._objc_msgSend_200( + _id, _lib._sel_initRequiringSecureCoding_1, requiresSecureCoding); + return NSKeyedArchiver._(_ret, _lib, retain: true, release: true); + } + + /// Returns an \c NSData object containing the encoded form of the object graph whose root object is given, optionally disabling secure coding. + /// + /// If \c NSSecureCoding cannot be used, \c requiresSecureCoding may be turned off here; for improved security, however, \c requiresSecureCoding should be left enabled whenever possible. \c requiresSecureCoding ensures that all encoded objects conform to \c NSSecureCoding, preventing the possibility of encoding objects which cannot be decoded later. + /// + /// If the object graph cannot be encoded, returns \c nil and sets the \c error out parameter. + static NSData archivedDataWithRootObject_requiringSecureCoding_error_( + PedometerBindings _lib, + NSObject object, + bool requiresSecureCoding, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_443( + _lib._class_NSKeyedArchiver1, + _lib._sel_archivedDataWithRootObject_requiringSecureCoding_error_1, + object._id, + requiresSecureCoding, + error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + /// Initialize the archiver with empty data, ready for writing. + NSKeyedArchiver init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSKeyedArchiver._(_ret, _lib, retain: true, release: true); + } + + NSKeyedArchiver initForWritingWithMutableData_(NSMutableData? data) { + final _ret = _lib._objc_msgSend_448(_id, + _lib._sel_initForWritingWithMutableData_1, data?._id ?? ffi.nullptr); + return NSKeyedArchiver._(_ret, _lib, retain: true, release: true); + } + + static NSData archivedDataWithRootObject_( + PedometerBindings _lib, NSObject rootObject) { + final _ret = _lib._objc_msgSend_449(_lib._class_NSKeyedArchiver1, + _lib._sel_archivedDataWithRootObject_1, rootObject._id); + return NSData._(_ret, _lib, retain: true, release: true); + } + + static bool archiveRootObject_toFile_( + PedometerBindings _lib, NSObject rootObject, NSString? path) { + return _lib._objc_msgSend_199( + _lib._class_NSKeyedArchiver1, + _lib._sel_archiveRootObject_toFile_1, + rootObject._id, + path?._id ?? ffi.nullptr); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + set delegate(NSObject? value) { + _lib._objc_msgSend_348( + _id, _lib._sel_setDelegate_1, value?._id ?? ffi.nullptr); + } + + int get outputFormat { + return _lib._objc_msgSend_450(_id, _lib._sel_outputFormat1); + } + + set outputFormat(int value) { + _lib._objc_msgSend_451(_id, _lib._sel_setOutputFormat_1, value); + } + + /// If encoding has not yet finished, then invoking this property will call finishEncoding and return the data. If you initialized the keyed archiver with a specific mutable data instance, then it will be returned from this property after finishEncoding is called. + NSData? get encodedData { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_encodedData1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + void finishEncoding() { + return _lib._objc_msgSend_1(_id, _lib._sel_finishEncoding1); + } + + static void setClassName_forClass_( + PedometerBindings _lib, NSString? codedName, NSObject cls) { + return _lib._objc_msgSend_452( + _lib._class_NSKeyedArchiver1, + _lib._sel_setClassName_forClass_1, + codedName?._id ?? ffi.nullptr, + cls._id); + } + + static NSString classNameForClass_(PedometerBindings _lib, NSObject cls) { + final _ret = _lib._objc_msgSend_57( + _lib._class_NSKeyedArchiver1, _lib._sel_classNameForClass_1, cls._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + @override + void encodeObject_forKey_(NSObject object, NSString? key) { + return _lib._objc_msgSend_118(_id, _lib._sel_encodeObject_forKey_1, + object._id, key?._id ?? ffi.nullptr); + } + + @override + void encodeConditionalObject_forKey_(NSObject object, NSString? key) { + return _lib._objc_msgSend_118( + _id, + _lib._sel_encodeConditionalObject_forKey_1, + object._id, + key?._id ?? ffi.nullptr); + } + + @override + void encodeBool_forKey_(bool value, NSString? key) { + return _lib._objc_msgSend_226( + _id, _lib._sel_encodeBool_forKey_1, value, key?._id ?? ffi.nullptr); + } + + @override + void encodeInt_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_227( + _id, _lib._sel_encodeInt_forKey_1, value, key?._id ?? ffi.nullptr); + } + + @override + void encodeInt32_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_228( + _id, _lib._sel_encodeInt32_forKey_1, value, key?._id ?? ffi.nullptr); + } + + @override + void encodeInt64_forKey_(int value, NSString? key) { + return _lib._objc_msgSend_229( + _id, _lib._sel_encodeInt64_forKey_1, value, key?._id ?? ffi.nullptr); + } + + @override + void encodeFloat_forKey_(double value, NSString? key) { + return _lib._objc_msgSend_230( + _id, _lib._sel_encodeFloat_forKey_1, value, key?._id ?? ffi.nullptr); + } + + @override + void encodeDouble_forKey_(double value, NSString? key) { + return _lib._objc_msgSend_231( + _id, _lib._sel_encodeDouble_forKey_1, value, key?._id ?? ffi.nullptr); + } + + @override + void encodeBytes_length_forKey_( + ffi.Pointer bytes, int length, NSString? key) { + return _lib._objc_msgSend_232(_id, _lib._sel_encodeBytes_length_forKey_1, + bytes, length, key?._id ?? ffi.nullptr); + } + + @override + bool get requiresSecureCoding { + return _lib._objc_msgSend_12(_id, _lib._sel_requiresSecureCoding1); + } + + set requiresSecureCoding(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setRequiresSecureCoding_1, value); + } + + static NSKeyedArchiver new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSKeyedArchiver1, _lib._sel_new1); + return NSKeyedArchiver._(_ret, _lib, retain: false, release: true); + } + + static NSKeyedArchiver alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSKeyedArchiver1, _lib._sel_alloc1); + return NSKeyedArchiver._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSKeyedArchiver1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSKeyedArchiver1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSKeyedArchiver1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSKeyedArchiver1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSKeyedArchiver1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSKeyedArchiver1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSKeyedArchiver1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSKeyedArchiver1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSKeyedArchiver1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Mutable Data +class NSMutableData extends NSData { + NSMutableData._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableData] that points to the same underlying object as [other]. + static NSMutableData castFrom(T other) { + return NSMutableData._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSMutableData] that wraps the given raw object pointer. + static NSMutableData castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableData._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableData]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSMutableData1); + } + + ffi.Pointer get mutableBytes { + return _lib._objc_msgSend_19(_id, _lib._sel_mutableBytes1); + } + + @override + int get length { + return _lib._objc_msgSend_10(_id, _lib._sel_length1); + } + + set length(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setLength_1, value); + } + + void appendBytes_length_(ffi.Pointer bytes, int length) { + return _lib._objc_msgSend_21( + _id, _lib._sel_appendBytes_length_1, bytes, length); + } + + void appendData_(NSData? other) { + return _lib._objc_msgSend_217( + _id, _lib._sel_appendData_1, other?._id ?? ffi.nullptr); + } + + void increaseLengthBy_(int extraLength) { + return _lib._objc_msgSend_401( + _id, _lib._sel_increaseLengthBy_1, extraLength); + } + + void replaceBytesInRange_withBytes_( + _NSRange range, ffi.Pointer bytes) { + return _lib._objc_msgSend_445( + _id, _lib._sel_replaceBytesInRange_withBytes_1, range, bytes); + } + + void resetBytesInRange_(_NSRange range) { + return _lib._objc_msgSend_407(_id, _lib._sel_resetBytesInRange_1, range); + } + + void setData_(NSData? data) { + return _lib._objc_msgSend_217( + _id, _lib._sel_setData_1, data?._id ?? ffi.nullptr); + } + + void replaceBytesInRange_withBytes_length_(_NSRange range, + ffi.Pointer replacementBytes, int replacementLength) { + return _lib._objc_msgSend_446( + _id, + _lib._sel_replaceBytesInRange_withBytes_length_1, + range, + replacementBytes, + replacementLength); + } + + static NSMutableData dataWithCapacity_( + PedometerBindings _lib, int aNumItems) { + final _ret = _lib._objc_msgSend_52( + _lib._class_NSMutableData1, _lib._sel_dataWithCapacity_1, aNumItems); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithLength_(PedometerBindings _lib, int length) { + final _ret = _lib._objc_msgSend_52( + _lib._class_NSMutableData1, _lib._sel_dataWithLength_1, length); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + NSMutableData initWithCapacity_(int capacity) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_initWithCapacity_1, capacity); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + NSMutableData initWithLength_(int length) { + final _ret = _lib._objc_msgSend_52(_id, _lib._sel_initWithLength_1, length); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + bool decompressUsingAlgorithm_error_( + int algorithm, ffi.Pointer> error) { + return _lib._objc_msgSend_447( + _id, _lib._sel_decompressUsingAlgorithm_error_1, algorithm, error); + } + + bool compressUsingAlgorithm_error_( + int algorithm, ffi.Pointer> error) { + return _lib._objc_msgSend_447( + _id, _lib._sel_compressUsingAlgorithm_error_1, algorithm, error); + } + + static NSMutableData data(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableData1, _lib._sel_data1); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithBytes_length_( + PedometerBindings _lib, ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_205(_lib._class_NSMutableData1, + _lib._sel_dataWithBytes_length_1, bytes, length); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithBytesNoCopy_length_( + PedometerBindings _lib, ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_205(_lib._class_NSMutableData1, + _lib._sel_dataWithBytesNoCopy_length_1, bytes, length); + return NSMutableData._(_ret, _lib, retain: false, release: true); + } + + static NSMutableData dataWithBytesNoCopy_length_freeWhenDone_( + PedometerBindings _lib, ffi.Pointer bytes, int length, bool b) { + final _ret = _lib._objc_msgSend_206(_lib._class_NSMutableData1, + _lib._sel_dataWithBytesNoCopy_length_freeWhenDone_1, bytes, length, b); + return NSMutableData._(_ret, _lib, retain: false, release: true); + } + + static NSMutableData dataWithContentsOfFile_options_error_( + PedometerBindings _lib, + NSString? path, + int readOptionsMask, + ffi.Pointer> errorPtr) { + final _ret = _lib._objc_msgSend_207( + _lib._class_NSMutableData1, + _lib._sel_dataWithContentsOfFile_options_error_1, + path?._id ?? ffi.nullptr, + readOptionsMask, + errorPtr); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithContentsOfURL_options_error_( + PedometerBindings _lib, + NSURL? url, + int readOptionsMask, + ffi.Pointer> errorPtr) { + final _ret = _lib._objc_msgSend_208( + _lib._class_NSMutableData1, + _lib._sel_dataWithContentsOfURL_options_error_1, + url?._id ?? ffi.nullptr, + readOptionsMask, + errorPtr); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSMutableData1, + _lib._sel_dataWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithContentsOfURL_( + PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSMutableData1, + _lib._sel_dataWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData dataWithData_(PedometerBindings _lib, NSData? data) { + final _ret = _lib._objc_msgSend_211(_lib._class_NSMutableData1, + _lib._sel_dataWithData_1, data?._id ?? ffi.nullptr); + return NSMutableData._(_ret, _lib, retain: true, release: true); + } + + static NSObject dataWithContentsOfMappedFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSMutableData1, + _lib._sel_dataWithContentsOfMappedFile_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSMutableData new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableData1, _lib._sel_new1); + return NSMutableData._(_ret, _lib, retain: false, release: true); + } + + static NSMutableData alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableData1, _lib._sel_alloc1); + return NSMutableData._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableData1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableData1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableData1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableData1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableData1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableData1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableData1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSMutableData1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableData1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSPropertyListFormat { + static const int NSPropertyListOpenStepFormat = 1; + static const int NSPropertyListXMLFormat_v1_0 = 100; + static const int NSPropertyListBinaryFormat_v1_0 = 200; +} + +class NSThread extends NSObject { + NSThread._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSThread] that points to the same underlying object as [other]. + static NSThread castFrom(T other) { + return NSThread._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSThread] that wraps the given raw object pointer. + static NSThread castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSThread._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSThread]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSThread1); + } + + static NSThread? getCurrentThread(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_457(_lib._class_NSThread1, _lib._sel_currentThread1); + return _ret.address == 0 + ? null + : NSThread._(_ret, _lib, retain: true, release: true); + } + + static void detachNewThreadWithBlock_( + PedometerBindings _lib, ObjCBlock21 block) { + return _lib._objc_msgSend_458( + _lib._class_NSThread1, _lib._sel_detachNewThreadWithBlock_1, block._id); + } + + static void detachNewThreadSelector_toTarget_withObject_( + PedometerBindings _lib, + ffi.Pointer selector, + NSObject target, + NSObject argument) { + return _lib._objc_msgSend_459( + _lib._class_NSThread1, + _lib._sel_detachNewThreadSelector_toTarget_withObject_1, + selector, + target._id, + argument._id); + } + + static bool isMultiThreaded(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSThread1, _lib._sel_isMultiThreaded1); + } + + NSMutableDictionary? get threadDictionary { + final _ret = _lib._objc_msgSend_464(_id, _lib._sel_threadDictionary1); + return _ret.address == 0 + ? null + : NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static void sleepUntilDate_(PedometerBindings _lib, NSDate? date) { + return _lib._objc_msgSend_465(_lib._class_NSThread1, + _lib._sel_sleepUntilDate_1, date?._id ?? ffi.nullptr); + } + + static void sleepForTimeInterval_(PedometerBindings _lib, double ti) { + return _lib._objc_msgSend_466( + _lib._class_NSThread1, _lib._sel_sleepForTimeInterval_1, ti); + } + + static void exit(PedometerBindings _lib) { + return _lib._objc_msgSend_1(_lib._class_NSThread1, _lib._sel_exit1); + } + + double get threadPriority { + return _lib._objc_msgSend_147(_id, _lib._sel_threadPriority1); + } + + set threadPriority(double value) { + _lib._objc_msgSend_467(_id, _lib._sel_setThreadPriority_1, value); + } + + int get qualityOfService { + return _lib._objc_msgSend_468(_id, _lib._sel_qualityOfService1); + } + + set qualityOfService(int value) { + _lib._objc_msgSend_469(_id, _lib._sel_setQualityOfService_1, value); + } + + static NSArray? getCallStackReturnAddresses(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSThread1, _lib._sel_callStackReturnAddresses1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getCallStackSymbols(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSThread1, _lib._sel_callStackSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set name(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setName_1, value?._id ?? ffi.nullptr); + } + + int get stackSize { + return _lib._objc_msgSend_10(_id, _lib._sel_stackSize1); + } + + set stackSize(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setStackSize_1, value); + } + + bool get isMainThread { + return _lib._objc_msgSend_12(_id, _lib._sel_isMainThread1); + } + + static NSThread? getMainThread(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_457(_lib._class_NSThread1, _lib._sel_mainThread1); + return _ret.address == 0 + ? null + : NSThread._(_ret, _lib, retain: true, release: true); + } + + @override + NSThread init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSThread._(_ret, _lib, retain: true, release: true); + } + + NSThread initWithTarget_selector_object_( + NSObject target, ffi.Pointer selector, NSObject argument) { + final _ret = _lib._objc_msgSend_471( + _id, + _lib._sel_initWithTarget_selector_object_1, + target._id, + selector, + argument._id); + return NSThread._(_ret, _lib, retain: true, release: true); + } + + NSThread initWithBlock_(ObjCBlock21 block) { + final _ret = + _lib._objc_msgSend_472(_id, _lib._sel_initWithBlock_1, block._id); + return NSThread._(_ret, _lib, retain: true, release: true); + } + + bool get executing { + return _lib._objc_msgSend_12(_id, _lib._sel_isExecuting1); + } + + bool get finished { + return _lib._objc_msgSend_12(_id, _lib._sel_isFinished1); + } + + bool get cancelled { + return _lib._objc_msgSend_12(_id, _lib._sel_isCancelled1); + } + + void cancel() { + return _lib._objc_msgSend_1(_id, _lib._sel_cancel1); + } + + void start() { + return _lib._objc_msgSend_1(_id, _lib._sel_start1); + } + + void main() { + return _lib._objc_msgSend_1(_id, _lib._sel_main1); + } + + static NSThread new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSThread1, _lib._sel_new1); + return NSThread._(_ret, _lib, retain: false, release: true); + } + + static NSThread alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSThread1, _lib._sel_alloc1); + return NSThread._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSThread1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSThread1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSThread1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSThread1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSThread1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSThread1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSThread1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSThread1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSThread1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock21_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block) { + return block.ref.target + .cast>() + .asFunction()(); +} + +final _ObjCBlock21_closureRegistry = {}; +int _ObjCBlock21_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock21_registerClosure(Function fn) { + final id = ++_ObjCBlock21_closureRegistryIndex; + _ObjCBlock21_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock21_closureTrampoline(ffi.Pointer<_ObjCBlock> block) { + return _ObjCBlock21_closureRegistry[block.ref.target.address]!(); +} + +class ObjCBlock21 extends _ObjCBlockBase { + ObjCBlock21._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock21.fromFunctionPointer(PedometerBindings lib, + ffi.Pointer> ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block)>( + _ObjCBlock21_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock21.fromFunction(PedometerBindings lib, void Function() fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block)>( + _ObjCBlock21_closureTrampoline) + .cast(), + _ObjCBlock21_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call() { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block)>>() + .asFunction block)>()(_id); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// Mutable Dictionary +class NSMutableDictionary extends NSDictionary { + NSMutableDictionary._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableDictionary] that points to the same underlying object as [other]. + static NSMutableDictionary castFrom(T other) { + return NSMutableDictionary._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMutableDictionary] that wraps the given raw object pointer. + static NSMutableDictionary castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableDictionary._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableDictionary]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMutableDictionary1); + } + + void removeObjectForKey_(NSObject aKey) { + return _lib._objc_msgSend_15(_id, _lib._sel_removeObjectForKey_1, aKey._id); + } + + void setObject_forKey_(NSObject anObject, NSObject aKey) { + return _lib._objc_msgSend_460( + _id, _lib._sel_setObject_forKey_1, anObject._id, aKey._id); + } + + @override + NSMutableDictionary init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + NSMutableDictionary initWithCapacity_(int numItems) { + final _ret = + _lib._objc_msgSend_52(_id, _lib._sel_initWithCapacity_1, numItems); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + @override + NSMutableDictionary initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + void addEntriesFromDictionary_(NSDictionary? otherDictionary) { + return _lib._objc_msgSend_438(_id, _lib._sel_addEntriesFromDictionary_1, + otherDictionary?._id ?? ffi.nullptr); + } + + void removeAllObjects() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeAllObjects1); + } + + void removeObjectsForKeys_(NSArray? keyArray) { + return _lib._objc_msgSend_403( + _id, _lib._sel_removeObjectsForKeys_1, keyArray?._id ?? ffi.nullptr); + } + + void setDictionary_(NSDictionary? otherDictionary) { + return _lib._objc_msgSend_438( + _id, _lib._sel_setDictionary_1, otherDictionary?._id ?? ffi.nullptr); + } + + void setObject_forKeyedSubscript_(NSObject obj, NSObject key) { + return _lib._objc_msgSend_460( + _id, _lib._sel_setObject_forKeyedSubscript_1, obj._id, key._id); + } + + static NSMutableDictionary dictionaryWithCapacity_( + PedometerBindings _lib, int numItems) { + final _ret = _lib._objc_msgSend_52(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithCapacity_1, numItems); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_461(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithContentsOfURL_( + PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_462(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + NSMutableDictionary initWithContentsOfFile_(NSString? path) { + final _ret = _lib._objc_msgSend_461( + _id, _lib._sel_initWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + NSMutableDictionary initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_462( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithSharedKeySet_( + PedometerBindings _lib, NSObject keyset) { + final _ret = _lib._objc_msgSend_463(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithSharedKeySet_1, keyset._id); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + void setValue_forKey_(NSObject value, NSString? key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setValue_forKey_1, value._id, key?._id ?? ffi.nullptr); + } + + static NSMutableDictionary dictionary(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableDictionary1, _lib._sel_dictionary1); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithObject_forKey_( + PedometerBindings _lib, NSObject object, NSObject key) { + final _ret = _lib._objc_msgSend_140(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithObject_forKey_1, object._id, key._id); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithObjects_forKeys_count_( + PedometerBindings _lib, + ffi.Pointer> objects, + ffi.Pointer> keys, + int cnt) { + final _ret = _lib._objc_msgSend_129(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithObjects_forKeys_count_1, objects, keys, cnt); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithObjectsAndKeys_( + PedometerBindings _lib, NSObject firstObject) { + final _ret = _lib._objc_msgSend_16(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithObjectsAndKeys_1, firstObject._id); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithDictionary_( + PedometerBindings _lib, NSDictionary? dict) { + final _ret = _lib._objc_msgSend_141(_lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithDictionary_1, dict?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary dictionaryWithObjects_forKeys_( + PedometerBindings _lib, NSArray? objects, NSArray? keys) { + final _ret = _lib._objc_msgSend_142( + _lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithObjects_forKeys_1, + objects?._id ?? ffi.nullptr, + keys?._id ?? ffi.nullptr); + return NSMutableDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary dictionaryWithContentsOfURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_144( + _lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithContentsOfURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSObject sharedKeySetForKeys_(PedometerBindings _lib, NSArray? keys) { + final _ret = _lib._objc_msgSend_59(_lib._class_NSMutableDictionary1, + _lib._sel_sharedKeySetForKeys_1, keys?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSMutableDictionary new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableDictionary1, _lib._sel_new1); + return NSMutableDictionary._(_ret, _lib, retain: false, release: true); + } + + static NSMutableDictionary alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableDictionary1, _lib._sel_alloc1); + return NSMutableDictionary._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableDictionary1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableDictionary1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMutableDictionary1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableDictionary1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableDictionary1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableDictionary1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableDictionary1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMutableDictionary1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableDictionary1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSQualityOfService { + static const int NSQualityOfServiceUserInteractive = 33; + static const int NSQualityOfServiceUserInitiated = 25; + static const int NSQualityOfServiceUtility = 17; + static const int NSQualityOfServiceBackground = 9; + static const int NSQualityOfServiceDefault = -1; +} + +class NSItemProvider extends NSObject { + NSItemProvider._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSItemProvider] that points to the same underlying object as [other]. + static NSItemProvider castFrom(T other) { + return NSItemProvider._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSItemProvider] that wraps the given raw object pointer. + static NSItemProvider castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSItemProvider._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSItemProvider]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSItemProvider1); + } + + @override + NSItemProvider init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSItemProvider._(_ret, _lib, retain: true, release: true); + } + + void registerDataRepresentationForTypeIdentifier_visibility_loadHandler_( + NSString? typeIdentifier, int visibility, ObjCBlock22 loadHandler) { + return _lib._objc_msgSend_489( + _id, + _lib._sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + visibility, + loadHandler._id); + } + + void + registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_( + NSString? typeIdentifier, + int fileOptions, + int visibility, + ObjCBlock25 loadHandler) { + return _lib._objc_msgSend_490( + _id, + _lib._sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + fileOptions, + visibility, + loadHandler._id); + } + + NSArray? get registeredTypeIdentifiers { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_registeredTypeIdentifiers1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray registeredTypeIdentifiersWithFileOptions_(int fileOptions) { + final _ret = _lib._objc_msgSend_491( + _id, _lib._sel_registeredTypeIdentifiersWithFileOptions_1, fileOptions); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + bool hasItemConformingToTypeIdentifier_(NSString? typeIdentifier) { + return _lib._objc_msgSend_51( + _id, + _lib._sel_hasItemConformingToTypeIdentifier_1, + typeIdentifier?._id ?? ffi.nullptr); + } + + bool hasRepresentationConformingToTypeIdentifier_fileOptions_( + NSString? typeIdentifier, int fileOptions) { + return _lib._objc_msgSend_492( + _id, + _lib._sel_hasRepresentationConformingToTypeIdentifier_fileOptions_1, + typeIdentifier?._id ?? ffi.nullptr, + fileOptions); + } + + NSProgress loadDataRepresentationForTypeIdentifier_completionHandler_( + NSString? typeIdentifier, ObjCBlock24 completionHandler) { + final _ret = _lib._objc_msgSend_493( + _id, + _lib._sel_loadDataRepresentationForTypeIdentifier_completionHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + completionHandler._id); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + NSProgress loadFileRepresentationForTypeIdentifier_completionHandler_( + NSString? typeIdentifier, ObjCBlock27 completionHandler) { + final _ret = _lib._objc_msgSend_494( + _id, + _lib._sel_loadFileRepresentationForTypeIdentifier_completionHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + completionHandler._id); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + NSProgress loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_( + NSString? typeIdentifier, ObjCBlock26 completionHandler) { + final _ret = _lib._objc_msgSend_495( + _id, + _lib._sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + completionHandler._id); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + NSString? get suggestedName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_suggestedName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set suggestedName(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setSuggestedName_1, value?._id ?? ffi.nullptr); + } + + NSItemProvider initWithObject_(NSObject? object) { + final _ret = _lib._objc_msgSend_16( + _id, _lib._sel_initWithObject_1, object?._id ?? ffi.nullptr); + return NSItemProvider._(_ret, _lib, retain: true, release: true); + } + + void registerObject_visibility_(NSObject? object, int visibility) { + return _lib._objc_msgSend_496(_id, _lib._sel_registerObject_visibility_1, + object?._id ?? ffi.nullptr, visibility); + } + + void registerObjectOfClass_visibility_loadHandler_( + NSObject? aClass, int visibility, ObjCBlock28 loadHandler) { + return _lib._objc_msgSend_497( + _id, + _lib._sel_registerObjectOfClass_visibility_loadHandler_1, + aClass?._id ?? ffi.nullptr, + visibility, + loadHandler._id); + } + + bool canLoadObjectOfClass_(NSObject? aClass) { + return _lib._objc_msgSend_0( + _id, _lib._sel_canLoadObjectOfClass_1, aClass?._id ?? ffi.nullptr); + } + + NSProgress loadObjectOfClass_completionHandler_( + NSObject? aClass, ObjCBlock29 completionHandler) { + final _ret = _lib._objc_msgSend_498( + _id, + _lib._sel_loadObjectOfClass_completionHandler_1, + aClass?._id ?? ffi.nullptr, + completionHandler._id); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + NSItemProvider initWithItem_typeIdentifier_( + NSObject? item, NSString? typeIdentifier) { + final _ret = _lib._objc_msgSend_241( + _id, + _lib._sel_initWithItem_typeIdentifier_1, + item?._id ?? ffi.nullptr, + typeIdentifier?._id ?? ffi.nullptr); + return NSItemProvider._(_ret, _lib, retain: true, release: true); + } + + NSItemProvider initWithContentsOfURL_(NSURL? fileURL) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithContentsOfURL_1, fileURL?._id ?? ffi.nullptr); + return NSItemProvider._(_ret, _lib, retain: true, release: true); + } + + void registerItemForTypeIdentifier_loadHandler_( + NSString? typeIdentifier, ObjCBlock30 loadHandler) { + return _lib._objc_msgSend_499( + _id, + _lib._sel_registerItemForTypeIdentifier_loadHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + loadHandler._id); + } + + void loadItemForTypeIdentifier_options_completionHandler_( + NSString? typeIdentifier, + NSDictionary? options, + ObjCBlock29 completionHandler) { + return _lib._objc_msgSend_500( + _id, + _lib._sel_loadItemForTypeIdentifier_options_completionHandler_1, + typeIdentifier?._id ?? ffi.nullptr, + options?._id ?? ffi.nullptr, + completionHandler._id); + } + + ObjCBlock30 get previewImageHandler { + final _ret = _lib._objc_msgSend_501(_id, _lib._sel_previewImageHandler1); + return ObjCBlock30._(_ret, _lib); + } + + set previewImageHandler(ObjCBlock30 value) { + _lib._objc_msgSend_502(_id, _lib._sel_setPreviewImageHandler_1, value._id); + } + + void loadPreviewImageWithOptions_completionHandler_( + NSDictionary? options, ObjCBlock29 completionHandler) { + return _lib._objc_msgSend_503( + _id, + _lib._sel_loadPreviewImageWithOptions_completionHandler_1, + options?._id ?? ffi.nullptr, + completionHandler._id); + } + + static NSItemProvider new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSItemProvider1, _lib._sel_new1); + return NSItemProvider._(_ret, _lib, retain: false, release: true); + } + + static NSItemProvider alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSItemProvider1, _lib._sel_alloc1); + return NSItemProvider._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSItemProvider1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSItemProvider1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSItemProvider1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSItemProvider1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSItemProvider1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSItemProvider1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSItemProvider1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSItemProvider1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSItemProvider1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSItemProviderRepresentationVisibility { + static const int NSItemProviderRepresentationVisibilityAll = 0; + static const int NSItemProviderRepresentationVisibilityTeam = 1; + static const int NSItemProviderRepresentationVisibilityGroup = 2; + static const int NSItemProviderRepresentationVisibilityOwnProcess = 3; +} + +ffi.Pointer _ObjCBlock22_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer<_ObjCBlock> arg0) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> arg0)>>() + .asFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> arg0)>()(arg0); +} + +final _ObjCBlock22_closureRegistry = {}; +int _ObjCBlock22_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock22_registerClosure(Function fn) { + final id = ++_ObjCBlock22_closureRegistryIndex; + _ObjCBlock22_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +ffi.Pointer _ObjCBlock22_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer<_ObjCBlock> arg0) { + return _ObjCBlock22_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock22 extends _ObjCBlockBase { + ObjCBlock22._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock22.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>( + _ObjCBlock22_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock22.fromFunction(PedometerBindings lib, + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>( + _ObjCBlock22_closureTrampoline) + .cast(), + _ObjCBlock22_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + ffi.Pointer call(ffi.Pointer<_ObjCBlock> arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>>() + .asFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSProgress extends NSObject { + NSProgress._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSProgress] that points to the same underlying object as [other]. + static NSProgress castFrom(T other) { + return NSProgress._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSProgress] that wraps the given raw object pointer. + static NSProgress castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSProgress._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSProgress]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSProgress1); + } + + static NSProgress currentProgress(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_475( + _lib._class_NSProgress1, _lib._sel_currentProgress1); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + static NSProgress progressWithTotalUnitCount_( + PedometerBindings _lib, int unitCount) { + final _ret = _lib._objc_msgSend_476(_lib._class_NSProgress1, + _lib._sel_progressWithTotalUnitCount_1, unitCount); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + static NSProgress discreteProgressWithTotalUnitCount_( + PedometerBindings _lib, int unitCount) { + final _ret = _lib._objc_msgSend_476(_lib._class_NSProgress1, + _lib._sel_discreteProgressWithTotalUnitCount_1, unitCount); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + static NSProgress progressWithTotalUnitCount_parent_pendingUnitCount_( + PedometerBindings _lib, + int unitCount, + NSProgress? parent, + int portionOfParentTotalUnitCount) { + final _ret = _lib._objc_msgSend_477( + _lib._class_NSProgress1, + _lib._sel_progressWithTotalUnitCount_parent_pendingUnitCount_1, + unitCount, + parent?._id ?? ffi.nullptr, + portionOfParentTotalUnitCount); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + NSProgress initWithParent_userInfo_( + NSProgress? parentProgressOrNil, NSObject? userInfoOrNil) { + final _ret = _lib._objc_msgSend_478( + _id, + _lib._sel_initWithParent_userInfo_1, + parentProgressOrNil?._id ?? ffi.nullptr, + userInfoOrNil?._id ?? ffi.nullptr); + return NSProgress._(_ret, _lib, retain: true, release: true); + } + + void becomeCurrentWithPendingUnitCount_(int unitCount) { + return _lib._objc_msgSend_479( + _id, _lib._sel_becomeCurrentWithPendingUnitCount_1, unitCount); + } + + void performAsCurrentWithPendingUnitCount_usingBlock_( + int unitCount, ObjCBlock21 work) { + return _lib._objc_msgSend_480( + _id, + _lib._sel_performAsCurrentWithPendingUnitCount_usingBlock_1, + unitCount, + work._id); + } + + void resignCurrent() { + return _lib._objc_msgSend_1(_id, _lib._sel_resignCurrent1); + } + + void addChild_withPendingUnitCount_(NSProgress? child, int inUnitCount) { + return _lib._objc_msgSend_481( + _id, + _lib._sel_addChild_withPendingUnitCount_1, + child?._id ?? ffi.nullptr, + inUnitCount); + } + + int get totalUnitCount { + return _lib._objc_msgSend_482(_id, _lib._sel_totalUnitCount1); + } + + set totalUnitCount(int value) { + _lib._objc_msgSend_483(_id, _lib._sel_setTotalUnitCount_1, value); + } + + int get completedUnitCount { + return _lib._objc_msgSend_482(_id, _lib._sel_completedUnitCount1); + } + + set completedUnitCount(int value) { + _lib._objc_msgSend_483(_id, _lib._sel_setCompletedUnitCount_1, value); + } + + NSString? get localizedDescription { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_localizedDescription1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set localizedDescription(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setLocalizedDescription_1, value?._id ?? ffi.nullptr); + } + + NSString? get localizedAdditionalDescription { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_localizedAdditionalDescription1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set localizedAdditionalDescription(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setLocalizedAdditionalDescription_1, + value?._id ?? ffi.nullptr); + } + + bool get cancellable { + return _lib._objc_msgSend_12(_id, _lib._sel_isCancellable1); + } + + set cancellable(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setCancellable_1, value); + } + + bool get pausable { + return _lib._objc_msgSend_12(_id, _lib._sel_isPausable1); + } + + set pausable(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setPausable_1, value); + } + + bool get cancelled { + return _lib._objc_msgSend_12(_id, _lib._sel_isCancelled1); + } + + bool get paused { + return _lib._objc_msgSend_12(_id, _lib._sel_isPaused1); + } + + ObjCBlock21 get cancellationHandler { + final _ret = _lib._objc_msgSend_484(_id, _lib._sel_cancellationHandler1); + return ObjCBlock21._(_ret, _lib); + } + + set cancellationHandler(ObjCBlock21 value) { + _lib._objc_msgSend_485(_id, _lib._sel_setCancellationHandler_1, value._id); + } + + ObjCBlock21 get pausingHandler { + final _ret = _lib._objc_msgSend_484(_id, _lib._sel_pausingHandler1); + return ObjCBlock21._(_ret, _lib); + } + + set pausingHandler(ObjCBlock21 value) { + _lib._objc_msgSend_485(_id, _lib._sel_setPausingHandler_1, value._id); + } + + ObjCBlock21 get resumingHandler { + final _ret = _lib._objc_msgSend_484(_id, _lib._sel_resumingHandler1); + return ObjCBlock21._(_ret, _lib); + } + + set resumingHandler(ObjCBlock21 value) { + _lib._objc_msgSend_485(_id, _lib._sel_setResumingHandler_1, value._id); + } + + void setUserInfoObject_forKey_(NSObject objectOrNil, NSString key) { + return _lib._objc_msgSend_118( + _id, _lib._sel_setUserInfoObject_forKey_1, objectOrNil._id, key._id); + } + + bool get indeterminate { + return _lib._objc_msgSend_12(_id, _lib._sel_isIndeterminate1); + } + + double get fractionCompleted { + return _lib._objc_msgSend_147(_id, _lib._sel_fractionCompleted1); + } + + bool get finished { + return _lib._objc_msgSend_12(_id, _lib._sel_isFinished1); + } + + void cancel() { + return _lib._objc_msgSend_1(_id, _lib._sel_cancel1); + } + + void pause() { + return _lib._objc_msgSend_1(_id, _lib._sel_pause1); + } + + void resume() { + return _lib._objc_msgSend_1(_id, _lib._sel_resume1); + } + + NSObject? get userInfo { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_userInfo1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + NSString get kind { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_kind1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + set kind(NSString value) { + _lib._objc_msgSend_470(_id, _lib._sel_setKind_1, value._id); + } + + NSNumber? get estimatedTimeRemaining { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_estimatedTimeRemaining1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set estimatedTimeRemaining(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setEstimatedTimeRemaining_1, value?._id ?? ffi.nullptr); + } + + NSNumber? get throughput { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_throughput1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set throughput(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setThroughput_1, value?._id ?? ffi.nullptr); + } + + NSString get fileOperationKind { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_fileOperationKind1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + set fileOperationKind(NSString value) { + _lib._objc_msgSend_470(_id, _lib._sel_setFileOperationKind_1, value._id); + } + + NSURL? get fileURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_fileURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + set fileURL(NSURL? value) { + _lib._objc_msgSend_487( + _id, _lib._sel_setFileURL_1, value?._id ?? ffi.nullptr); + } + + NSNumber? get fileTotalCount { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_fileTotalCount1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set fileTotalCount(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setFileTotalCount_1, value?._id ?? ffi.nullptr); + } + + NSNumber? get fileCompletedCount { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_fileCompletedCount1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set fileCompletedCount(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setFileCompletedCount_1, value?._id ?? ffi.nullptr); + } + + void publish() { + return _lib._objc_msgSend_1(_id, _lib._sel_publish1); + } + + void unpublish() { + return _lib._objc_msgSend_1(_id, _lib._sel_unpublish1); + } + + static NSObject addSubscriberForFileURL_withPublishingHandler_( + PedometerBindings _lib, NSURL? url, ObjCBlock23 publishingHandler) { + final _ret = _lib._objc_msgSend_488( + _lib._class_NSProgress1, + _lib._sel_addSubscriberForFileURL_withPublishingHandler_1, + url?._id ?? ffi.nullptr, + publishingHandler._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static void removeSubscriber_(PedometerBindings _lib, NSObject subscriber) { + return _lib._objc_msgSend_15( + _lib._class_NSProgress1, _lib._sel_removeSubscriber_1, subscriber._id); + } + + bool get old { + return _lib._objc_msgSend_12(_id, _lib._sel_isOld1); + } + + static NSProgress new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSProgress1, _lib._sel_new1); + return NSProgress._(_ret, _lib, retain: false, release: true); + } + + static NSProgress alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSProgress1, _lib._sel_alloc1); + return NSProgress._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSProgress1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSProgress1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSProgress1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSProgress1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSProgress1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSProgress1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSProgress1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSProgress1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSProgress1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +ffi.Pointer<_ObjCBlock> _ObjCBlock23_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function(ffi.Pointer arg0)>>() + .asFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer arg0)>()(arg0); +} + +final _ObjCBlock23_closureRegistry = {}; +int _ObjCBlock23_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock23_registerClosure(Function fn) { + final id = ++_ObjCBlock23_closureRegistryIndex; + _ObjCBlock23_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +ffi.Pointer<_ObjCBlock> _ObjCBlock23_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock23_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock23 extends _ObjCBlockBase { + ObjCBlock23._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock23.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock23_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock23.fromFunction(PedometerBindings lib, + ffi.Pointer<_ObjCBlock> Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer<_ObjCBlock> Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock23_closureTrampoline) + .cast(), + _ObjCBlock23_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + ffi.Pointer<_ObjCBlock> call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Pointer<_ObjCBlock> Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + ffi.Pointer<_ObjCBlock> Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock24_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock24_closureRegistry = {}; +int _ObjCBlock24_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock24_registerClosure(Function fn) { + final id = ++_ObjCBlock24_closureRegistryIndex; + _ObjCBlock24_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock24_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock24_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock24 extends _ObjCBlockBase { + ObjCBlock24._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock24.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock24_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock24.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock24_closureTrampoline) + .cast(), + _ObjCBlock24_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSItemProviderFileOptions { + static const int NSItemProviderFileOptionOpenInPlace = 1; +} + +ffi.Pointer _ObjCBlock25_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer<_ObjCBlock> arg0) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> arg0)>>() + .asFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> arg0)>()(arg0); +} + +final _ObjCBlock25_closureRegistry = {}; +int _ObjCBlock25_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock25_registerClosure(Function fn) { + final id = ++_ObjCBlock25_closureRegistryIndex; + _ObjCBlock25_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +ffi.Pointer _ObjCBlock25_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer<_ObjCBlock> arg0) { + return _ObjCBlock25_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock25 extends _ObjCBlockBase { + ObjCBlock25._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock25.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>( + _ObjCBlock25_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock25.fromFunction(PedometerBindings lib, + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>( + _ObjCBlock25_closureTrampoline) + .cast(), + _ObjCBlock25_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + ffi.Pointer call(ffi.Pointer<_ObjCBlock> arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>>() + .asFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock26_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Bool arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, bool arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock26_closureRegistry = {}; +int _ObjCBlock26_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock26_registerClosure(Function fn) { + final id = ++_ObjCBlock26_closureRegistryIndex; + _ObjCBlock26_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock26_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return _ObjCBlock26_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock26 extends _ObjCBlockBase { + ObjCBlock26._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock26.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Bool arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>( + _ObjCBlock26_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock26.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, bool arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>( + _ObjCBlock26_closureTrampoline) + .cast(), + _ObjCBlock26_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + bool arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock27_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock27_closureRegistry = {}; +int _ObjCBlock27_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock27_registerClosure(Function fn) { + final id = ++_ObjCBlock27_closureRegistryIndex; + _ObjCBlock27_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock27_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock27_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock27 extends _ObjCBlockBase { + ObjCBlock27._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock27.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock27_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock27.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock27_closureTrampoline) + .cast(), + _ObjCBlock27_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +ffi.Pointer _ObjCBlock28_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer<_ObjCBlock> arg0) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> arg0)>>() + .asFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> arg0)>()(arg0); +} + +final _ObjCBlock28_closureRegistry = {}; +int _ObjCBlock28_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock28_registerClosure(Function fn) { + final id = ++_ObjCBlock28_closureRegistryIndex; + _ObjCBlock28_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +ffi.Pointer _ObjCBlock28_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer<_ObjCBlock> arg0) { + return _ObjCBlock28_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock28 extends _ObjCBlockBase { + ObjCBlock28._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock28.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>( + _ObjCBlock28_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock28.fromFunction(PedometerBindings lib, + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Pointer Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>( + _ObjCBlock28_closureTrampoline) + .cast(), + _ObjCBlock28_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + ffi.Pointer call(ffi.Pointer<_ObjCBlock> arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>>() + .asFunction< + ffi.Pointer Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock29_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock29_closureRegistry = {}; +int _ObjCBlock29_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock29_registerClosure(Function fn) { + final id = ++_ObjCBlock29_closureRegistryIndex; + _ObjCBlock29_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock29_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock29_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock29 extends _ObjCBlockBase { + ObjCBlock29._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock29.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock29_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock29.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock29_closureTrampoline) + .cast(), + _ObjCBlock29_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock30_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock30_closureRegistry = {}; +int _ObjCBlock30_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock30_registerClosure(Function fn) { + final id = ++_ObjCBlock30_closureRegistryIndex; + _ObjCBlock30_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock30_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock30_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock30 extends _ObjCBlockBase { + ObjCBlock30._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock30.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock30_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock30.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer<_ObjCBlock> arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock30_closureTrampoline) + .cast(), + _ObjCBlock30_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer<_ObjCBlock> arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer<_ObjCBlock> arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSMutableString extends NSString { + NSMutableString._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableString] that points to the same underlying object as [other]. + static NSMutableString castFrom(T other) { + return NSMutableString._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMutableString] that wraps the given raw object pointer. + static NSMutableString castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableString._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableString]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMutableString1); + } + + void replaceCharactersInRange_withString_(_NSRange range, NSString? aString) { + return _lib._objc_msgSend_504( + _id, + _lib._sel_replaceCharactersInRange_withString_1, + range, + aString?._id ?? ffi.nullptr); + } + + void insertString_atIndex_(NSString? aString, int loc) { + return _lib._objc_msgSend_505(_id, _lib._sel_insertString_atIndex_1, + aString?._id ?? ffi.nullptr, loc); + } + + void deleteCharactersInRange_(_NSRange range) { + return _lib._objc_msgSend_407( + _id, _lib._sel_deleteCharactersInRange_1, range); + } + + void appendString_(NSString? aString) { + return _lib._objc_msgSend_188( + _id, _lib._sel_appendString_1, aString?._id ?? ffi.nullptr); + } + + void appendFormat_(NSString? format) { + return _lib._objc_msgSend_188( + _id, _lib._sel_appendFormat_1, format?._id ?? ffi.nullptr); + } + + void setString_(NSString? aString) { + return _lib._objc_msgSend_188( + _id, _lib._sel_setString_1, aString?._id ?? ffi.nullptr); + } + + int replaceOccurrencesOfString_withString_options_range_(NSString? target, + NSString? replacement, int options, _NSRange searchRange) { + return _lib._objc_msgSend_506( + _id, + _lib._sel_replaceOccurrencesOfString_withString_options_range_1, + target?._id ?? ffi.nullptr, + replacement?._id ?? ffi.nullptr, + options, + searchRange); + } + + bool applyTransform_reverse_range_updatedRange_(NSString transform, + bool reverse, _NSRange range, ffi.Pointer<_NSRange> resultingRange) { + return _lib._objc_msgSend_507( + _id, + _lib._sel_applyTransform_reverse_range_updatedRange_1, + transform._id, + reverse, + range, + resultingRange); + } + + NSMutableString initWithCapacity_(int capacity) { + final _ret = + _lib._objc_msgSend_508(_id, _lib._sel_initWithCapacity_1, capacity); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithCapacity_( + PedometerBindings _lib, int capacity) { + final _ret = _lib._objc_msgSend_508( + _lib._class_NSMutableString1, _lib._sel_stringWithCapacity_1, capacity); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static ffi.Pointer getAvailableStringEncodings( + PedometerBindings _lib) { + return _lib._objc_msgSend_292( + _lib._class_NSMutableString1, _lib._sel_availableStringEncodings1); + } + + static NSString localizedNameOfStringEncoding_( + PedometerBindings _lib, int encoding) { + final _ret = _lib._objc_msgSend_253(_lib._class_NSMutableString1, + _lib._sel_localizedNameOfStringEncoding_1, encoding); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int getDefaultCStringEncoding(PedometerBindings _lib) { + return _lib._objc_msgSend_10( + _lib._class_NSMutableString1, _lib._sel_defaultCStringEncoding1); + } + + static NSMutableString string(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableString1, _lib._sel_string1); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSMutableString1, + _lib._sel_stringWithString_1, string?._id ?? ffi.nullptr); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithCharacters_length_(PedometerBindings _lib, + ffi.Pointer characters, int length) { + final _ret = _lib._objc_msgSend_305(_lib._class_NSMutableString1, + _lib._sel_stringWithCharacters_length_1, characters, length); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithUTF8String_( + PedometerBindings _lib, ffi.Pointer nullTerminatedCString) { + final _ret = _lib._objc_msgSend_306(_lib._class_NSMutableString1, + _lib._sel_stringWithUTF8String_1, nullTerminatedCString); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithFormat_( + PedometerBindings _lib, NSString? format) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSMutableString1, + _lib._sel_stringWithFormat_1, format?._id ?? ffi.nullptr); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString localizedStringWithFormat_( + PedometerBindings _lib, NSString? format) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSMutableString1, + _lib._sel_localizedStringWithFormat_1, format?._id ?? ffi.nullptr); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithValidatedFormat_validFormatSpecifiers_error_( + PedometerBindings _lib, + NSString? format, + NSString? validFormatSpecifiers, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_310( + _lib._class_NSMutableString1, + _lib._sel_stringWithValidatedFormat_validFormatSpecifiers_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + error); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString + localizedStringWithValidatedFormat_validFormatSpecifiers_error_( + PedometerBindings _lib, + NSString? format, + NSString? validFormatSpecifiers, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_310( + _lib._class_NSMutableString1, + _lib._sel_localizedStringWithValidatedFormat_validFormatSpecifiers_error_1, + format?._id ?? ffi.nullptr, + validFormatSpecifiers?._id ?? ffi.nullptr, + error); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithCString_encoding_( + PedometerBindings _lib, ffi.Pointer cString, int enc) { + final _ret = _lib._objc_msgSend_318(_lib._class_NSMutableString1, + _lib._sel_stringWithCString_encoding_1, cString, enc); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithContentsOfURL_encoding_error_( + PedometerBindings _lib, + NSURL? url, + int enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_319( + _lib._class_NSMutableString1, + _lib._sel_stringWithContentsOfURL_encoding_error_1, + url?._id ?? ffi.nullptr, + enc, + error); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithContentsOfFile_encoding_error_( + PedometerBindings _lib, + NSString? path, + int enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_320( + _lib._class_NSMutableString1, + _lib._sel_stringWithContentsOfFile_encoding_error_1, + path?._id ?? ffi.nullptr, + enc, + error); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithContentsOfURL_usedEncoding_error_( + PedometerBindings _lib, + NSURL? url, + ffi.Pointer enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_321( + _lib._class_NSMutableString1, + _lib._sel_stringWithContentsOfURL_usedEncoding_error_1, + url?._id ?? ffi.nullptr, + enc, + error); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString stringWithContentsOfFile_usedEncoding_error_( + PedometerBindings _lib, + NSString? path, + ffi.Pointer enc, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_322( + _lib._class_NSMutableString1, + _lib._sel_stringWithContentsOfFile_usedEncoding_error_1, + path?._id ?? ffi.nullptr, + enc, + error); + return NSMutableString._(_ret, _lib, retain: true, release: true); + } + + static int + stringEncodingForData_encodingOptions_convertedString_usedLossyConversion_( + PedometerBindings _lib, + NSData? data, + NSDictionary? opts, + ffi.Pointer> string, + ffi.Pointer usedLossyConversion) { + return _lib._objc_msgSend_323( + _lib._class_NSMutableString1, + _lib._sel_stringEncodingForData_encodingOptions_convertedString_usedLossyConversion_1, + data?._id ?? ffi.nullptr, + opts?._id ?? ffi.nullptr, + string, + usedLossyConversion); + } + + static NSObject stringWithContentsOfFile_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSMutableString1, + _lib._sel_stringWithContentsOfFile_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithContentsOfURL_(PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSMutableString1, + _lib._sel_stringWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithCString_length_( + PedometerBindings _lib, ffi.Pointer bytes, int length) { + final _ret = _lib._objc_msgSend_318(_lib._class_NSMutableString1, + _lib._sel_stringWithCString_length_1, bytes, length); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject stringWithCString_( + PedometerBindings _lib, ffi.Pointer bytes) { + final _ret = _lib._objc_msgSend_306( + _lib._class_NSMutableString1, _lib._sel_stringWithCString_1, bytes); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSString pathWithComponents_( + PedometerBindings _lib, NSArray? components) { + final _ret = _lib._objc_msgSend_330(_lib._class_NSMutableString1, + _lib._sel_pathWithComponents_1, components?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableString new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableString1, _lib._sel_new1); + return NSMutableString._(_ret, _lib, retain: false, release: true); + } + + static NSMutableString alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableString1, _lib._sel_alloc1); + return NSMutableString._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMutableString1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableString1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableString1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableString1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableString1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMutableString1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableString1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Notifications +class NSNotification extends NSObject { + NSNotification._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSNotification] that points to the same underlying object as [other]. + static NSNotification castFrom(T other) { + return NSNotification._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSNotification] that wraps the given raw object pointer. + static NSNotification castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSNotification._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSNotification]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSNotification1); + } + + NSString get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSObject get object { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_object1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get userInfo { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_userInfo1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSNotification initWithName_object_userInfo_( + NSString name, NSObject object, NSDictionary? userInfo) { + final _ret = _lib._objc_msgSend_509( + _id, + _lib._sel_initWithName_object_userInfo_1, + name._id, + object._id, + userInfo?._id ?? ffi.nullptr); + return NSNotification._(_ret, _lib, retain: true, release: true); + } + + NSNotification initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSNotification._(_ret, _lib, retain: true, release: true); + } + + static NSNotification notificationWithName_object_( + PedometerBindings _lib, NSString aName, NSObject anObject) { + final _ret = _lib._objc_msgSend_308(_lib._class_NSNotification1, + _lib._sel_notificationWithName_object_1, aName._id, anObject._id); + return NSNotification._(_ret, _lib, retain: true, release: true); + } + + static NSNotification notificationWithName_object_userInfo_( + PedometerBindings _lib, + NSString aName, + NSObject anObject, + NSDictionary? aUserInfo) { + final _ret = _lib._objc_msgSend_509( + _lib._class_NSNotification1, + _lib._sel_notificationWithName_object_userInfo_1, + aName._id, + anObject._id, + aUserInfo?._id ?? ffi.nullptr); + return NSNotification._(_ret, _lib, retain: true, release: true); + } + + @override + NSNotification init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSNotification._(_ret, _lib, retain: true, release: true); + } + + static NSNotification new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSNotification1, _lib._sel_new1); + return NSNotification._(_ret, _lib, retain: false, release: true); + } + + static NSNotification alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSNotification1, _lib._sel_alloc1); + return NSNotification._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSNotification1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSNotification1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSNotification1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSNotification1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSNotification1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSNotification1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSNotification1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSNotification1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSNotification1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSBundle extends NSObject { + NSBundle._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSBundle] that points to the same underlying object as [other]. + static NSBundle castFrom(T other) { + return NSBundle._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSBundle] that wraps the given raw object pointer. + static NSBundle castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSBundle._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSBundle]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSBundle1); + } + + static NSBundle? getMainBundle(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_510(_lib._class_NSBundle1, _lib._sel_mainBundle1); + return _ret.address == 0 + ? null + : NSBundle._(_ret, _lib, retain: true, release: true); + } + + static NSBundle bundleWithPath_(PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSBundle1, + _lib._sel_bundleWithPath_1, path?._id ?? ffi.nullptr); + return NSBundle._(_ret, _lib, retain: true, release: true); + } + + NSBundle initWithPath_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithPath_1, path?._id ?? ffi.nullptr); + return NSBundle._(_ret, _lib, retain: true, release: true); + } + + static NSBundle bundleWithURL_(PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSBundle1, + _lib._sel_bundleWithURL_1, url?._id ?? ffi.nullptr); + return NSBundle._(_ret, _lib, retain: true, release: true); + } + + NSBundle initWithURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithURL_1, url?._id ?? ffi.nullptr); + return NSBundle._(_ret, _lib, retain: true, release: true); + } + + static NSBundle bundleForClass_(PedometerBindings _lib, NSObject aClass) { + final _ret = _lib._objc_msgSend_511( + _lib._class_NSBundle1, _lib._sel_bundleForClass_1, aClass._id); + return NSBundle._(_ret, _lib, retain: true, release: true); + } + + static NSBundle bundleWithIdentifier_( + PedometerBindings _lib, NSString? identifier) { + final _ret = _lib._objc_msgSend_512(_lib._class_NSBundle1, + _lib._sel_bundleWithIdentifier_1, identifier?._id ?? ffi.nullptr); + return NSBundle._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getAllBundles(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_71(_lib._class_NSBundle1, _lib._sel_allBundles1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getAllFrameworks(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_71(_lib._class_NSBundle1, _lib._sel_allFrameworks1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + bool load() { + return _lib._objc_msgSend_12(_id, _lib._sel_load1); + } + + bool get loaded { + return _lib._objc_msgSend_12(_id, _lib._sel_isLoaded1); + } + + bool unload() { + return _lib._objc_msgSend_12(_id, _lib._sel_unload1); + } + + bool preflightAndReturnError_(ffi.Pointer> error) { + return _lib._objc_msgSend_183( + _id, _lib._sel_preflightAndReturnError_1, error); + } + + bool loadAndReturnError_(ffi.Pointer> error) { + return _lib._objc_msgSend_183(_id, _lib._sel_loadAndReturnError_1, error); + } + + NSURL? get bundleURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_bundleURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get resourceURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_resourceURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get executableURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_executableURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL URLForAuxiliaryExecutable_(NSString? executableName) { + final _ret = _lib._objc_msgSend_34( + _id, + _lib._sel_URLForAuxiliaryExecutable_1, + executableName?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get privateFrameworksURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_privateFrameworksURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get sharedFrameworksURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_sharedFrameworksURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get sharedSupportURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_sharedSupportURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get builtInPlugInsURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_builtInPlugInsURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL? get appStoreReceiptURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_appStoreReceiptURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSString? get bundlePath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_bundlePath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get resourcePath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_resourcePath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get executablePath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_executablePath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString pathForAuxiliaryExecutable_(NSString? executableName) { + final _ret = _lib._objc_msgSend_56( + _id, + _lib._sel_pathForAuxiliaryExecutable_1, + executableName?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get privateFrameworksPath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_privateFrameworksPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get sharedFrameworksPath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_sharedFrameworksPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get sharedSupportPath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_sharedSupportPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get builtInPlugInsPath { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_builtInPlugInsPath1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + static NSURL URLForResource_withExtension_subdirectory_inBundleWithURL_( + PedometerBindings _lib, + NSString? name, + NSString? ext, + NSString? subpath, + NSURL? bundleURL) { + final _ret = _lib._objc_msgSend_513( + _lib._class_NSBundle1, + _lib._sel_URLForResource_withExtension_subdirectory_inBundleWithURL_1, + name?._id ?? ffi.nullptr, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr, + bundleURL?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + static NSArray URLsForResourcesWithExtension_subdirectory_inBundleWithURL_( + PedometerBindings _lib, + NSString? ext, + NSString? subpath, + NSURL? bundleURL) { + final _ret = _lib._objc_msgSend_514( + _lib._class_NSBundle1, + _lib._sel_URLsForResourcesWithExtension_subdirectory_inBundleWithURL_1, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr, + bundleURL?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSURL URLForResource_withExtension_(NSString? name, NSString? ext) { + final _ret = _lib._objc_msgSend_515( + _id, + _lib._sel_URLForResource_withExtension_1, + name?._id ?? ffi.nullptr, + ext?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL URLForResource_withExtension_subdirectory_( + NSString? name, NSString? ext, NSString? subpath) { + final _ret = _lib._objc_msgSend_516( + _id, + _lib._sel_URLForResource_withExtension_subdirectory_1, + name?._id ?? ffi.nullptr, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSURL URLForResource_withExtension_subdirectory_localization_(NSString? name, + NSString? ext, NSString? subpath, NSString? localizationName) { + final _ret = _lib._objc_msgSend_517( + _id, + _lib._sel_URLForResource_withExtension_subdirectory_localization_1, + name?._id ?? ffi.nullptr, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr, + localizationName?._id ?? ffi.nullptr); + return NSURL._(_ret, _lib, retain: true, release: true); + } + + NSArray URLsForResourcesWithExtension_subdirectory_( + NSString? ext, NSString? subpath) { + final _ret = _lib._objc_msgSend_518( + _id, + _lib._sel_URLsForResourcesWithExtension_subdirectory_1, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray URLsForResourcesWithExtension_subdirectory_localization_( + NSString? ext, NSString? subpath, NSString? localizationName) { + final _ret = _lib._objc_msgSend_519( + _id, + _lib._sel_URLsForResourcesWithExtension_subdirectory_localization_1, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr, + localizationName?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSString pathForResource_ofType_inDirectory_(PedometerBindings _lib, + NSString? name, NSString? ext, NSString? bundlePath) { + final _ret = _lib._objc_msgSend_520( + _lib._class_NSBundle1, + _lib._sel_pathForResource_ofType_inDirectory_1, + name?._id ?? ffi.nullptr, + ext?._id ?? ffi.nullptr, + bundlePath?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSArray pathsForResourcesOfType_inDirectory_( + PedometerBindings _lib, NSString? ext, NSString? bundlePath) { + final _ret = _lib._objc_msgSend_518( + _lib._class_NSBundle1, + _lib._sel_pathsForResourcesOfType_inDirectory_1, + ext?._id ?? ffi.nullptr, + bundlePath?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString pathForResource_ofType_(NSString? name, NSString? ext) { + final _ret = _lib._objc_msgSend_298(_id, _lib._sel_pathForResource_ofType_1, + name?._id ?? ffi.nullptr, ext?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString pathForResource_ofType_inDirectory_forLocalization_(NSString? name, + NSString? ext, NSString? subpath, NSString? localizationName) { + final _ret = _lib._objc_msgSend_521( + _id, + _lib._sel_pathForResource_ofType_inDirectory_forLocalization_1, + name?._id ?? ffi.nullptr, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr, + localizationName?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray pathsForResourcesOfType_inDirectory_forLocalization_( + NSString? ext, NSString? subpath, NSString? localizationName) { + final _ret = _lib._objc_msgSend_519( + _id, + _lib._sel_pathsForResourcesOfType_inDirectory_forLocalization_1, + ext?._id ?? ffi.nullptr, + subpath?._id ?? ffi.nullptr, + localizationName?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString localizedStringForKey_value_table_( + NSString? key, NSString? value, NSString? tableName) { + final _ret = _lib._objc_msgSend_520( + _id, + _lib._sel_localizedStringForKey_value_table_1, + key?._id ?? ffi.nullptr, + value?._id ?? ffi.nullptr, + tableName?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString localizedAttributedStringForKey_value_table_( + NSString? key, NSString? value, NSString? tableName) { + final _ret = _lib._objc_msgSend_542( + _id, + _lib._sel_localizedAttributedStringForKey_value_table_1, + key?._id ?? ffi.nullptr, + value?._id ?? ffi.nullptr, + tableName?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSString? get bundleIdentifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_bundleIdentifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get infoDictionary { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_infoDictionary1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get localizedInfoDictionary { + final _ret = + _lib._objc_msgSend_324(_id, _lib._sel_localizedInfoDictionary1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSObject objectForInfoDictionaryKey_(NSString? key) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_objectForInfoDictionaryKey_1, key?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject classNamed_(NSString? className) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_classNamed_1, className?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject get principalClass { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_principalClass1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSArray? get preferredLocalizations { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_preferredLocalizations1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get localizations { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_localizations1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get developmentLocalization { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_developmentLocalization1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + static NSArray preferredLocalizationsFromArray_( + PedometerBindings _lib, NSArray? localizationsArray) { + final _ret = _lib._objc_msgSend_55( + _lib._class_NSBundle1, + _lib._sel_preferredLocalizationsFromArray_1, + localizationsArray?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSArray preferredLocalizationsFromArray_forPreferences_( + PedometerBindings _lib, + NSArray? localizationsArray, + NSArray? preferencesArray) { + final _ret = _lib._objc_msgSend_543( + _lib._class_NSBundle1, + _lib._sel_preferredLocalizationsFromArray_forPreferences_1, + localizationsArray?._id ?? ffi.nullptr, + preferencesArray?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get executableArchitectures { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_executableArchitectures1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + void setPreservationPriority_forTags_(double priority, NSSet? tags) { + return _lib._objc_msgSend_544( + _id, + _lib._sel_setPreservationPriority_forTags_1, + priority, + tags?._id ?? ffi.nullptr); + } + + double preservationPriorityForTag_(NSString? tag) { + return _lib._objc_msgSend_238( + _id, _lib._sel_preservationPriorityForTag_1, tag?._id ?? ffi.nullptr); + } + + static NSBundle new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSBundle1, _lib._sel_new1); + return NSBundle._(_ret, _lib, retain: false, release: true); + } + + static NSBundle alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSBundle1, _lib._sel_alloc1); + return NSBundle._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSBundle1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSBundle1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSBundle1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSBundle1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSBundle1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSBundle1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSBundle1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSBundle1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSBundle1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSAttributedString extends NSObject { + NSAttributedString._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSAttributedString] that points to the same underlying object as [other]. + static NSAttributedString castFrom(T other) { + return NSAttributedString._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSAttributedString] that wraps the given raw object pointer. + static NSAttributedString castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSAttributedString._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSAttributedString]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSAttributedString1); + } + + NSString? get string { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_string1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSDictionary attributesAtIndex_effectiveRange_( + int location, ffi.Pointer<_NSRange> range) { + final _ret = _lib._objc_msgSend_522( + _id, _lib._sel_attributesAtIndex_effectiveRange_1, location, range); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + int get length { + return _lib._objc_msgSend_10(_id, _lib._sel_length1); + } + + NSObject attribute_atIndex_effectiveRange_( + NSString attrName, int location, ffi.Pointer<_NSRange> range) { + final _ret = _lib._objc_msgSend_523( + _id, + _lib._sel_attribute_atIndex_effectiveRange_1, + attrName._id, + location, + range); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString attributedSubstringFromRange_(_NSRange range) { + final _ret = _lib._objc_msgSend_524( + _id, _lib._sel_attributedSubstringFromRange_1, range); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSDictionary attributesAtIndex_longestEffectiveRange_inRange_( + int location, ffi.Pointer<_NSRange> range, _NSRange rangeLimit) { + final _ret = _lib._objc_msgSend_525( + _id, + _lib._sel_attributesAtIndex_longestEffectiveRange_inRange_1, + location, + range, + rangeLimit); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSObject attribute_atIndex_longestEffectiveRange_inRange_(NSString attrName, + int location, ffi.Pointer<_NSRange> range, _NSRange rangeLimit) { + final _ret = _lib._objc_msgSend_526( + _id, + _lib._sel_attribute_atIndex_longestEffectiveRange_inRange_1, + attrName._id, + location, + range, + rangeLimit); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool isEqualToAttributedString_(NSAttributedString? other) { + return _lib._objc_msgSend_527( + _id, _lib._sel_isEqualToAttributedString_1, other?._id ?? ffi.nullptr); + } + + NSAttributedString initWithString_(NSString? str) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithString_1, str?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString initWithString_attributes_( + NSString? str, NSDictionary? attrs) { + final _ret = _lib._objc_msgSend_332( + _id, + _lib._sel_initWithString_attributes_1, + str?._id ?? ffi.nullptr, + attrs?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString initWithAttributedString_(NSAttributedString? attrStr) { + final _ret = _lib._objc_msgSend_528( + _id, _lib._sel_initWithAttributedString_1, attrStr?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + void enumerateAttributesInRange_options_usingBlock_( + _NSRange enumerationRange, int opts, ObjCBlock31 block) { + return _lib._objc_msgSend_529( + _id, + _lib._sel_enumerateAttributesInRange_options_usingBlock_1, + enumerationRange, + opts, + block._id); + } + + void enumerateAttribute_inRange_options_usingBlock_(NSString attrName, + _NSRange enumerationRange, int opts, ObjCBlock32 block) { + return _lib._objc_msgSend_530( + _id, + _lib._sel_enumerateAttribute_inRange_options_usingBlock_1, + attrName._id, + enumerationRange, + opts, + block._id); + } + + NSAttributedString initWithContentsOfMarkdownFileAtURL_options_baseURL_error_( + NSURL? markdownFile, + NSAttributedStringMarkdownParsingOptions? options, + NSURL? baseURL, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_535( + _id, + _lib._sel_initWithContentsOfMarkdownFileAtURL_options_baseURL_error_1, + markdownFile?._id ?? ffi.nullptr, + options?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr, + error); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString initWithMarkdown_options_baseURL_error_( + NSData? markdown, + NSAttributedStringMarkdownParsingOptions? options, + NSURL? baseURL, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_536( + _id, + _lib._sel_initWithMarkdown_options_baseURL_error_1, + markdown?._id ?? ffi.nullptr, + options?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr, + error); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString initWithMarkdownString_options_baseURL_error_( + NSString? markdownString, + NSAttributedStringMarkdownParsingOptions? options, + NSURL? baseURL, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_537( + _id, + _lib._sel_initWithMarkdownString_options_baseURL_error_1, + markdownString?._id ?? ffi.nullptr, + options?._id ?? ffi.nullptr, + baseURL?._id ?? ffi.nullptr, + error); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + /// Formats the string using the specified locale (or the canonical one, if nil). + NSAttributedString initWithFormat_options_locale_( + NSAttributedString? format, int options, NSLocale? locale) { + final _ret = _lib._objc_msgSend_538( + _id, + _lib._sel_initWithFormat_options_locale_1, + format?._id ?? ffi.nullptr, + options, + locale?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + /// Formats the string using the arguments list and the specified locale (or the canonical one, if nil). + NSAttributedString initWithFormat_options_locale_arguments_( + NSAttributedString? format, + int options, + NSLocale? locale, + ffi.Pointer arguments) { + final _ret = _lib._objc_msgSend_539( + _id, + _lib._sel_initWithFormat_options_locale_arguments_1, + format?._id ?? ffi.nullptr, + options, + locale?._id ?? ffi.nullptr, + arguments); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + /// Formats the string using the current locale and default options. + static NSAttributedString localizedAttributedStringWithFormat_( + PedometerBindings _lib, NSAttributedString? format) { + final _ret = _lib._objc_msgSend_528( + _lib._class_NSAttributedString1, + _lib._sel_localizedAttributedStringWithFormat_1, + format?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + /// Formats the string using the current locale and the specified options. + static NSAttributedString localizedAttributedStringWithFormat_options_( + PedometerBindings _lib, NSAttributedString? format, int options) { + final _ret = _lib._objc_msgSend_540( + _lib._class_NSAttributedString1, + _lib._sel_localizedAttributedStringWithFormat_options_1, + format?._id ?? ffi.nullptr, + options); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + /// If the string has portions tagged with NSInflectionRuleAttributeName + /// that have no format specifiers, create a new string with those portions inflected + /// by following the rule in the attribute. + NSAttributedString attributedStringByInflectingString() { + final _ret = _lib._objc_msgSend_541( + _id, _lib._sel_attributedStringByInflectingString1); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + static NSAttributedString new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSAttributedString1, _lib._sel_new1); + return NSAttributedString._(_ret, _lib, retain: false, release: true); + } + + static NSAttributedString alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSAttributedString1, _lib._sel_alloc1); + return NSAttributedString._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSAttributedString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSAttributedString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSAttributedString1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSAttributedString1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSAttributedString1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSAttributedString1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSAttributedString1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSAttributedString1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSAttributedString1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSAttributedStringEnumerationOptions { + static const int NSAttributedStringEnumerationReverse = 2; + static const int + NSAttributedStringEnumerationLongestEffectiveRangeNotRequired = 1048576; +} + +void _ObjCBlock31_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock31_closureRegistry = {}; +int _ObjCBlock31_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock31_registerClosure(Function fn) { + final id = ++_ObjCBlock31_closureRegistryIndex; + _ObjCBlock31_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock31_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return _ObjCBlock31_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock31 extends _ObjCBlockBase { + ObjCBlock31._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock31.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>( + _ObjCBlock31_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock31.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>( + _ObjCBlock31_closureTrampoline) + .cast(), + _ObjCBlock31_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock32_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock32_closureRegistry = {}; +int _ObjCBlock32_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock32_registerClosure(Function fn) { + final id = ++_ObjCBlock32_closureRegistryIndex; + _ObjCBlock32_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock32_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return _ObjCBlock32_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock32 extends _ObjCBlockBase { + ObjCBlock32._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock32.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>( + _ObjCBlock32_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock32.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, _NSRange arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>( + _ObjCBlock32_closureTrampoline) + .cast(), + _ObjCBlock32_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, _NSRange arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + _NSRange arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSAttributedStringMarkdownParsingOptions extends NSObject { + NSAttributedStringMarkdownParsingOptions._( + ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSAttributedStringMarkdownParsingOptions] that points to the same underlying object as [other]. + static NSAttributedStringMarkdownParsingOptions + castFrom(T other) { + return NSAttributedStringMarkdownParsingOptions._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSAttributedStringMarkdownParsingOptions] that wraps the given raw object pointer. + static NSAttributedStringMarkdownParsingOptions castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSAttributedStringMarkdownParsingOptions._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSAttributedStringMarkdownParsingOptions]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSAttributedStringMarkdownParsingOptions1); + } + + @override + NSAttributedStringMarkdownParsingOptions init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSAttributedStringMarkdownParsingOptions._(_ret, _lib, + retain: true, release: true); + } + + bool get allowsExtendedAttributes { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsExtendedAttributes1); + } + + set allowsExtendedAttributes(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setAllowsExtendedAttributes_1, value); + } + + int get interpretedSyntax { + return _lib._objc_msgSend_531(_id, _lib._sel_interpretedSyntax1); + } + + set interpretedSyntax(int value) { + _lib._objc_msgSend_532(_id, _lib._sel_setInterpretedSyntax_1, value); + } + + int get failurePolicy { + return _lib._objc_msgSend_533(_id, _lib._sel_failurePolicy1); + } + + set failurePolicy(int value) { + _lib._objc_msgSend_534(_id, _lib._sel_setFailurePolicy_1, value); + } + + NSString? get languageCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_languageCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set languageCode(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setLanguageCode_1, value?._id ?? ffi.nullptr); + } + + bool get appliesSourcePositionAttributes { + return _lib._objc_msgSend_12( + _id, _lib._sel_appliesSourcePositionAttributes1); + } + + set appliesSourcePositionAttributes(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAppliesSourcePositionAttributes_1, value); + } + + static NSAttributedStringMarkdownParsingOptions new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSAttributedStringMarkdownParsingOptions1, _lib._sel_new1); + return NSAttributedStringMarkdownParsingOptions._(_ret, _lib, + retain: false, release: true); + } + + static NSAttributedStringMarkdownParsingOptions alloc( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_alloc1); + return NSAttributedStringMarkdownParsingOptions._(_ret, _lib, + retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, + aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSAttributedStringMarkdownParsingOptions1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSAttributedStringMarkdownInterpretedSyntax { + static const int NSAttributedStringMarkdownInterpretedSyntaxFull = 0; + static const int NSAttributedStringMarkdownInterpretedSyntaxInlineOnly = 1; + static const int + NSAttributedStringMarkdownInterpretedSyntaxInlineOnlyPreservingWhitespace = + 2; +} + +abstract class NSAttributedStringMarkdownParsingFailurePolicy { + static const int NSAttributedStringMarkdownParsingFailureReturnError = 0; + static const int + NSAttributedStringMarkdownParsingFailureReturnPartiallyParsedIfPossible = + 1; +} + +abstract class NSAttributedStringFormattingOptions { + static const int + NSAttributedStringFormattingInsertArgumentAttributesWithoutMerging = 1; + static const int NSAttributedStringFormattingApplyReplacementIndexAttribute = + 2; +} + +class NSMutableAttributedString extends NSAttributedString { + NSMutableAttributedString._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableAttributedString] that points to the same underlying object as [other]. + static NSMutableAttributedString castFrom(T other) { + return NSMutableAttributedString._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMutableAttributedString] that wraps the given raw object pointer. + static NSMutableAttributedString castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableAttributedString._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableAttributedString]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMutableAttributedString1); + } + + void replaceCharactersInRange_withString_(_NSRange range, NSString? str) { + return _lib._objc_msgSend_504( + _id, + _lib._sel_replaceCharactersInRange_withString_1, + range, + str?._id ?? ffi.nullptr); + } + + void setAttributes_range_(NSDictionary? attrs, _NSRange range) { + return _lib._objc_msgSend_545( + _id, _lib._sel_setAttributes_range_1, attrs?._id ?? ffi.nullptr, range); + } + + NSMutableString? get mutableString { + final _ret = _lib._objc_msgSend_546(_id, _lib._sel_mutableString1); + return _ret.address == 0 + ? null + : NSMutableString._(_ret, _lib, retain: true, release: true); + } + + void addAttribute_value_range_( + NSString name, NSObject value, _NSRange range) { + return _lib._objc_msgSend_547( + _id, _lib._sel_addAttribute_value_range_1, name._id, value._id, range); + } + + void addAttributes_range_(NSDictionary? attrs, _NSRange range) { + return _lib._objc_msgSend_545( + _id, _lib._sel_addAttributes_range_1, attrs?._id ?? ffi.nullptr, range); + } + + void removeAttribute_range_(NSString name, _NSRange range) { + return _lib._objc_msgSend_548( + _id, _lib._sel_removeAttribute_range_1, name._id, range); + } + + void replaceCharactersInRange_withAttributedString_( + _NSRange range, NSAttributedString? attrString) { + return _lib._objc_msgSend_549( + _id, + _lib._sel_replaceCharactersInRange_withAttributedString_1, + range, + attrString?._id ?? ffi.nullptr); + } + + void insertAttributedString_atIndex_( + NSAttributedString? attrString, int loc) { + return _lib._objc_msgSend_550( + _id, + _lib._sel_insertAttributedString_atIndex_1, + attrString?._id ?? ffi.nullptr, + loc); + } + + void appendAttributedString_(NSAttributedString? attrString) { + return _lib._objc_msgSend_551(_id, _lib._sel_appendAttributedString_1, + attrString?._id ?? ffi.nullptr); + } + + void deleteCharactersInRange_(_NSRange range) { + return _lib._objc_msgSend_407( + _id, _lib._sel_deleteCharactersInRange_1, range); + } + + void setAttributedString_(NSAttributedString? attrString) { + return _lib._objc_msgSend_551( + _id, _lib._sel_setAttributedString_1, attrString?._id ?? ffi.nullptr); + } + + void beginEditing() { + return _lib._objc_msgSend_1(_id, _lib._sel_beginEditing1); + } + + void endEditing() { + return _lib._objc_msgSend_1(_id, _lib._sel_endEditing1); + } + + /// Formats the specified string and arguments with the current locale, + /// then appends the result to the receiver. + void appendLocalizedFormat_(NSAttributedString? format) { + return _lib._objc_msgSend_551( + _id, _lib._sel_appendLocalizedFormat_1, format?._id ?? ffi.nullptr); + } + + /// Formats the string using the current locale and default options. + static NSMutableAttributedString localizedAttributedStringWithFormat_( + PedometerBindings _lib, NSAttributedString? format) { + final _ret = _lib._objc_msgSend_528( + _lib._class_NSMutableAttributedString1, + _lib._sel_localizedAttributedStringWithFormat_1, + format?._id ?? ffi.nullptr); + return NSMutableAttributedString._(_ret, _lib, retain: true, release: true); + } + + /// Formats the string using the current locale and the specified options. + static NSMutableAttributedString localizedAttributedStringWithFormat_options_( + PedometerBindings _lib, NSAttributedString? format, int options) { + final _ret = _lib._objc_msgSend_540( + _lib._class_NSMutableAttributedString1, + _lib._sel_localizedAttributedStringWithFormat_options_1, + format?._id ?? ffi.nullptr, + options); + return NSMutableAttributedString._(_ret, _lib, retain: true, release: true); + } + + static NSMutableAttributedString new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableAttributedString1, _lib._sel_new1); + return NSMutableAttributedString._(_ret, _lib, + retain: false, release: true); + } + + static NSMutableAttributedString alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableAttributedString1, _lib._sel_alloc1); + return NSMutableAttributedString._(_ret, _lib, + retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableAttributedString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableAttributedString1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMutableAttributedString1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableAttributedString1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableAttributedString1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableAttributedString1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableAttributedString1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMutableAttributedString1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSMutableAttributedString1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSDateFormatter extends NSFormatter { + NSDateFormatter._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSDateFormatter] that points to the same underlying object as [other]. + static NSDateFormatter castFrom(T other) { + return NSDateFormatter._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSDateFormatter] that wraps the given raw object pointer. + static NSDateFormatter castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSDateFormatter._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSDateFormatter]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSDateFormatter1); + } + + int get formattingContext { + return _lib._objc_msgSend_556(_id, _lib._sel_formattingContext1); + } + + set formattingContext(int value) { + _lib._objc_msgSend_557(_id, _lib._sel_setFormattingContext_1, value); + } + + bool getObjectValue_forString_range_error_( + ffi.Pointer> obj, + NSString? string, + ffi.Pointer<_NSRange> rangep, + ffi.Pointer> error) { + return _lib._objc_msgSend_558( + _id, + _lib._sel_getObjectValue_forString_range_error_1, + obj, + string?._id ?? ffi.nullptr, + rangep, + error); + } + + NSString stringFromDate_(NSDate? date) { + final _ret = _lib._objc_msgSend_559( + _id, _lib._sel_stringFromDate_1, date?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSDate dateFromString_(NSString? string) { + final _ret = _lib._objc_msgSend_560( + _id, _lib._sel_dateFromString_1, string?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSString localizedStringFromDate_dateStyle_timeStyle_( + PedometerBindings _lib, NSDate? date, int dstyle, int tstyle) { + final _ret = _lib._objc_msgSend_561( + _lib._class_NSDateFormatter1, + _lib._sel_localizedStringFromDate_dateStyle_timeStyle_1, + date?._id ?? ffi.nullptr, + dstyle, + tstyle); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString dateFormatFromTemplate_options_locale_( + PedometerBindings _lib, NSString? tmplate, int opts, NSLocale? locale) { + final _ret = _lib._objc_msgSend_562( + _lib._class_NSDateFormatter1, + _lib._sel_dateFormatFromTemplate_options_locale_1, + tmplate?._id ?? ffi.nullptr, + opts, + locale?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int getDefaultFormatterBehavior(PedometerBindings _lib) { + return _lib._objc_msgSend_563( + _lib._class_NSDateFormatter1, _lib._sel_defaultFormatterBehavior1); + } + + static void setDefaultFormatterBehavior(PedometerBindings _lib, int value) { + _lib._objc_msgSend_564(_lib._class_NSDateFormatter1, + _lib._sel_setDefaultFormatterBehavior_1, value); + } + + void setLocalizedDateFormatFromTemplate_(NSString? dateFormatTemplate) { + return _lib._objc_msgSend_188( + _id, + _lib._sel_setLocalizedDateFormatFromTemplate_1, + dateFormatTemplate?._id ?? ffi.nullptr); + } + + NSString? get dateFormat { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_dateFormat1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set dateFormat(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setDateFormat_1, value?._id ?? ffi.nullptr); + } + + int get dateStyle { + return _lib._objc_msgSend_565(_id, _lib._sel_dateStyle1); + } + + set dateStyle(int value) { + _lib._objc_msgSend_566(_id, _lib._sel_setDateStyle_1, value); + } + + int get timeStyle { + return _lib._objc_msgSend_565(_id, _lib._sel_timeStyle1); + } + + set timeStyle(int value) { + _lib._objc_msgSend_566(_id, _lib._sel_setTimeStyle_1, value); + } + + NSLocale? get locale { + final _ret = _lib._objc_msgSend_273(_id, _lib._sel_locale1); + return _ret.address == 0 + ? null + : NSLocale._(_ret, _lib, retain: true, release: true); + } + + set locale(NSLocale? value) { + _lib._objc_msgSend_567( + _id, _lib._sel_setLocale_1, value?._id ?? ffi.nullptr); + } + + bool get generatesCalendarDates { + return _lib._objc_msgSend_12(_id, _lib._sel_generatesCalendarDates1); + } + + set generatesCalendarDates(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setGeneratesCalendarDates_1, value); + } + + int get formatterBehavior { + return _lib._objc_msgSend_563(_id, _lib._sel_formatterBehavior1); + } + + set formatterBehavior(int value) { + _lib._objc_msgSend_564(_id, _lib._sel_setFormatterBehavior_1, value); + } + + NSTimeZone? get timeZone { + final _ret = _lib._objc_msgSend_569(_id, _lib._sel_timeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + set timeZone(NSTimeZone? value) { + _lib._objc_msgSend_570( + _id, _lib._sel_setTimeZone_1, value?._id ?? ffi.nullptr); + } + + NSCalendar? get calendar { + final _ret = _lib._objc_msgSend_576(_id, _lib._sel_calendar1); + return _ret.address == 0 + ? null + : NSCalendar._(_ret, _lib, retain: true, release: true); + } + + set calendar(NSCalendar? value) { + _lib._objc_msgSend_582( + _id, _lib._sel_setCalendar_1, value?._id ?? ffi.nullptr); + } + + bool get lenient { + return _lib._objc_msgSend_12(_id, _lib._sel_isLenient1); + } + + set lenient(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setLenient_1, value); + } + + NSDate? get twoDigitStartDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_twoDigitStartDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + set twoDigitStartDate(NSDate? value) { + _lib._objc_msgSend_608( + _id, _lib._sel_setTwoDigitStartDate_1, value?._id ?? ffi.nullptr); + } + + NSDate? get defaultDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_defaultDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + set defaultDate(NSDate? value) { + _lib._objc_msgSend_608( + _id, _lib._sel_setDefaultDate_1, value?._id ?? ffi.nullptr); + } + + NSArray? get eraSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_eraSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set eraSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setEraSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get monthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_monthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set monthSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setMonthSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get shortMonthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_shortMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set shortMonthSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setShortMonthSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get weekdaySymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_weekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set weekdaySymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setWeekdaySymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get shortWeekdaySymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_shortWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set shortWeekdaySymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setShortWeekdaySymbols_1, value?._id ?? ffi.nullptr); + } + + NSString? get AMSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_AMSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set AMSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setAMSymbol_1, value?._id ?? ffi.nullptr); + } + + NSString? get PMSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_PMSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set PMSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPMSymbol_1, value?._id ?? ffi.nullptr); + } + + NSArray? get longEraSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_longEraSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set longEraSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setLongEraSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get veryShortMonthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_veryShortMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set veryShortMonthSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setVeryShortMonthSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get standaloneMonthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_standaloneMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set standaloneMonthSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setStandaloneMonthSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get shortStandaloneMonthSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_shortStandaloneMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set shortStandaloneMonthSymbols(NSArray? value) { + _lib._objc_msgSend_609(_id, _lib._sel_setShortStandaloneMonthSymbols_1, + value?._id ?? ffi.nullptr); + } + + NSArray? get veryShortStandaloneMonthSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_veryShortStandaloneMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set veryShortStandaloneMonthSymbols(NSArray? value) { + _lib._objc_msgSend_609(_id, _lib._sel_setVeryShortStandaloneMonthSymbols_1, + value?._id ?? ffi.nullptr); + } + + NSArray? get veryShortWeekdaySymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_veryShortWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set veryShortWeekdaySymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setVeryShortWeekdaySymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get standaloneWeekdaySymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_standaloneWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set standaloneWeekdaySymbols(NSArray? value) { + _lib._objc_msgSend_609(_id, _lib._sel_setStandaloneWeekdaySymbols_1, + value?._id ?? ffi.nullptr); + } + + NSArray? get shortStandaloneWeekdaySymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_shortStandaloneWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set shortStandaloneWeekdaySymbols(NSArray? value) { + _lib._objc_msgSend_609(_id, _lib._sel_setShortStandaloneWeekdaySymbols_1, + value?._id ?? ffi.nullptr); + } + + NSArray? get veryShortStandaloneWeekdaySymbols { + final _ret = _lib._objc_msgSend_71( + _id, _lib._sel_veryShortStandaloneWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set veryShortStandaloneWeekdaySymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, + _lib._sel_setVeryShortStandaloneWeekdaySymbols_1, + value?._id ?? ffi.nullptr); + } + + NSArray? get quarterSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_quarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set quarterSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setQuarterSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get shortQuarterSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_shortQuarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set shortQuarterSymbols(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setShortQuarterSymbols_1, value?._id ?? ffi.nullptr); + } + + NSArray? get standaloneQuarterSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_standaloneQuarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set standaloneQuarterSymbols(NSArray? value) { + _lib._objc_msgSend_609(_id, _lib._sel_setStandaloneQuarterSymbols_1, + value?._id ?? ffi.nullptr); + } + + NSArray? get shortStandaloneQuarterSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_shortStandaloneQuarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set shortStandaloneQuarterSymbols(NSArray? value) { + _lib._objc_msgSend_609(_id, _lib._sel_setShortStandaloneQuarterSymbols_1, + value?._id ?? ffi.nullptr); + } + + NSDate? get gregorianStartDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_gregorianStartDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + set gregorianStartDate(NSDate? value) { + _lib._objc_msgSend_608( + _id, _lib._sel_setGregorianStartDate_1, value?._id ?? ffi.nullptr); + } + + bool get doesRelativeDateFormatting { + return _lib._objc_msgSend_12(_id, _lib._sel_doesRelativeDateFormatting1); + } + + set doesRelativeDateFormatting(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setDoesRelativeDateFormatting_1, value); + } + + NSObject initWithDateFormat_allowNaturalLanguage_( + NSString? format, bool flag) { + final _ret = _lib._objc_msgSend_29( + _id, + _lib._sel_initWithDateFormat_allowNaturalLanguage_1, + format?._id ?? ffi.nullptr, + flag); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool allowsNaturalLanguage() { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsNaturalLanguage1); + } + + static NSDateFormatter new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDateFormatter1, _lib._sel_new1); + return NSDateFormatter._(_ret, _lib, retain: false, release: true); + } + + static NSDateFormatter alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDateFormatter1, _lib._sel_alloc1); + return NSDateFormatter._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSDateFormatter1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSDateFormatter1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSDateFormatter1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDateFormatter1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSDateFormatter1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSDateFormatter1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSDateFormatter1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSDateFormatter1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSDateFormatter1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSFormatter extends NSObject { + NSFormatter._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSFormatter] that points to the same underlying object as [other]. + static NSFormatter castFrom(T other) { + return NSFormatter._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSFormatter] that wraps the given raw object pointer. + static NSFormatter castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSFormatter._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSFormatter]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSFormatter1); + } + + NSString stringForObjectValue_(NSObject obj) { + final _ret = + _lib._objc_msgSend_57(_id, _lib._sel_stringForObjectValue_1, obj._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSAttributedString attributedStringForObjectValue_withDefaultAttributes_( + NSObject obj, NSDictionary? attrs) { + final _ret = _lib._objc_msgSend_552( + _id, + _lib._sel_attributedStringForObjectValue_withDefaultAttributes_1, + obj._id, + attrs?._id ?? ffi.nullptr); + return NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + NSString editingStringForObjectValue_(NSObject obj) { + final _ret = _lib._objc_msgSend_57( + _id, _lib._sel_editingStringForObjectValue_1, obj._id); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool getObjectValue_forString_errorDescription_( + ffi.Pointer> obj, + NSString? string, + ffi.Pointer> error) { + return _lib._objc_msgSend_553( + _id, + _lib._sel_getObjectValue_forString_errorDescription_1, + obj, + string?._id ?? ffi.nullptr, + error); + } + + bool isPartialStringValid_newEditingString_errorDescription_( + NSString? partialString, + ffi.Pointer> newString, + ffi.Pointer> error) { + return _lib._objc_msgSend_554( + _id, + _lib._sel_isPartialStringValid_newEditingString_errorDescription_1, + partialString?._id ?? ffi.nullptr, + newString, + error); + } + + bool + isPartialStringValid_proposedSelectedRange_originalString_originalSelectedRange_errorDescription_( + ffi.Pointer> partialStringPtr, + ffi.Pointer<_NSRange> proposedSelRangePtr, + NSString? origString, + _NSRange origSelRange, + ffi.Pointer> error) { + return _lib._objc_msgSend_555( + _id, + _lib._sel_isPartialStringValid_proposedSelectedRange_originalString_originalSelectedRange_errorDescription_1, + partialStringPtr, + proposedSelRangePtr, + origString?._id ?? ffi.nullptr, + origSelRange, + error); + } + + static NSFormatter new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSFormatter1, _lib._sel_new1); + return NSFormatter._(_ret, _lib, retain: false, release: true); + } + + static NSFormatter alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFormatter1, _lib._sel_alloc1); + return NSFormatter._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSFormatter1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSFormatter1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFormatter1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFormatter1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSFormatter1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSFormatter1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSFormatter1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSFormatter1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSFormatter1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSFormattingContext { + static const int NSFormattingContextUnknown = 0; + static const int NSFormattingContextDynamic = 1; + static const int NSFormattingContextStandalone = 2; + static const int NSFormattingContextListItem = 3; + static const int NSFormattingContextBeginningOfSentence = 4; + static const int NSFormattingContextMiddleOfSentence = 5; +} + +abstract class NSDateFormatterStyle { + static const int NSDateFormatterNoStyle = 0; + static const int NSDateFormatterShortStyle = 1; + static const int NSDateFormatterMediumStyle = 2; + static const int NSDateFormatterLongStyle = 3; + static const int NSDateFormatterFullStyle = 4; +} + +abstract class NSDateFormatterBehavior { + static const int NSDateFormatterBehaviorDefault = 0; + static const int NSDateFormatterBehavior10_0 = 1000; + static const int NSDateFormatterBehavior10_4 = 1040; +} + +class NSTimeZone extends NSObject { + NSTimeZone._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSTimeZone] that points to the same underlying object as [other]. + static NSTimeZone castFrom(T other) { + return NSTimeZone._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSTimeZone] that wraps the given raw object pointer. + static NSTimeZone castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSTimeZone._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSTimeZone]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSTimeZone1); + } + + NSString? get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSData? get data { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_data1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + int secondsFromGMTForDate_(NSDate? aDate) { + return _lib._objc_msgSend_568( + _id, _lib._sel_secondsFromGMTForDate_1, aDate?._id ?? ffi.nullptr); + } + + NSString abbreviationForDate_(NSDate? aDate) { + final _ret = _lib._objc_msgSend_559( + _id, _lib._sel_abbreviationForDate_1, aDate?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + bool isDaylightSavingTimeForDate_(NSDate? aDate) { + return _lib._objc_msgSend_152(_id, _lib._sel_isDaylightSavingTimeForDate_1, + aDate?._id ?? ffi.nullptr); + } + + double daylightSavingTimeOffsetForDate_(NSDate? aDate) { + return _lib._objc_msgSend_149(_id, + _lib._sel_daylightSavingTimeOffsetForDate_1, aDate?._id ?? ffi.nullptr); + } + + NSDate nextDaylightSavingTimeTransitionAfterDate_(NSDate? aDate) { + final _ret = _lib._objc_msgSend_150( + _id, + _lib._sel_nextDaylightSavingTimeTransitionAfterDate_1, + aDate?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + static NSTimeZone? getSystemTimeZone(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_569( + _lib._class_NSTimeZone1, _lib._sel_systemTimeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static void resetSystemTimeZone(PedometerBindings _lib) { + return _lib._objc_msgSend_1( + _lib._class_NSTimeZone1, _lib._sel_resetSystemTimeZone1); + } + + static NSTimeZone? getDefaultTimeZone(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_569( + _lib._class_NSTimeZone1, _lib._sel_defaultTimeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static void setDefaultTimeZone(PedometerBindings _lib, NSTimeZone? value) { + _lib._objc_msgSend_570(_lib._class_NSTimeZone1, + _lib._sel_setDefaultTimeZone_1, value?._id ?? ffi.nullptr); + } + + static NSTimeZone? getLocalTimeZone(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_569( + _lib._class_NSTimeZone1, _lib._sel_localTimeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static NSArray? getKnownTimeZoneNames(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSTimeZone1, _lib._sel_knownTimeZoneNames1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSDictionary? getAbbreviationDictionary(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_324( + _lib._class_NSTimeZone1, _lib._sel_abbreviationDictionary1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static void setAbbreviationDictionary( + PedometerBindings _lib, NSDictionary? value) { + _lib._objc_msgSend_571(_lib._class_NSTimeZone1, + _lib._sel_setAbbreviationDictionary_1, value?._id ?? ffi.nullptr); + } + + static NSString? getTimeZoneDataVersion(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_20( + _lib._class_NSTimeZone1, _lib._sel_timeZoneDataVersion1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get secondsFromGMT { + return _lib._objc_msgSend_70(_id, _lib._sel_secondsFromGMT1); + } + + NSString? get abbreviation { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_abbreviation1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + bool get daylightSavingTime { + return _lib._objc_msgSend_12(_id, _lib._sel_isDaylightSavingTime1); + } + + double get daylightSavingTimeOffset { + return _lib._objc_msgSend_147(_id, _lib._sel_daylightSavingTimeOffset1); + } + + NSDate? get nextDaylightSavingTimeTransition { + final _ret = _lib._objc_msgSend_154( + _id, _lib._sel_nextDaylightSavingTimeTransition1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + NSString? get description { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_description1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + bool isEqualToTimeZone_(NSTimeZone? aTimeZone) { + return _lib._objc_msgSend_572( + _id, _lib._sel_isEqualToTimeZone_1, aTimeZone?._id ?? ffi.nullptr); + } + + NSString localizedName_locale_(int style, NSLocale? locale) { + final _ret = _lib._objc_msgSend_573(_id, _lib._sel_localizedName_locale_1, + style, locale?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSTimeZone timeZoneWithName_( + PedometerBindings _lib, NSString? tzName) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSTimeZone1, + _lib._sel_timeZoneWithName_1, tzName?._id ?? ffi.nullptr); + return NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static NSTimeZone timeZoneWithName_data_( + PedometerBindings _lib, NSString? tzName, NSData? aData) { + final _ret = _lib._objc_msgSend_574( + _lib._class_NSTimeZone1, + _lib._sel_timeZoneWithName_data_1, + tzName?._id ?? ffi.nullptr, + aData?._id ?? ffi.nullptr); + return NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + NSTimeZone initWithName_(NSString? tzName) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithName_1, tzName?._id ?? ffi.nullptr); + return NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + NSTimeZone initWithName_data_(NSString? tzName, NSData? aData) { + final _ret = _lib._objc_msgSend_574(_id, _lib._sel_initWithName_data_1, + tzName?._id ?? ffi.nullptr, aData?._id ?? ffi.nullptr); + return NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static NSTimeZone timeZoneForSecondsFromGMT_( + PedometerBindings _lib, int seconds) { + final _ret = _lib._objc_msgSend_575(_lib._class_NSTimeZone1, + _lib._sel_timeZoneForSecondsFromGMT_1, seconds); + return NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static NSTimeZone timeZoneWithAbbreviation_( + PedometerBindings _lib, NSString? abbreviation) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSTimeZone1, + _lib._sel_timeZoneWithAbbreviation_1, abbreviation?._id ?? ffi.nullptr); + return NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + static NSTimeZone new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSTimeZone1, _lib._sel_new1); + return NSTimeZone._(_ret, _lib, retain: false, release: true); + } + + static NSTimeZone alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSTimeZone1, _lib._sel_alloc1); + return NSTimeZone._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSTimeZone1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSTimeZone1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSTimeZone1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSTimeZone1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSTimeZone1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSTimeZone1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSTimeZone1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSTimeZone1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSTimeZone1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSTimeZoneNameStyle { + static const int NSTimeZoneNameStyleStandard = 0; + static const int NSTimeZoneNameStyleShortStandard = 1; + static const int NSTimeZoneNameStyleDaylightSaving = 2; + static const int NSTimeZoneNameStyleShortDaylightSaving = 3; + static const int NSTimeZoneNameStyleGeneric = 4; + static const int NSTimeZoneNameStyleShortGeneric = 5; +} + +class NSCalendar extends NSObject { + NSCalendar._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSCalendar] that points to the same underlying object as [other]. + static NSCalendar castFrom(T other) { + return NSCalendar._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSCalendar] that wraps the given raw object pointer. + static NSCalendar castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSCalendar._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSCalendar]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSCalendar1); + } + + static NSCalendar? getCurrentCalendar(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_576( + _lib._class_NSCalendar1, _lib._sel_currentCalendar1); + return _ret.address == 0 + ? null + : NSCalendar._(_ret, _lib, retain: true, release: true); + } + + static NSCalendar? getAutoupdatingCurrentCalendar(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_576( + _lib._class_NSCalendar1, _lib._sel_autoupdatingCurrentCalendar1); + return _ret.address == 0 + ? null + : NSCalendar._(_ret, _lib, retain: true, release: true); + } + + static NSCalendar calendarWithIdentifier_( + PedometerBindings _lib, NSString calendarIdentifierConstant) { + final _ret = _lib._objc_msgSend_577(_lib._class_NSCalendar1, + _lib._sel_calendarWithIdentifier_1, calendarIdentifierConstant._id); + return NSCalendar._(_ret, _lib, retain: true, release: true); + } + + @override + NSCalendar init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSCalendar._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithCalendarIdentifier_(NSString ident) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithCalendarIdentifier_1, ident._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSString get calendarIdentifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_calendarIdentifier1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSLocale? get locale { + final _ret = _lib._objc_msgSend_273(_id, _lib._sel_locale1); + return _ret.address == 0 + ? null + : NSLocale._(_ret, _lib, retain: true, release: true); + } + + set locale(NSLocale? value) { + _lib._objc_msgSend_567( + _id, _lib._sel_setLocale_1, value?._id ?? ffi.nullptr); + } + + NSTimeZone? get timeZone { + final _ret = _lib._objc_msgSend_569(_id, _lib._sel_timeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + set timeZone(NSTimeZone? value) { + _lib._objc_msgSend_570( + _id, _lib._sel_setTimeZone_1, value?._id ?? ffi.nullptr); + } + + int get firstWeekday { + return _lib._objc_msgSend_10(_id, _lib._sel_firstWeekday1); + } + + set firstWeekday(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setFirstWeekday_1, value); + } + + int get minimumDaysInFirstWeek { + return _lib._objc_msgSend_10(_id, _lib._sel_minimumDaysInFirstWeek1); + } + + set minimumDaysInFirstWeek(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMinimumDaysInFirstWeek_1, value); + } + + NSArray? get eraSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_eraSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get longEraSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_longEraSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get monthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_monthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get shortMonthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_shortMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get veryShortMonthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_veryShortMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get standaloneMonthSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_standaloneMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get shortStandaloneMonthSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_shortStandaloneMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get veryShortStandaloneMonthSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_veryShortStandaloneMonthSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get weekdaySymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_weekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get shortWeekdaySymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_shortWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get veryShortWeekdaySymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_veryShortWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get standaloneWeekdaySymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_standaloneWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get shortStandaloneWeekdaySymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_shortStandaloneWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get veryShortStandaloneWeekdaySymbols { + final _ret = _lib._objc_msgSend_71( + _id, _lib._sel_veryShortStandaloneWeekdaySymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get quarterSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_quarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get shortQuarterSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_shortQuarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get standaloneQuarterSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_standaloneQuarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get shortStandaloneQuarterSymbols { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_shortStandaloneQuarterSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get AMSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_AMSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get PMSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_PMSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + _NSRange minimumRangeOfUnit_(int unit) { + return _lib._objc_msgSend_578(_id, _lib._sel_minimumRangeOfUnit_1, unit); + } + + _NSRange maximumRangeOfUnit_(int unit) { + return _lib._objc_msgSend_578(_id, _lib._sel_maximumRangeOfUnit_1, unit); + } + + _NSRange rangeOfUnit_inUnit_forDate_(int smaller, int larger, NSDate? date) { + return _lib._objc_msgSend_579(_id, _lib._sel_rangeOfUnit_inUnit_forDate_1, + smaller, larger, date?._id ?? ffi.nullptr); + } + + int ordinalityOfUnit_inUnit_forDate_(int smaller, int larger, NSDate? date) { + return _lib._objc_msgSend_580( + _id, + _lib._sel_ordinalityOfUnit_inUnit_forDate_1, + smaller, + larger, + date?._id ?? ffi.nullptr); + } + + bool rangeOfUnit_startDate_interval_forDate_( + int unit, + ffi.Pointer> datep, + ffi.Pointer tip, + NSDate? date) { + return _lib._objc_msgSend_581( + _id, + _lib._sel_rangeOfUnit_startDate_interval_forDate_1, + unit, + datep, + tip, + date?._id ?? ffi.nullptr); + } + + NSDate dateFromComponents_(NSDateComponents? comps) { + final _ret = _lib._objc_msgSend_587( + _id, _lib._sel_dateFromComponents_1, comps?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDateComponents components_fromDate_(int unitFlags, NSDate? date) { + final _ret = _lib._objc_msgSend_588(_id, _lib._sel_components_fromDate_1, + unitFlags, date?._id ?? ffi.nullptr); + return NSDateComponents._(_ret, _lib, retain: true, release: true); + } + + NSDate dateByAddingComponents_toDate_options_( + NSDateComponents? comps, NSDate? date, int opts) { + final _ret = _lib._objc_msgSend_589( + _id, + _lib._sel_dateByAddingComponents_toDate_options_1, + comps?._id ?? ffi.nullptr, + date?._id ?? ffi.nullptr, + opts); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDateComponents components_fromDate_toDate_options_( + int unitFlags, NSDate? startingDate, NSDate? resultDate, int opts) { + final _ret = _lib._objc_msgSend_590( + _id, + _lib._sel_components_fromDate_toDate_options_1, + unitFlags, + startingDate?._id ?? ffi.nullptr, + resultDate?._id ?? ffi.nullptr, + opts); + return NSDateComponents._(_ret, _lib, retain: true, release: true); + } + + void getEra_year_month_day_fromDate_( + ffi.Pointer eraValuePointer, + ffi.Pointer yearValuePointer, + ffi.Pointer monthValuePointer, + ffi.Pointer dayValuePointer, + NSDate? date) { + return _lib._objc_msgSend_591( + _id, + _lib._sel_getEra_year_month_day_fromDate_1, + eraValuePointer, + yearValuePointer, + monthValuePointer, + dayValuePointer, + date?._id ?? ffi.nullptr); + } + + void getEra_yearForWeekOfYear_weekOfYear_weekday_fromDate_( + ffi.Pointer eraValuePointer, + ffi.Pointer yearValuePointer, + ffi.Pointer weekValuePointer, + ffi.Pointer weekdayValuePointer, + NSDate? date) { + return _lib._objc_msgSend_591( + _id, + _lib._sel_getEra_yearForWeekOfYear_weekOfYear_weekday_fromDate_1, + eraValuePointer, + yearValuePointer, + weekValuePointer, + weekdayValuePointer, + date?._id ?? ffi.nullptr); + } + + void getHour_minute_second_nanosecond_fromDate_( + ffi.Pointer hourValuePointer, + ffi.Pointer minuteValuePointer, + ffi.Pointer secondValuePointer, + ffi.Pointer nanosecondValuePointer, + NSDate? date) { + return _lib._objc_msgSend_591( + _id, + _lib._sel_getHour_minute_second_nanosecond_fromDate_1, + hourValuePointer, + minuteValuePointer, + secondValuePointer, + nanosecondValuePointer, + date?._id ?? ffi.nullptr); + } + + int component_fromDate_(int unit, NSDate? date) { + return _lib._objc_msgSend_592( + _id, _lib._sel_component_fromDate_1, unit, date?._id ?? ffi.nullptr); + } + + NSDate dateWithEra_year_month_day_hour_minute_second_nanosecond_( + int eraValue, + int yearValue, + int monthValue, + int dayValue, + int hourValue, + int minuteValue, + int secondValue, + int nanosecondValue) { + final _ret = _lib._objc_msgSend_593( + _id, + _lib._sel_dateWithEra_year_month_day_hour_minute_second_nanosecond_1, + eraValue, + yearValue, + monthValue, + dayValue, + hourValue, + minuteValue, + secondValue, + nanosecondValue); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate + dateWithEra_yearForWeekOfYear_weekOfYear_weekday_hour_minute_second_nanosecond_( + int eraValue, + int yearValue, + int weekValue, + int weekdayValue, + int hourValue, + int minuteValue, + int secondValue, + int nanosecondValue) { + final _ret = _lib._objc_msgSend_593( + _id, + _lib._sel_dateWithEra_yearForWeekOfYear_weekOfYear_weekday_hour_minute_second_nanosecond_1, + eraValue, + yearValue, + weekValue, + weekdayValue, + hourValue, + minuteValue, + secondValue, + nanosecondValue); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate startOfDayForDate_(NSDate? date) { + final _ret = _lib._objc_msgSend_150( + _id, _lib._sel_startOfDayForDate_1, date?._id ?? ffi.nullptr); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDateComponents componentsInTimeZone_fromDate_( + NSTimeZone? timezone, NSDate? date) { + final _ret = _lib._objc_msgSend_594( + _id, + _lib._sel_componentsInTimeZone_fromDate_1, + timezone?._id ?? ffi.nullptr, + date?._id ?? ffi.nullptr); + return NSDateComponents._(_ret, _lib, retain: true, release: true); + } + + int compareDate_toDate_toUnitGranularity_( + NSDate? date1, NSDate? date2, int unit) { + return _lib._objc_msgSend_595( + _id, + _lib._sel_compareDate_toDate_toUnitGranularity_1, + date1?._id ?? ffi.nullptr, + date2?._id ?? ffi.nullptr, + unit); + } + + bool isDate_equalToDate_toUnitGranularity_( + NSDate? date1, NSDate? date2, int unit) { + return _lib._objc_msgSend_596( + _id, + _lib._sel_isDate_equalToDate_toUnitGranularity_1, + date1?._id ?? ffi.nullptr, + date2?._id ?? ffi.nullptr, + unit); + } + + bool isDate_inSameDayAsDate_(NSDate? date1, NSDate? date2) { + return _lib._objc_msgSend_597(_id, _lib._sel_isDate_inSameDayAsDate_1, + date1?._id ?? ffi.nullptr, date2?._id ?? ffi.nullptr); + } + + bool isDateInToday_(NSDate? date) { + return _lib._objc_msgSend_152( + _id, _lib._sel_isDateInToday_1, date?._id ?? ffi.nullptr); + } + + bool isDateInYesterday_(NSDate? date) { + return _lib._objc_msgSend_152( + _id, _lib._sel_isDateInYesterday_1, date?._id ?? ffi.nullptr); + } + + bool isDateInTomorrow_(NSDate? date) { + return _lib._objc_msgSend_152( + _id, _lib._sel_isDateInTomorrow_1, date?._id ?? ffi.nullptr); + } + + bool isDateInWeekend_(NSDate? date) { + return _lib._objc_msgSend_152( + _id, _lib._sel_isDateInWeekend_1, date?._id ?? ffi.nullptr); + } + + bool rangeOfWeekendStartDate_interval_containingDate_( + ffi.Pointer> datep, + ffi.Pointer tip, + NSDate? date) { + return _lib._objc_msgSend_598( + _id, + _lib._sel_rangeOfWeekendStartDate_interval_containingDate_1, + datep, + tip, + date?._id ?? ffi.nullptr); + } + + bool nextWeekendStartDate_interval_options_afterDate_( + ffi.Pointer> datep, + ffi.Pointer tip, + int options, + NSDate? date) { + return _lib._objc_msgSend_599( + _id, + _lib._sel_nextWeekendStartDate_interval_options_afterDate_1, + datep, + tip, + options, + date?._id ?? ffi.nullptr); + } + + NSDateComponents components_fromDateComponents_toDateComponents_options_( + int unitFlags, + NSDateComponents? startingDateComp, + NSDateComponents? resultDateComp, + int options) { + final _ret = _lib._objc_msgSend_600( + _id, + _lib._sel_components_fromDateComponents_toDateComponents_options_1, + unitFlags, + startingDateComp?._id ?? ffi.nullptr, + resultDateComp?._id ?? ffi.nullptr, + options); + return NSDateComponents._(_ret, _lib, retain: true, release: true); + } + + NSDate dateByAddingUnit_value_toDate_options_( + int unit, int value, NSDate? date, int options) { + final _ret = _lib._objc_msgSend_601( + _id, + _lib._sel_dateByAddingUnit_value_toDate_options_1, + unit, + value, + date?._id ?? ffi.nullptr, + options); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + void enumerateDatesStartingAfterDate_matchingComponents_options_usingBlock_( + NSDate? start, NSDateComponents? comps, int opts, ObjCBlock33 block) { + return _lib._objc_msgSend_602( + _id, + _lib._sel_enumerateDatesStartingAfterDate_matchingComponents_options_usingBlock_1, + start?._id ?? ffi.nullptr, + comps?._id ?? ffi.nullptr, + opts, + block._id); + } + + NSDate nextDateAfterDate_matchingComponents_options_( + NSDate? date, NSDateComponents? comps, int options) { + final _ret = _lib._objc_msgSend_603( + _id, + _lib._sel_nextDateAfterDate_matchingComponents_options_1, + date?._id ?? ffi.nullptr, + comps?._id ?? ffi.nullptr, + options); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate nextDateAfterDate_matchingUnit_value_options_( + NSDate? date, int unit, int value, int options) { + final _ret = _lib._objc_msgSend_604( + _id, + _lib._sel_nextDateAfterDate_matchingUnit_value_options_1, + date?._id ?? ffi.nullptr, + unit, + value, + options); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate nextDateAfterDate_matchingHour_minute_second_options_(NSDate? date, + int hourValue, int minuteValue, int secondValue, int options) { + final _ret = _lib._objc_msgSend_605( + _id, + _lib._sel_nextDateAfterDate_matchingHour_minute_second_options_1, + date?._id ?? ffi.nullptr, + hourValue, + minuteValue, + secondValue, + options); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate dateBySettingUnit_value_ofDate_options_( + int unit, int v, NSDate? date, int opts) { + final _ret = _lib._objc_msgSend_601( + _id, + _lib._sel_dateBySettingUnit_value_ofDate_options_1, + unit, + v, + date?._id ?? ffi.nullptr, + opts); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate dateBySettingHour_minute_second_ofDate_options_( + int h, int m, int s, NSDate? date, int opts) { + final _ret = _lib._objc_msgSend_606( + _id, + _lib._sel_dateBySettingHour_minute_second_ofDate_options_1, + h, + m, + s, + date?._id ?? ffi.nullptr, + opts); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + bool date_matchesComponents_(NSDate? date, NSDateComponents? components) { + return _lib._objc_msgSend_607(_id, _lib._sel_date_matchesComponents_1, + date?._id ?? ffi.nullptr, components?._id ?? ffi.nullptr); + } + + static NSCalendar new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSCalendar1, _lib._sel_new1); + return NSCalendar._(_ret, _lib, retain: false, release: true); + } + + static NSCalendar alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSCalendar1, _lib._sel_alloc1); + return NSCalendar._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSCalendar1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSCalendar1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSCalendar1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSCalendar1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSCalendar1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSCalendar1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSCalendar1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSCalendar1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSCalendar1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSCalendarUnit { + static const int NSCalendarUnitEra = 2; + static const int NSCalendarUnitYear = 4; + static const int NSCalendarUnitMonth = 8; + static const int NSCalendarUnitDay = 16; + static const int NSCalendarUnitHour = 32; + static const int NSCalendarUnitMinute = 64; + static const int NSCalendarUnitSecond = 128; + static const int NSCalendarUnitWeekday = 512; + static const int NSCalendarUnitWeekdayOrdinal = 1024; + static const int NSCalendarUnitQuarter = 2048; + static const int NSCalendarUnitWeekOfMonth = 4096; + static const int NSCalendarUnitWeekOfYear = 8192; + static const int NSCalendarUnitYearForWeekOfYear = 16384; + static const int NSCalendarUnitNanosecond = 32768; + static const int NSCalendarUnitCalendar = 1048576; + static const int NSCalendarUnitTimeZone = 2097152; + static const int NSEraCalendarUnit = 2; + static const int NSYearCalendarUnit = 4; + static const int NSMonthCalendarUnit = 8; + static const int NSDayCalendarUnit = 16; + static const int NSHourCalendarUnit = 32; + static const int NSMinuteCalendarUnit = 64; + static const int NSSecondCalendarUnit = 128; + static const int NSWeekCalendarUnit = 256; + static const int NSWeekdayCalendarUnit = 512; + static const int NSWeekdayOrdinalCalendarUnit = 1024; + static const int NSQuarterCalendarUnit = 2048; + static const int NSWeekOfMonthCalendarUnit = 4096; + static const int NSWeekOfYearCalendarUnit = 8192; + static const int NSYearForWeekOfYearCalendarUnit = 16384; + static const int NSCalendarCalendarUnit = 1048576; + static const int NSTimeZoneCalendarUnit = 2097152; +} + +class NSDateComponents extends NSObject { + NSDateComponents._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSDateComponents] that points to the same underlying object as [other]. + static NSDateComponents castFrom(T other) { + return NSDateComponents._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSDateComponents] that wraps the given raw object pointer. + static NSDateComponents castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSDateComponents._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSDateComponents]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSDateComponents1); + } + + NSCalendar? get calendar { + final _ret = _lib._objc_msgSend_576(_id, _lib._sel_calendar1); + return _ret.address == 0 + ? null + : NSCalendar._(_ret, _lib, retain: true, release: true); + } + + set calendar(NSCalendar? value) { + _lib._objc_msgSend_582( + _id, _lib._sel_setCalendar_1, value?._id ?? ffi.nullptr); + } + + NSTimeZone? get timeZone { + final _ret = _lib._objc_msgSend_569(_id, _lib._sel_timeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + set timeZone(NSTimeZone? value) { + _lib._objc_msgSend_570( + _id, _lib._sel_setTimeZone_1, value?._id ?? ffi.nullptr); + } + + int get era { + return _lib._objc_msgSend_70(_id, _lib._sel_era1); + } + + set era(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setEra_1, value); + } + + int get year { + return _lib._objc_msgSend_70(_id, _lib._sel_year1); + } + + set year(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setYear_1, value); + } + + int get month { + return _lib._objc_msgSend_70(_id, _lib._sel_month1); + } + + set month(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setMonth_1, value); + } + + int get day { + return _lib._objc_msgSend_70(_id, _lib._sel_day1); + } + + set day(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setDay_1, value); + } + + int get hour { + return _lib._objc_msgSend_70(_id, _lib._sel_hour1); + } + + set hour(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setHour_1, value); + } + + int get minute { + return _lib._objc_msgSend_70(_id, _lib._sel_minute1); + } + + set minute(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setMinute_1, value); + } + + int get second { + return _lib._objc_msgSend_70(_id, _lib._sel_second1); + } + + set second(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setSecond_1, value); + } + + int get nanosecond { + return _lib._objc_msgSend_70(_id, _lib._sel_nanosecond1); + } + + set nanosecond(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setNanosecond_1, value); + } + + int get weekday { + return _lib._objc_msgSend_70(_id, _lib._sel_weekday1); + } + + set weekday(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setWeekday_1, value); + } + + int get weekdayOrdinal { + return _lib._objc_msgSend_70(_id, _lib._sel_weekdayOrdinal1); + } + + set weekdayOrdinal(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setWeekdayOrdinal_1, value); + } + + int get quarter { + return _lib._objc_msgSend_70(_id, _lib._sel_quarter1); + } + + set quarter(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setQuarter_1, value); + } + + int get weekOfMonth { + return _lib._objc_msgSend_70(_id, _lib._sel_weekOfMonth1); + } + + set weekOfMonth(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setWeekOfMonth_1, value); + } + + int get weekOfYear { + return _lib._objc_msgSend_70(_id, _lib._sel_weekOfYear1); + } + + set weekOfYear(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setWeekOfYear_1, value); + } + + int get yearForWeekOfYear { + return _lib._objc_msgSend_70(_id, _lib._sel_yearForWeekOfYear1); + } + + set yearForWeekOfYear(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setYearForWeekOfYear_1, value); + } + + bool get leapMonth { + return _lib._objc_msgSend_12(_id, _lib._sel_isLeapMonth1); + } + + set leapMonth(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setLeapMonth_1, value); + } + + NSDate? get date { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_date1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + int week() { + return _lib._objc_msgSend_70(_id, _lib._sel_week1); + } + + void setWeek_(int v) { + return _lib._objc_msgSend_355(_id, _lib._sel_setWeek_1, v); + } + + void setValue_forComponent_(int value, int unit) { + return _lib._objc_msgSend_584( + _id, _lib._sel_setValue_forComponent_1, value, unit); + } + + int valueForComponent_(int unit) { + return _lib._objc_msgSend_585(_id, _lib._sel_valueForComponent_1, unit); + } + + bool get validDate { + return _lib._objc_msgSend_12(_id, _lib._sel_isValidDate1); + } + + bool isValidDateInCalendar_(NSCalendar? calendar) { + return _lib._objc_msgSend_586( + _id, _lib._sel_isValidDateInCalendar_1, calendar?._id ?? ffi.nullptr); + } + + static NSDateComponents new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDateComponents1, _lib._sel_new1); + return NSDateComponents._(_ret, _lib, retain: false, release: true); + } + + static NSDateComponents alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSDateComponents1, _lib._sel_alloc1); + return NSDateComponents._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSDateComponents1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSDateComponents1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSDateComponents1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDateComponents1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSDateComponents1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSDateComponents1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSDateComponents1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSDateComponents1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSDateComponents1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSCalendarOptions { + static const int NSCalendarWrapComponents = 1; + static const int NSCalendarMatchStrictly = 2; + static const int NSCalendarSearchBackwards = 4; + static const int NSCalendarMatchPreviousTimePreservingSmallerUnits = 256; + static const int NSCalendarMatchNextTimePreservingSmallerUnits = 512; + static const int NSCalendarMatchNextTime = 1024; + static const int NSCalendarMatchFirst = 4096; + static const int NSCalendarMatchLast = 8192; +} + +void _ObjCBlock33_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Bool arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, bool arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock33_closureRegistry = {}; +int _ObjCBlock33_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock33_registerClosure(Function fn) { + final id = ++_ObjCBlock33_closureRegistryIndex; + _ObjCBlock33_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock33_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return _ObjCBlock33_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock33 extends _ObjCBlockBase { + ObjCBlock33._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock33.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Bool arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>( + _ObjCBlock33_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock33.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, bool arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>( + _ObjCBlock33_closureTrampoline) + .cast(), + _ObjCBlock33_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + bool arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSNumberFormatter extends NSFormatter { + NSNumberFormatter._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSNumberFormatter] that points to the same underlying object as [other]. + static NSNumberFormatter castFrom(T other) { + return NSNumberFormatter._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSNumberFormatter] that wraps the given raw object pointer. + static NSNumberFormatter castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSNumberFormatter._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSNumberFormatter]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSNumberFormatter1); + } + + int get formattingContext { + return _lib._objc_msgSend_556(_id, _lib._sel_formattingContext1); + } + + set formattingContext(int value) { + _lib._objc_msgSend_557(_id, _lib._sel_setFormattingContext_1, value); + } + + bool getObjectValue_forString_range_error_( + ffi.Pointer> obj, + NSString? string, + ffi.Pointer<_NSRange> rangep, + ffi.Pointer> error) { + return _lib._objc_msgSend_558( + _id, + _lib._sel_getObjectValue_forString_range_error_1, + obj, + string?._id ?? ffi.nullptr, + rangep, + error); + } + + NSString stringFromNumber_(NSNumber? number) { + final _ret = _lib._objc_msgSend_610( + _id, _lib._sel_stringFromNumber_1, number?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSNumber numberFromString_(NSString? string) { + final _ret = _lib._objc_msgSend_611( + _id, _lib._sel_numberFromString_1, string?._id ?? ffi.nullptr); + return NSNumber._(_ret, _lib, retain: true, release: true); + } + + static NSString localizedStringFromNumber_numberStyle_( + PedometerBindings _lib, NSNumber? num, int nstyle) { + final _ret = _lib._objc_msgSend_612( + _lib._class_NSNumberFormatter1, + _lib._sel_localizedStringFromNumber_numberStyle_1, + num?._id ?? ffi.nullptr, + nstyle); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static int defaultFormatterBehavior(PedometerBindings _lib) { + return _lib._objc_msgSend_613( + _lib._class_NSNumberFormatter1, _lib._sel_defaultFormatterBehavior1); + } + + static void setDefaultFormatterBehavior_( + PedometerBindings _lib, int behavior) { + return _lib._objc_msgSend_614(_lib._class_NSNumberFormatter1, + _lib._sel_setDefaultFormatterBehavior_1, behavior); + } + + int get numberStyle { + return _lib._objc_msgSend_615(_id, _lib._sel_numberStyle1); + } + + set numberStyle(int value) { + _lib._objc_msgSend_616(_id, _lib._sel_setNumberStyle_1, value); + } + + NSLocale? get locale { + final _ret = _lib._objc_msgSend_273(_id, _lib._sel_locale1); + return _ret.address == 0 + ? null + : NSLocale._(_ret, _lib, retain: true, release: true); + } + + set locale(NSLocale? value) { + _lib._objc_msgSend_567( + _id, _lib._sel_setLocale_1, value?._id ?? ffi.nullptr); + } + + bool get generatesDecimalNumbers { + return _lib._objc_msgSend_12(_id, _lib._sel_generatesDecimalNumbers1); + } + + set generatesDecimalNumbers(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setGeneratesDecimalNumbers_1, value); + } + + int get formatterBehavior { + return _lib._objc_msgSend_613(_id, _lib._sel_formatterBehavior1); + } + + set formatterBehavior(int value) { + _lib._objc_msgSend_617(_id, _lib._sel_setFormatterBehavior_1, value); + } + + NSString? get negativeFormat { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_negativeFormat1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set negativeFormat(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setNegativeFormat_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForNegativeValues { + final _ret = + _lib._objc_msgSend_324(_id, _lib._sel_textAttributesForNegativeValues1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForNegativeValues(NSDictionary? value) { + _lib._objc_msgSend_571(_id, _lib._sel_setTextAttributesForNegativeValues_1, + value?._id ?? ffi.nullptr); + } + + NSString? get positiveFormat { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_positiveFormat1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set positiveFormat(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPositiveFormat_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForPositiveValues { + final _ret = + _lib._objc_msgSend_324(_id, _lib._sel_textAttributesForPositiveValues1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForPositiveValues(NSDictionary? value) { + _lib._objc_msgSend_571(_id, _lib._sel_setTextAttributesForPositiveValues_1, + value?._id ?? ffi.nullptr); + } + + bool get allowsFloats { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsFloats1); + } + + set allowsFloats(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setAllowsFloats_1, value); + } + + NSString? get decimalSeparator { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_decimalSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set decimalSeparator(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setDecimalSeparator_1, value?._id ?? ffi.nullptr); + } + + bool get alwaysShowsDecimalSeparator { + return _lib._objc_msgSend_12(_id, _lib._sel_alwaysShowsDecimalSeparator1); + } + + set alwaysShowsDecimalSeparator(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAlwaysShowsDecimalSeparator_1, value); + } + + NSString? get currencyDecimalSeparator { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_currencyDecimalSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set currencyDecimalSeparator(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setCurrencyDecimalSeparator_1, + value?._id ?? ffi.nullptr); + } + + bool get usesGroupingSeparator { + return _lib._objc_msgSend_12(_id, _lib._sel_usesGroupingSeparator1); + } + + set usesGroupingSeparator(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setUsesGroupingSeparator_1, value); + } + + NSString? get groupingSeparator { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_groupingSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set groupingSeparator(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setGroupingSeparator_1, value?._id ?? ffi.nullptr); + } + + NSString? get zeroSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_zeroSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set zeroSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setZeroSymbol_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForZero { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_textAttributesForZero1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForZero(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, _lib._sel_setTextAttributesForZero_1, value?._id ?? ffi.nullptr); + } + + NSString? get nilSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_nilSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set nilSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setNilSymbol_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForNil { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_textAttributesForNil1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForNil(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, _lib._sel_setTextAttributesForNil_1, value?._id ?? ffi.nullptr); + } + + NSString? get notANumberSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_notANumberSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set notANumberSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setNotANumberSymbol_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForNotANumber { + final _ret = + _lib._objc_msgSend_324(_id, _lib._sel_textAttributesForNotANumber1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForNotANumber(NSDictionary? value) { + _lib._objc_msgSend_571(_id, _lib._sel_setTextAttributesForNotANumber_1, + value?._id ?? ffi.nullptr); + } + + NSString? get positiveInfinitySymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_positiveInfinitySymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set positiveInfinitySymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPositiveInfinitySymbol_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForPositiveInfinity { + final _ret = _lib._objc_msgSend_324( + _id, _lib._sel_textAttributesForPositiveInfinity1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForPositiveInfinity(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, + _lib._sel_setTextAttributesForPositiveInfinity_1, + value?._id ?? ffi.nullptr); + } + + NSString? get negativeInfinitySymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_negativeInfinitySymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set negativeInfinitySymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setNegativeInfinitySymbol_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get textAttributesForNegativeInfinity { + final _ret = _lib._objc_msgSend_324( + _id, _lib._sel_textAttributesForNegativeInfinity1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set textAttributesForNegativeInfinity(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, + _lib._sel_setTextAttributesForNegativeInfinity_1, + value?._id ?? ffi.nullptr); + } + + NSString? get positivePrefix { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_positivePrefix1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set positivePrefix(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPositivePrefix_1, value?._id ?? ffi.nullptr); + } + + NSString? get positiveSuffix { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_positiveSuffix1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set positiveSuffix(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPositiveSuffix_1, value?._id ?? ffi.nullptr); + } + + NSString? get negativePrefix { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_negativePrefix1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set negativePrefix(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setNegativePrefix_1, value?._id ?? ffi.nullptr); + } + + NSString? get negativeSuffix { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_negativeSuffix1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set negativeSuffix(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setNegativeSuffix_1, value?._id ?? ffi.nullptr); + } + + NSString? get currencyCode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_currencyCode1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set currencyCode(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setCurrencyCode_1, value?._id ?? ffi.nullptr); + } + + NSString? get currencySymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_currencySymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set currencySymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setCurrencySymbol_1, value?._id ?? ffi.nullptr); + } + + NSString? get internationalCurrencySymbol { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_internationalCurrencySymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set internationalCurrencySymbol(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setInternationalCurrencySymbol_1, + value?._id ?? ffi.nullptr); + } + + NSString? get percentSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_percentSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set percentSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPercentSymbol_1, value?._id ?? ffi.nullptr); + } + + NSString? get perMillSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_perMillSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set perMillSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPerMillSymbol_1, value?._id ?? ffi.nullptr); + } + + NSString? get minusSign { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_minusSign1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set minusSign(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setMinusSign_1, value?._id ?? ffi.nullptr); + } + + NSString? get plusSign { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_plusSign1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set plusSign(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPlusSign_1, value?._id ?? ffi.nullptr); + } + + NSString? get exponentSymbol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_exponentSymbol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set exponentSymbol(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setExponentSymbol_1, value?._id ?? ffi.nullptr); + } + + int get groupingSize { + return _lib._objc_msgSend_10(_id, _lib._sel_groupingSize1); + } + + set groupingSize(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setGroupingSize_1, value); + } + + int get secondaryGroupingSize { + return _lib._objc_msgSend_10(_id, _lib._sel_secondaryGroupingSize1); + } + + set secondaryGroupingSize(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setSecondaryGroupingSize_1, value); + } + + NSNumber? get multiplier { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_multiplier1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set multiplier(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setMultiplier_1, value?._id ?? ffi.nullptr); + } + + int get formatWidth { + return _lib._objc_msgSend_10(_id, _lib._sel_formatWidth1); + } + + set formatWidth(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setFormatWidth_1, value); + } + + NSString? get paddingCharacter { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_paddingCharacter1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set paddingCharacter(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPaddingCharacter_1, value?._id ?? ffi.nullptr); + } + + int get paddingPosition { + return _lib._objc_msgSend_618(_id, _lib._sel_paddingPosition1); + } + + set paddingPosition(int value) { + _lib._objc_msgSend_619(_id, _lib._sel_setPaddingPosition_1, value); + } + + int get roundingMode { + return _lib._objc_msgSend_620(_id, _lib._sel_roundingMode1); + } + + set roundingMode(int value) { + _lib._objc_msgSend_621(_id, _lib._sel_setRoundingMode_1, value); + } + + NSNumber? get roundingIncrement { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_roundingIncrement1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set roundingIncrement(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setRoundingIncrement_1, value?._id ?? ffi.nullptr); + } + + int get minimumIntegerDigits { + return _lib._objc_msgSend_10(_id, _lib._sel_minimumIntegerDigits1); + } + + set minimumIntegerDigits(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMinimumIntegerDigits_1, value); + } + + int get maximumIntegerDigits { + return _lib._objc_msgSend_10(_id, _lib._sel_maximumIntegerDigits1); + } + + set maximumIntegerDigits(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMaximumIntegerDigits_1, value); + } + + int get minimumFractionDigits { + return _lib._objc_msgSend_10(_id, _lib._sel_minimumFractionDigits1); + } + + set minimumFractionDigits(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMinimumFractionDigits_1, value); + } + + int get maximumFractionDigits { + return _lib._objc_msgSend_10(_id, _lib._sel_maximumFractionDigits1); + } + + set maximumFractionDigits(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMaximumFractionDigits_1, value); + } + + NSNumber? get minimum { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_minimum1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set minimum(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setMinimum_1, value?._id ?? ffi.nullptr); + } + + NSNumber? get maximum { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_maximum1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + set maximum(NSNumber? value) { + _lib._objc_msgSend_486( + _id, _lib._sel_setMaximum_1, value?._id ?? ffi.nullptr); + } + + NSString? get currencyGroupingSeparator { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_currencyGroupingSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set currencyGroupingSeparator(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setCurrencyGroupingSeparator_1, + value?._id ?? ffi.nullptr); + } + + bool get lenient { + return _lib._objc_msgSend_12(_id, _lib._sel_isLenient1); + } + + set lenient(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setLenient_1, value); + } + + bool get usesSignificantDigits { + return _lib._objc_msgSend_12(_id, _lib._sel_usesSignificantDigits1); + } + + set usesSignificantDigits(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setUsesSignificantDigits_1, value); + } + + int get minimumSignificantDigits { + return _lib._objc_msgSend_10(_id, _lib._sel_minimumSignificantDigits1); + } + + set minimumSignificantDigits(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMinimumSignificantDigits_1, value); + } + + int get maximumSignificantDigits { + return _lib._objc_msgSend_10(_id, _lib._sel_maximumSignificantDigits1); + } + + set maximumSignificantDigits(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMaximumSignificantDigits_1, value); + } + + bool get partialStringValidationEnabled { + return _lib._objc_msgSend_12( + _id, _lib._sel_isPartialStringValidationEnabled1); + } + + set partialStringValidationEnabled(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setPartialStringValidationEnabled_1, value); + } + + bool get hasThousandSeparators { + return _lib._objc_msgSend_12(_id, _lib._sel_hasThousandSeparators1); + } + + set hasThousandSeparators(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setHasThousandSeparators_1, value); + } + + NSString? get thousandSeparator { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_thousandSeparator1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set thousandSeparator(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setThousandSeparator_1, value?._id ?? ffi.nullptr); + } + + bool get localizesFormat { + return _lib._objc_msgSend_12(_id, _lib._sel_localizesFormat1); + } + + set localizesFormat(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setLocalizesFormat_1, value); + } + + NSString? get format { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_format1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set format(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setFormat_1, value?._id ?? ffi.nullptr); + } + + NSAttributedString? get attributedStringForZero { + final _ret = + _lib._objc_msgSend_541(_id, _lib._sel_attributedStringForZero1); + return _ret.address == 0 + ? null + : NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + set attributedStringForZero(NSAttributedString? value) { + _lib._objc_msgSend_622( + _id, _lib._sel_setAttributedStringForZero_1, value?._id ?? ffi.nullptr); + } + + NSAttributedString? get attributedStringForNil { + final _ret = _lib._objc_msgSend_541(_id, _lib._sel_attributedStringForNil1); + return _ret.address == 0 + ? null + : NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + set attributedStringForNil(NSAttributedString? value) { + _lib._objc_msgSend_622( + _id, _lib._sel_setAttributedStringForNil_1, value?._id ?? ffi.nullptr); + } + + NSAttributedString? get attributedStringForNotANumber { + final _ret = + _lib._objc_msgSend_541(_id, _lib._sel_attributedStringForNotANumber1); + return _ret.address == 0 + ? null + : NSAttributedString._(_ret, _lib, retain: true, release: true); + } + + set attributedStringForNotANumber(NSAttributedString? value) { + _lib._objc_msgSend_622(_id, _lib._sel_setAttributedStringForNotANumber_1, + value?._id ?? ffi.nullptr); + } + + NSDecimalNumberHandler? get roundingBehavior { + final _ret = _lib._objc_msgSend_623(_id, _lib._sel_roundingBehavior1); + return _ret.address == 0 + ? null + : NSDecimalNumberHandler._(_ret, _lib, retain: true, release: true); + } + + set roundingBehavior(NSDecimalNumberHandler? value) { + _lib._objc_msgSend_625( + _id, _lib._sel_setRoundingBehavior_1, value?._id ?? ffi.nullptr); + } + + static NSNumberFormatter new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSNumberFormatter1, _lib._sel_new1); + return NSNumberFormatter._(_ret, _lib, retain: false, release: true); + } + + static NSNumberFormatter alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSNumberFormatter1, _lib._sel_alloc1); + return NSNumberFormatter._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSNumberFormatter1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSNumberFormatter1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSNumberFormatter1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSNumberFormatter1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSNumberFormatter1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSNumberFormatter1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSNumberFormatter1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSNumberFormatter1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSNumberFormatter1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSNumberFormatterStyle { + static const int NSNumberFormatterNoStyle = 0; + static const int NSNumberFormatterDecimalStyle = 1; + static const int NSNumberFormatterCurrencyStyle = 2; + static const int NSNumberFormatterPercentStyle = 3; + static const int NSNumberFormatterScientificStyle = 4; + static const int NSNumberFormatterSpellOutStyle = 5; + static const int NSNumberFormatterOrdinalStyle = 6; + static const int NSNumberFormatterCurrencyISOCodeStyle = 8; + static const int NSNumberFormatterCurrencyPluralStyle = 9; + static const int NSNumberFormatterCurrencyAccountingStyle = 10; +} + +abstract class NSNumberFormatterBehavior { + static const int NSNumberFormatterBehaviorDefault = 0; + static const int NSNumberFormatterBehavior10_0 = 1000; + static const int NSNumberFormatterBehavior10_4 = 1040; +} + +abstract class NSNumberFormatterPadPosition { + static const int NSNumberFormatterPadBeforePrefix = 0; + static const int NSNumberFormatterPadAfterPrefix = 1; + static const int NSNumberFormatterPadBeforeSuffix = 2; + static const int NSNumberFormatterPadAfterSuffix = 3; +} + +abstract class NSNumberFormatterRoundingMode { + static const int NSNumberFormatterRoundCeiling = 0; + static const int NSNumberFormatterRoundFloor = 1; + static const int NSNumberFormatterRoundDown = 2; + static const int NSNumberFormatterRoundUp = 3; + static const int NSNumberFormatterRoundHalfEven = 4; + static const int NSNumberFormatterRoundHalfDown = 5; + static const int NSNumberFormatterRoundHalfUp = 6; +} + +/// A class for defining common behaviors +class NSDecimalNumberHandler extends NSObject { + NSDecimalNumberHandler._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSDecimalNumberHandler] that points to the same underlying object as [other]. + static NSDecimalNumberHandler castFrom(T other) { + return NSDecimalNumberHandler._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSDecimalNumberHandler] that wraps the given raw object pointer. + static NSDecimalNumberHandler castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSDecimalNumberHandler._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSDecimalNumberHandler]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSDecimalNumberHandler1); + } + + static NSDecimalNumberHandler? getDefaultDecimalNumberHandler( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_623(_lib._class_NSDecimalNumberHandler1, + _lib._sel_defaultDecimalNumberHandler1); + return _ret.address == 0 + ? null + : NSDecimalNumberHandler._(_ret, _lib, retain: true, release: true); + } + + NSDecimalNumberHandler + initWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero_( + int roundingMode, + int scale, + bool exact, + bool overflow, + bool underflow, + bool divideByZero) { + final _ret = _lib._objc_msgSend_624( + _id, + _lib._sel_initWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero_1, + roundingMode, + scale, + exact, + overflow, + underflow, + divideByZero); + return NSDecimalNumberHandler._(_ret, _lib, retain: true, release: true); + } + + static NSDecimalNumberHandler + decimalNumberHandlerWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero_( + PedometerBindings _lib, + int roundingMode, + int scale, + bool exact, + bool overflow, + bool underflow, + bool divideByZero) { + final _ret = _lib._objc_msgSend_624( + _lib._class_NSDecimalNumberHandler1, + _lib._sel_decimalNumberHandlerWithRoundingMode_scale_raiseOnExactness_raiseOnOverflow_raiseOnUnderflow_raiseOnDivideByZero_1, + roundingMode, + scale, + exact, + overflow, + underflow, + divideByZero); + return NSDecimalNumberHandler._(_ret, _lib, retain: true, release: true); + } + + static NSDecimalNumberHandler new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSDecimalNumberHandler1, _lib._sel_new1); + return NSDecimalNumberHandler._(_ret, _lib, retain: false, release: true); + } + + static NSDecimalNumberHandler alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSDecimalNumberHandler1, _lib._sel_alloc1); + return NSDecimalNumberHandler._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSDecimalNumberHandler1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSDecimalNumberHandler1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSDecimalNumberHandler1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSDecimalNumberHandler1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSDecimalNumberHandler1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSDecimalNumberHandler1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSDecimalNumberHandler1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSDecimalNumberHandler1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSDecimalNumberHandler1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// Type definitions +abstract class NSRoundingMode { + static const int NSRoundPlain = 0; + static const int NSRoundDown = 1; + static const int NSRoundUp = 2; + static const int NSRoundBankers = 3; +} + +class NSScanner extends NSObject { + NSScanner._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSScanner] that points to the same underlying object as [other]. + static NSScanner castFrom(T other) { + return NSScanner._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSScanner] that wraps the given raw object pointer. + static NSScanner castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSScanner._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSScanner]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSScanner1); + } + + NSString? get string { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_string1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get scanLocation { + return _lib._objc_msgSend_10(_id, _lib._sel_scanLocation1); + } + + set scanLocation(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setScanLocation_1, value); + } + + NSCharacterSet? get charactersToBeSkipped { + final _ret = _lib._objc_msgSend_265(_id, _lib._sel_charactersToBeSkipped1); + return _ret.address == 0 + ? null + : NSCharacterSet._(_ret, _lib, retain: true, release: true); + } + + set charactersToBeSkipped(NSCharacterSet? value) { + _lib._objc_msgSend_626( + _id, _lib._sel_setCharactersToBeSkipped_1, value?._id ?? ffi.nullptr); + } + + bool get caseSensitive { + return _lib._objc_msgSend_12(_id, _lib._sel_caseSensitive1); + } + + set caseSensitive(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setCaseSensitive_1, value); + } + + NSObject get locale { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_locale1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + set locale(NSObject value) { + _lib._objc_msgSend_348(_id, _lib._sel_setLocale_1, value._id); + } + + NSScanner initWithString_(NSString? string) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithString_1, string?._id ?? ffi.nullptr); + return NSScanner._(_ret, _lib, retain: true, release: true); + } + + bool scanInt_(ffi.Pointer result) { + return _lib._objc_msgSend_627(_id, _lib._sel_scanInt_1, result); + } + + bool scanInteger_(ffi.Pointer result) { + return _lib._objc_msgSend_628(_id, _lib._sel_scanInteger_1, result); + } + + bool scanLongLong_(ffi.Pointer result) { + return _lib._objc_msgSend_629(_id, _lib._sel_scanLongLong_1, result); + } + + bool scanUnsignedLongLong_(ffi.Pointer result) { + return _lib._objc_msgSend_630( + _id, _lib._sel_scanUnsignedLongLong_1, result); + } + + bool scanFloat_(ffi.Pointer result) { + return _lib._objc_msgSend_631(_id, _lib._sel_scanFloat_1, result); + } + + bool scanDouble_(ffi.Pointer result) { + return _lib._objc_msgSend_632(_id, _lib._sel_scanDouble_1, result); + } + + bool scanHexInt_(ffi.Pointer result) { + return _lib._objc_msgSend_633(_id, _lib._sel_scanHexInt_1, result); + } + + bool scanHexLongLong_(ffi.Pointer result) { + return _lib._objc_msgSend_630(_id, _lib._sel_scanHexLongLong_1, result); + } + + bool scanHexFloat_(ffi.Pointer result) { + return _lib._objc_msgSend_631(_id, _lib._sel_scanHexFloat_1, result); + } + + bool scanHexDouble_(ffi.Pointer result) { + return _lib._objc_msgSend_632(_id, _lib._sel_scanHexDouble_1, result); + } + + bool scanString_intoString_( + NSString? string, ffi.Pointer> result) { + return _lib._objc_msgSend_634(_id, _lib._sel_scanString_intoString_1, + string?._id ?? ffi.nullptr, result); + } + + bool scanCharactersFromSet_intoString_( + NSCharacterSet? set, ffi.Pointer> result) { + return _lib._objc_msgSend_635( + _id, + _lib._sel_scanCharactersFromSet_intoString_1, + set?._id ?? ffi.nullptr, + result); + } + + bool scanUpToString_intoString_( + NSString? string, ffi.Pointer> result) { + return _lib._objc_msgSend_634(_id, _lib._sel_scanUpToString_intoString_1, + string?._id ?? ffi.nullptr, result); + } + + bool scanUpToCharactersFromSet_intoString_( + NSCharacterSet? set, ffi.Pointer> result) { + return _lib._objc_msgSend_635( + _id, + _lib._sel_scanUpToCharactersFromSet_intoString_1, + set?._id ?? ffi.nullptr, + result); + } + + bool get atEnd { + return _lib._objc_msgSend_12(_id, _lib._sel_isAtEnd1); + } + + static NSScanner scannerWithString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSScanner1, + _lib._sel_scannerWithString_1, string?._id ?? ffi.nullptr); + return NSScanner._(_ret, _lib, retain: true, release: true); + } + + static NSObject localizedScannerWithString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSScanner1, + _lib._sel_localizedScannerWithString_1, string?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool scanDecimal_(ffi.Pointer dcm) { + return _lib._objc_msgSend_636(_id, _lib._sel_scanDecimal_1, dcm); + } + + static NSScanner new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSScanner1, _lib._sel_new1); + return NSScanner._(_ret, _lib, retain: false, release: true); + } + + static NSScanner alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSScanner1, _lib._sel_alloc1); + return NSScanner._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSScanner1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSScanner1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSScanner1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSScanner1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSScanner1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSScanner1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSScanner1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSScanner1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSScanner1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSDecimal extends ffi.Opaque {} + +class NSException extends NSObject { + NSException._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSException] that points to the same underlying object as [other]. + static NSException castFrom(T other) { + return NSException._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSException] that wraps the given raw object pointer. + static NSException castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSException._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSException]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSException1); + } + + static NSException exceptionWithName_reason_userInfo_(PedometerBindings _lib, + NSString name, NSString? reason, NSDictionary? userInfo) { + final _ret = _lib._objc_msgSend_637( + _lib._class_NSException1, + _lib._sel_exceptionWithName_reason_userInfo_1, + name._id, + reason?._id ?? ffi.nullptr, + userInfo?._id ?? ffi.nullptr); + return NSException._(_ret, _lib, retain: true, release: true); + } + + NSException initWithName_reason_userInfo_( + NSString aName, NSString? aReason, NSDictionary? aUserInfo) { + final _ret = _lib._objc_msgSend_638( + _id, + _lib._sel_initWithName_reason_userInfo_1, + aName._id, + aReason?._id ?? ffi.nullptr, + aUserInfo?._id ?? ffi.nullptr); + return NSException._(_ret, _lib, retain: true, release: true); + } + + NSString get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get reason { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_reason1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get userInfo { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_userInfo1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSArray? get callStackReturnAddresses { + final _ret = + _lib._objc_msgSend_71(_id, _lib._sel_callStackReturnAddresses1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get callStackSymbols { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_callStackSymbols1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + void raise() { + return _lib._objc_msgSend_1(_id, _lib._sel_raise1); + } + + static void raise_format_( + PedometerBindings _lib, NSString name, NSString? format) { + return _lib._objc_msgSend_639(_lib._class_NSException1, + _lib._sel_raise_format_1, name._id, format?._id ?? ffi.nullptr); + } + + static void raise_format_arguments_(PedometerBindings _lib, NSString name, + NSString? format, ffi.Pointer argList) { + return _lib._objc_msgSend_640( + _lib._class_NSException1, + _lib._sel_raise_format_arguments_1, + name._id, + format?._id ?? ffi.nullptr, + argList); + } + + static NSException new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSException1, _lib._sel_new1); + return NSException._(_ret, _lib, retain: false, release: true); + } + + static NSException alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSException1, _lib._sel_alloc1); + return NSException._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSException1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSException1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSException1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSException1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSException1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSException1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSException1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSException1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSException1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSRunLoop extends NSObject { + NSRunLoop._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSRunLoop] that points to the same underlying object as [other]. + static NSRunLoop castFrom(T other) { + return NSRunLoop._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSRunLoop] that wraps the given raw object pointer. + static NSRunLoop castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSRunLoop._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSRunLoop]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSRunLoop1); + } + + static NSRunLoop? getCurrentRunLoop(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_641( + _lib._class_NSRunLoop1, _lib._sel_currentRunLoop1); + return _ret.address == 0 + ? null + : NSRunLoop._(_ret, _lib, retain: true, release: true); + } + + static NSRunLoop? getMainRunLoop(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_641(_lib._class_NSRunLoop1, _lib._sel_mainRunLoop1); + return _ret.address == 0 + ? null + : NSRunLoop._(_ret, _lib, retain: true, release: true); + } + + NSString get currentMode { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_currentMode1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + ffi.Pointer<__CFRunLoop> getCFRunLoop() { + return _lib._objc_msgSend_642(_id, _lib._sel_getCFRunLoop1); + } + + void addTimer_forMode_(NSTimer? timer, NSString mode) { + return _lib._objc_msgSend_648( + _id, _lib._sel_addTimer_forMode_1, timer?._id ?? ffi.nullptr, mode._id); + } + + void addPort_forMode_(NSPort? aPort, NSString mode) { + return _lib._objc_msgSend_654( + _id, _lib._sel_addPort_forMode_1, aPort?._id ?? ffi.nullptr, mode._id); + } + + void removePort_forMode_(NSPort? aPort, NSString mode) { + return _lib._objc_msgSend_654(_id, _lib._sel_removePort_forMode_1, + aPort?._id ?? ffi.nullptr, mode._id); + } + + NSDate limitDateForMode_(NSString mode) { + final _ret = + _lib._objc_msgSend_560(_id, _lib._sel_limitDateForMode_1, mode._id); + return NSDate._(_ret, _lib, retain: true, release: true); + } + + void acceptInputForMode_beforeDate_(NSString mode, NSDate? limitDate) { + return _lib._objc_msgSend_655( + _id, + _lib._sel_acceptInputForMode_beforeDate_1, + mode._id, + limitDate?._id ?? ffi.nullptr); + } + + void run() { + return _lib._objc_msgSend_1(_id, _lib._sel_run1); + } + + void runUntilDate_(NSDate? limitDate) { + return _lib._objc_msgSend_465( + _id, _lib._sel_runUntilDate_1, limitDate?._id ?? ffi.nullptr); + } + + bool runMode_beforeDate_(NSString mode, NSDate? limitDate) { + return _lib._objc_msgSend_656(_id, _lib._sel_runMode_beforeDate_1, mode._id, + limitDate?._id ?? ffi.nullptr); + } + + void configureAsServer() { + return _lib._objc_msgSend_1(_id, _lib._sel_configureAsServer1); + } + + /// Schedules the execution of a block on the target run loop in given modes. + /// - parameter: modes An array of input modes for which the block may be executed. + /// - parameter: block The block to execute + void performInModes_block_(NSArray? modes, ObjCBlock21 block) { + return _lib._objc_msgSend_657(_id, _lib._sel_performInModes_block_1, + modes?._id ?? ffi.nullptr, block._id); + } + + /// Schedules the execution of a block on the target run loop. + /// - parameter: block The block to execute + void performBlock_(ObjCBlock21 block) { + return _lib._objc_msgSend_458(_id, _lib._sel_performBlock_1, block._id); + } + + void performSelector_target_argument_order_modes_( + ffi.Pointer aSelector, + NSObject target, + NSObject arg, + int order, + NSArray? modes) { + return _lib._objc_msgSend_658( + _id, + _lib._sel_performSelector_target_argument_order_modes_1, + aSelector, + target._id, + arg._id, + order, + modes?._id ?? ffi.nullptr); + } + + void cancelPerformSelector_target_argument_( + ffi.Pointer aSelector, NSObject target, NSObject arg) { + return _lib._objc_msgSend_459( + _id, + _lib._sel_cancelPerformSelector_target_argument_1, + aSelector, + target._id, + arg._id); + } + + void cancelPerformSelectorsWithTarget_(NSObject target) { + return _lib._objc_msgSend_15( + _id, _lib._sel_cancelPerformSelectorsWithTarget_1, target._id); + } + + static NSRunLoop new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSRunLoop1, _lib._sel_new1); + return NSRunLoop._(_ret, _lib, retain: false, release: true); + } + + static NSRunLoop alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSRunLoop1, _lib._sel_alloc1); + return NSRunLoop._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSRunLoop1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSRunLoop1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSRunLoop1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSRunLoop1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSRunLoop1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSRunLoop1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSRunLoop1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSRunLoop1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSRunLoop1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class __CFRunLoop extends ffi.Opaque {} + +class NSTimer extends NSObject { + NSTimer._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSTimer] that points to the same underlying object as [other]. + static NSTimer castFrom(T other) { + return NSTimer._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSTimer] that wraps the given raw object pointer. + static NSTimer castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSTimer._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSTimer]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSTimer1); + } + + static NSTimer timerWithTimeInterval_invocation_repeats_( + PedometerBindings _lib, + double ti, + NSInvocation? invocation, + bool yesOrNo) { + final _ret = _lib._objc_msgSend_643( + _lib._class_NSTimer1, + _lib._sel_timerWithTimeInterval_invocation_repeats_1, + ti, + invocation?._id ?? ffi.nullptr, + yesOrNo); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + static NSTimer scheduledTimerWithTimeInterval_invocation_repeats_( + PedometerBindings _lib, + double ti, + NSInvocation? invocation, + bool yesOrNo) { + final _ret = _lib._objc_msgSend_643( + _lib._class_NSTimer1, + _lib._sel_scheduledTimerWithTimeInterval_invocation_repeats_1, + ti, + invocation?._id ?? ffi.nullptr, + yesOrNo); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + static NSTimer timerWithTimeInterval_target_selector_userInfo_repeats_( + PedometerBindings _lib, + double ti, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject userInfo, + bool yesOrNo) { + final _ret = _lib._objc_msgSend_644( + _lib._class_NSTimer1, + _lib._sel_timerWithTimeInterval_target_selector_userInfo_repeats_1, + ti, + aTarget._id, + aSelector, + userInfo._id, + yesOrNo); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + static NSTimer + scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_( + PedometerBindings _lib, + double ti, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject userInfo, + bool yesOrNo) { + final _ret = _lib._objc_msgSend_644( + _lib._class_NSTimer1, + _lib._sel_scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_1, + ti, + aTarget._id, + aSelector, + userInfo._id, + yesOrNo); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + /// Creates and returns a new NSTimer object initialized with the specified block object. This timer needs to be scheduled on a run loop (via -[NSRunLoop addTimer:]) before it will fire. + /// - parameter: timeInterval The number of seconds between firings of the timer. If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead + /// - parameter: repeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. + /// - parameter: block The execution body of the timer; the timer itself is passed as the parameter to this block when executed to aid in avoiding cyclical references + static NSTimer timerWithTimeInterval_repeats_block_(PedometerBindings _lib, + double interval, bool repeats, ObjCBlock34 block) { + final _ret = _lib._objc_msgSend_645( + _lib._class_NSTimer1, + _lib._sel_timerWithTimeInterval_repeats_block_1, + interval, + repeats, + block._id); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + /// Creates and returns a new NSTimer object initialized with the specified block object and schedules it on the current run loop in the default mode. + /// - parameter: ti The number of seconds between firings of the timer. If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead + /// - parameter: repeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. + /// - parameter: block The execution body of the timer; the timer itself is passed as the parameter to this block when executed to aid in avoiding cyclical references + static NSTimer scheduledTimerWithTimeInterval_repeats_block_( + PedometerBindings _lib, + double interval, + bool repeats, + ObjCBlock34 block) { + final _ret = _lib._objc_msgSend_645( + _lib._class_NSTimer1, + _lib._sel_scheduledTimerWithTimeInterval_repeats_block_1, + interval, + repeats, + block._id); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + /// Initializes a new NSTimer object using the block as the main body of execution for the timer. This timer needs to be scheduled on a run loop (via -[NSRunLoop addTimer:]) before it will fire. + /// - parameter: fireDate The time at which the timer should first fire. + /// - parameter: interval The number of seconds between firings of the timer. If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead + /// - parameter: repeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. + /// - parameter: block The execution body of the timer; the timer itself is passed as the parameter to this block when executed to aid in avoiding cyclical references + NSTimer initWithFireDate_interval_repeats_block_( + NSDate? date, double interval, bool repeats, ObjCBlock34 block) { + final _ret = _lib._objc_msgSend_646( + _id, + _lib._sel_initWithFireDate_interval_repeats_block_1, + date?._id ?? ffi.nullptr, + interval, + repeats, + block._id); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + NSTimer initWithFireDate_interval_target_selector_userInfo_repeats_( + NSDate? date, + double ti, + NSObject t, + ffi.Pointer s, + NSObject ui, + bool rep) { + final _ret = _lib._objc_msgSend_647( + _id, + _lib._sel_initWithFireDate_interval_target_selector_userInfo_repeats_1, + date?._id ?? ffi.nullptr, + ti, + t._id, + s, + ui._id, + rep); + return NSTimer._(_ret, _lib, retain: true, release: true); + } + + void fire() { + return _lib._objc_msgSend_1(_id, _lib._sel_fire1); + } + + NSDate? get fireDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_fireDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + set fireDate(NSDate? value) { + _lib._objc_msgSend_608( + _id, _lib._sel_setFireDate_1, value?._id ?? ffi.nullptr); + } + + double get timeInterval { + return _lib._objc_msgSend_147(_id, _lib._sel_timeInterval1); + } + + double get tolerance { + return _lib._objc_msgSend_147(_id, _lib._sel_tolerance1); + } + + set tolerance(double value) { + _lib._objc_msgSend_467(_id, _lib._sel_setTolerance_1, value); + } + + void invalidate() { + return _lib._objc_msgSend_1(_id, _lib._sel_invalidate1); + } + + bool get valid { + return _lib._objc_msgSend_12(_id, _lib._sel_isValid1); + } + + NSObject get userInfo { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_userInfo1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSTimer new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSTimer1, _lib._sel_new1); + return NSTimer._(_ret, _lib, retain: false, release: true); + } + + static NSTimer alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSTimer1, _lib._sel_alloc1); + return NSTimer._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSTimer1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSTimer1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSTimer1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSTimer1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSTimer1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSTimer1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSTimer1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSTimer1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSTimer1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock34_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock34_closureRegistry = {}; +int _ObjCBlock34_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock34_registerClosure(Function fn) { + final id = ++_ObjCBlock34_closureRegistryIndex; + _ObjCBlock34_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock34_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock34_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock34 extends _ObjCBlockBase { + ObjCBlock34._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock34.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock34_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock34.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock34_closureTrampoline) + .cast(), + _ObjCBlock34_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSPort extends NSObject { + NSPort._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSPort] that points to the same underlying object as [other]. + static NSPort castFrom(T other) { + return NSPort._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSPort] that wraps the given raw object pointer. + static NSPort castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSPort._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSPort]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSPort1); + } + + static NSPort port(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_649(_lib._class_NSPort1, _lib._sel_port1); + return NSPort._(_ret, _lib, retain: true, release: true); + } + + void invalidate() { + return _lib._objc_msgSend_1(_id, _lib._sel_invalidate1); + } + + bool get valid { + return _lib._objc_msgSend_12(_id, _lib._sel_isValid1); + } + + void setDelegate_(NSObject? anObject) { + return _lib._objc_msgSend_15( + _id, _lib._sel_setDelegate_1, anObject?._id ?? ffi.nullptr); + } + + NSObject delegate() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void scheduleInRunLoop_forMode_(NSRunLoop? runLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_scheduleInRunLoop_forMode_1, + runLoop?._id ?? ffi.nullptr, mode._id); + } + + void removeFromRunLoop_forMode_(NSRunLoop? runLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_removeFromRunLoop_forMode_1, + runLoop?._id ?? ffi.nullptr, mode._id); + } + + int get reservedSpaceLength { + return _lib._objc_msgSend_10(_id, _lib._sel_reservedSpaceLength1); + } + + bool sendBeforeDate_components_from_reserved_( + NSDate? limitDate, + NSMutableArray? components, + NSPort? receivePort, + int headerSpaceReserved) { + return _lib._objc_msgSend_651( + _id, + _lib._sel_sendBeforeDate_components_from_reserved_1, + limitDate?._id ?? ffi.nullptr, + components?._id ?? ffi.nullptr, + receivePort?._id ?? ffi.nullptr, + headerSpaceReserved); + } + + bool sendBeforeDate_msgid_components_from_reserved_( + NSDate? limitDate, + int msgID, + NSMutableArray? components, + NSPort? receivePort, + int headerSpaceReserved) { + return _lib._objc_msgSend_652( + _id, + _lib._sel_sendBeforeDate_msgid_components_from_reserved_1, + limitDate?._id ?? ffi.nullptr, + msgID, + components?._id ?? ffi.nullptr, + receivePort?._id ?? ffi.nullptr, + headerSpaceReserved); + } + + void addConnection_toRunLoop_forMode_( + NSConnection? conn, NSRunLoop? runLoop, NSString mode) { + return _lib._objc_msgSend_653( + _id, + _lib._sel_addConnection_toRunLoop_forMode_1, + conn?._id ?? ffi.nullptr, + runLoop?._id ?? ffi.nullptr, + mode._id); + } + + void removeConnection_fromRunLoop_forMode_( + NSConnection? conn, NSRunLoop? runLoop, NSString mode) { + return _lib._objc_msgSend_653( + _id, + _lib._sel_removeConnection_fromRunLoop_forMode_1, + conn?._id ?? ffi.nullptr, + runLoop?._id ?? ffi.nullptr, + mode._id); + } + + static NSPort new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSPort1, _lib._sel_new1); + return NSPort._(_ret, _lib, retain: false, release: true); + } + + static NSPort alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSPort1, _lib._sel_alloc1); + return NSPort._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSPort1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSPort1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSPort1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSPort1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSPort1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSPort1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSPort1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSPort1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSPort1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSConnection extends _ObjCWrapper { + NSConnection._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSConnection] that points to the same underlying object as [other]. + static NSConnection castFrom(T other) { + return NSConnection._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSConnection] that wraps the given raw object pointer. + static NSConnection castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSConnection._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSConnection]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSConnection1); + } +} + +class NSFileHandle extends NSObject { + NSFileHandle._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSFileHandle] that points to the same underlying object as [other]. + static NSFileHandle castFrom(T other) { + return NSFileHandle._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSFileHandle] that wraps the given raw object pointer. + static NSFileHandle castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSFileHandle._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSFileHandle]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSFileHandle1); + } + + NSData? get availableData { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_availableData1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSFileHandle initWithFileDescriptor_closeOnDealloc_(int fd, bool closeopt) { + final _ret = _lib._objc_msgSend_659( + _id, _lib._sel_initWithFileDescriptor_closeOnDealloc_1, fd, closeopt); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + NSFileHandle initWithCoder_(NSCoder? coder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, coder?._id ?? ffi.nullptr); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + NSData readDataToEndOfFileAndReturnError_( + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_660( + _id, _lib._sel_readDataToEndOfFileAndReturnError_1, error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData readDataUpToLength_error_( + int length, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_661( + _id, _lib._sel_readDataUpToLength_error_1, length, error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + bool writeData_error_( + NSData? data, ffi.Pointer> error) { + return _lib._objc_msgSend_662( + _id, _lib._sel_writeData_error_1, data?._id ?? ffi.nullptr, error); + } + + bool getOffset_error_(ffi.Pointer offsetInFile, + ffi.Pointer> error) { + return _lib._objc_msgSend_663( + _id, _lib._sel_getOffset_error_1, offsetInFile, error); + } + + bool seekToEndReturningOffset_error_( + ffi.Pointer offsetInFile, + ffi.Pointer> error) { + return _lib._objc_msgSend_663( + _id, _lib._sel_seekToEndReturningOffset_error_1, offsetInFile, error); + } + + bool seekToOffset_error_( + int offset, ffi.Pointer> error) { + return _lib._objc_msgSend_664( + _id, _lib._sel_seekToOffset_error_1, offset, error); + } + + bool truncateAtOffset_error_( + int offset, ffi.Pointer> error) { + return _lib._objc_msgSend_664( + _id, _lib._sel_truncateAtOffset_error_1, offset, error); + } + + bool synchronizeAndReturnError_(ffi.Pointer> error) { + return _lib._objc_msgSend_183( + _id, _lib._sel_synchronizeAndReturnError_1, error); + } + + bool closeAndReturnError_(ffi.Pointer> error) { + return _lib._objc_msgSend_183(_id, _lib._sel_closeAndReturnError_1, error); + } + + static NSFileHandle? getFileHandleWithStandardInput(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_665( + _lib._class_NSFileHandle1, _lib._sel_fileHandleWithStandardInput1); + return _ret.address == 0 + ? null + : NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle? getFileHandleWithStandardOutput(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_665( + _lib._class_NSFileHandle1, _lib._sel_fileHandleWithStandardOutput1); + return _ret.address == 0 + ? null + : NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle? getFileHandleWithStandardError(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_665( + _lib._class_NSFileHandle1, _lib._sel_fileHandleWithStandardError1); + return _ret.address == 0 + ? null + : NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle? getFileHandleWithNullDevice(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_665( + _lib._class_NSFileHandle1, _lib._sel_fileHandleWithNullDevice1); + return _ret.address == 0 + ? null + : NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle fileHandleForReadingAtPath_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSFileHandle1, + _lib._sel_fileHandleForReadingAtPath_1, path?._id ?? ffi.nullptr); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle fileHandleForWritingAtPath_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSFileHandle1, + _lib._sel_fileHandleForWritingAtPath_1, path?._id ?? ffi.nullptr); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle fileHandleForUpdatingAtPath_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSFileHandle1, + _lib._sel_fileHandleForUpdatingAtPath_1, path?._id ?? ffi.nullptr); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle fileHandleForReadingFromURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_666( + _lib._class_NSFileHandle1, + _lib._sel_fileHandleForReadingFromURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle fileHandleForWritingToURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_666( + _lib._class_NSFileHandle1, + _lib._sel_fileHandleForWritingToURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + static NSFileHandle fileHandleForUpdatingURL_error_(PedometerBindings _lib, + NSURL? url, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_666( + _lib._class_NSFileHandle1, + _lib._sel_fileHandleForUpdatingURL_error_1, + url?._id ?? ffi.nullptr, + error); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + void readInBackgroundAndNotifyForModes_(NSArray? modes) { + return _lib._objc_msgSend_403( + _id, + _lib._sel_readInBackgroundAndNotifyForModes_1, + modes?._id ?? ffi.nullptr); + } + + void readInBackgroundAndNotify() { + return _lib._objc_msgSend_1(_id, _lib._sel_readInBackgroundAndNotify1); + } + + void readToEndOfFileInBackgroundAndNotifyForModes_(NSArray? modes) { + return _lib._objc_msgSend_403( + _id, + _lib._sel_readToEndOfFileInBackgroundAndNotifyForModes_1, + modes?._id ?? ffi.nullptr); + } + + void readToEndOfFileInBackgroundAndNotify() { + return _lib._objc_msgSend_1( + _id, _lib._sel_readToEndOfFileInBackgroundAndNotify1); + } + + void acceptConnectionInBackgroundAndNotifyForModes_(NSArray? modes) { + return _lib._objc_msgSend_403( + _id, + _lib._sel_acceptConnectionInBackgroundAndNotifyForModes_1, + modes?._id ?? ffi.nullptr); + } + + void acceptConnectionInBackgroundAndNotify() { + return _lib._objc_msgSend_1( + _id, _lib._sel_acceptConnectionInBackgroundAndNotify1); + } + + void waitForDataInBackgroundAndNotifyForModes_(NSArray? modes) { + return _lib._objc_msgSend_403( + _id, + _lib._sel_waitForDataInBackgroundAndNotifyForModes_1, + modes?._id ?? ffi.nullptr); + } + + void waitForDataInBackgroundAndNotify() { + return _lib._objc_msgSend_1( + _id, _lib._sel_waitForDataInBackgroundAndNotify1); + } + + ObjCBlock35 get readabilityHandler { + final _ret = _lib._objc_msgSend_667(_id, _lib._sel_readabilityHandler1); + return ObjCBlock35._(_ret, _lib); + } + + set readabilityHandler(ObjCBlock35 value) { + _lib._objc_msgSend_668(_id, _lib._sel_setReadabilityHandler_1, value._id); + } + + ObjCBlock35 get writeabilityHandler { + final _ret = _lib._objc_msgSend_667(_id, _lib._sel_writeabilityHandler1); + return ObjCBlock35._(_ret, _lib); + } + + set writeabilityHandler(ObjCBlock35 value) { + _lib._objc_msgSend_668(_id, _lib._sel_setWriteabilityHandler_1, value._id); + } + + NSFileHandle initWithFileDescriptor_(int fd) { + final _ret = + _lib._objc_msgSend_669(_id, _lib._sel_initWithFileDescriptor_1, fd); + return NSFileHandle._(_ret, _lib, retain: true, release: true); + } + + int get fileDescriptor { + return _lib._objc_msgSend_177(_id, _lib._sel_fileDescriptor1); + } + + NSData readDataToEndOfFile() { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_readDataToEndOfFile1); + return NSData._(_ret, _lib, retain: true, release: true); + } + + NSData readDataOfLength_(int length) { + final _ret = + _lib._objc_msgSend_289(_id, _lib._sel_readDataOfLength_1, length); + return NSData._(_ret, _lib, retain: true, release: true); + } + + void writeData_(NSData? data) { + return _lib._objc_msgSend_217( + _id, _lib._sel_writeData_1, data?._id ?? ffi.nullptr); + } + + int get offsetInFile { + return _lib._objc_msgSend_146(_id, _lib._sel_offsetInFile1); + } + + int seekToEndOfFile() { + return _lib._objc_msgSend_146(_id, _lib._sel_seekToEndOfFile1); + } + + void seekToFileOffset_(int offset) { + return _lib._objc_msgSend_670(_id, _lib._sel_seekToFileOffset_1, offset); + } + + void truncateFileAtOffset_(int offset) { + return _lib._objc_msgSend_670( + _id, _lib._sel_truncateFileAtOffset_1, offset); + } + + void synchronizeFile() { + return _lib._objc_msgSend_1(_id, _lib._sel_synchronizeFile1); + } + + void closeFile() { + return _lib._objc_msgSend_1(_id, _lib._sel_closeFile1); + } + + static NSFileHandle new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFileHandle1, _lib._sel_new1); + return NSFileHandle._(_ret, _lib, retain: false, release: true); + } + + static NSFileHandle alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFileHandle1, _lib._sel_alloc1); + return NSFileHandle._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSFileHandle1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSFileHandle1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFileHandle1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFileHandle1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSFileHandle1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSFileHandle1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSFileHandle1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSFileHandle1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSFileHandle1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock35_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock35_closureRegistry = {}; +int _ObjCBlock35_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock35_registerClosure(Function fn) { + final id = ++_ObjCBlock35_closureRegistryIndex; + _ObjCBlock35_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock35_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock35_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock35 extends _ObjCBlockBase { + ObjCBlock35._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock35.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock35_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock35.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock35_closureTrampoline) + .cast(), + _ObjCBlock35_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// ! +/// @class NSHTTPCookieStorage +/// @discussion NSHTTPCookieStorage implements a singleton object (shared +/// instance) which manages the shared cookie store. It has methods +/// to allow clients to set and remove cookies, and get the current +/// set of cookies. It also has convenience methods to parse and +/// generate cookie-related HTTP header fields. +class NSHTTPCookieStorage extends NSObject { + NSHTTPCookieStorage._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSHTTPCookieStorage] that points to the same underlying object as [other]. + static NSHTTPCookieStorage castFrom(T other) { + return NSHTTPCookieStorage._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSHTTPCookieStorage] that wraps the given raw object pointer. + static NSHTTPCookieStorage castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSHTTPCookieStorage._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSHTTPCookieStorage]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSHTTPCookieStorage1); + } + + /// ! + /// @property sharedHTTPCookieStorage + /// @abstract Get the shared cookie storage in the default location. + /// @result The shared cookie storage + /// @discussion Starting in OS X 10.11, each app has its own sharedHTTPCookieStorage singleton, + /// which will not be shared with other applications. + static NSHTTPCookieStorage? getSharedHTTPCookieStorage( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_671( + _lib._class_NSHTTPCookieStorage1, _lib._sel_sharedHTTPCookieStorage1); + return _ret.address == 0 + ? null + : NSHTTPCookieStorage._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method sharedCookieStorageForGroupContainerIdentifier: + /// @abstract Get the cookie storage for the container associated with the specified application group identifier + /// @param identifier The application group identifier + /// @result A cookie storage with a persistent store in the application group container + /// @discussion By default, applications and associated app extensions have different data containers, which means + /// that the sharedHTTPCookieStorage singleton will refer to different persistent cookie stores in an application and + /// any app extensions that it contains. This method allows clients to create a persistent cookie storage that can be + /// shared among all applications and extensions with access to the same application group. Subsequent calls to this + /// method with the same identifier will return the same cookie storage instance. + static NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier_( + PedometerBindings _lib, NSString? identifier) { + final _ret = _lib._objc_msgSend_672( + _lib._class_NSHTTPCookieStorage1, + _lib._sel_sharedCookieStorageForGroupContainerIdentifier_1, + identifier?._id ?? ffi.nullptr); + return NSHTTPCookieStorage._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get all the cookies + /// @result An NSArray of NSHTTPCookies + NSArray? get cookies { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_cookies1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method setCookie: + /// @abstract Set a cookie + /// @discussion The cookie will override an existing cookie with the + /// same name, domain and path, if any. + void setCookie_(NSHTTPCookie? cookie) { + return _lib._objc_msgSend_675( + _id, _lib._sel_setCookie_1, cookie?._id ?? ffi.nullptr); + } + + /// ! + /// @method deleteCookie: + /// @abstract Delete the specified cookie + void deleteCookie_(NSHTTPCookie? cookie) { + return _lib._objc_msgSend_675( + _id, _lib._sel_deleteCookie_1, cookie?._id ?? ffi.nullptr); + } + + /// ! + /// @method removeCookiesSince: + /// @abstract Delete all cookies from the cookie storage since the provided date. + void removeCookiesSinceDate_(NSDate? date) { + return _lib._objc_msgSend_465( + _id, _lib._sel_removeCookiesSinceDate_1, date?._id ?? ffi.nullptr); + } + + /// ! + /// @method cookiesForURL: + /// @abstract Returns an array of cookies to send to the given URL. + /// @param URL The URL for which to get cookies. + /// @result an NSArray of NSHTTPCookie objects. + /// @discussion The cookie manager examines the cookies it stores and + /// includes those which should be sent to the given URL. You can use + /// +[NSCookie requestHeaderFieldsWithCookies:] to turn this array + /// into a set of header fields to add to a request. + NSArray cookiesForURL_(NSURL? URL) { + final _ret = _lib._objc_msgSend_116( + _id, _lib._sel_cookiesForURL_1, URL?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method setCookies:forURL:mainDocumentURL: + /// @abstract Adds an array cookies to the cookie store, following the + /// cookie accept policy. + /// @param cookies The cookies to set. + /// @param URL The URL from which the cookies were sent. + /// @param mainDocumentURL The main document URL to be used as a base for the "same + /// domain as main document" policy. + /// @discussion For mainDocumentURL, the caller should pass the URL for + /// an appropriate main document, if known. For example, when loading + /// a web page, the URL of the main html document for the top-level + /// frame should be passed. To save cookies based on a set of response + /// headers, you can use +[NSCookie + /// cookiesWithResponseHeaderFields:forURL:] on a header field + /// dictionary and then use this method to store the resulting cookies + /// in accordance with policy settings. + void setCookies_forURL_mainDocumentURL_( + NSArray? cookies, NSURL? URL, NSURL? mainDocumentURL) { + return _lib._objc_msgSend_676( + _id, + _lib._sel_setCookies_forURL_mainDocumentURL_1, + cookies?._id ?? ffi.nullptr, + URL?._id ?? ffi.nullptr, + mainDocumentURL?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract The cookie accept policy preference of the + /// receiver. + int get cookieAcceptPolicy { + return _lib._objc_msgSend_677(_id, _lib._sel_cookieAcceptPolicy1); + } + + /// ! + /// @abstract The cookie accept policy preference of the + /// receiver. + set cookieAcceptPolicy(int value) { + _lib._objc_msgSend_678(_id, _lib._sel_setCookieAcceptPolicy_1, value); + } + + /// ! + /// @method sortedCookiesUsingDescriptors: + /// @abstract Returns an array of all cookies in the store, sorted according to the key value and sorting direction of the NSSortDescriptors specified in the parameter. + /// @param sortOrder an array of NSSortDescriptors which represent the preferred sort order of the resulting array. + /// @discussion proper sorting of cookies may require extensive string conversion, which can be avoided by allowing the system to perform the sorting. This API is to be preferred over the more generic -[NSHTTPCookieStorage cookies] API, if sorting is going to be performed. + NSArray sortedCookiesUsingDescriptors_(NSArray? sortOrder) { + final _ret = _lib._objc_msgSend_55( + _id, + _lib._sel_sortedCookiesUsingDescriptors_1, + sortOrder?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + void storeCookies_forTask_(NSArray? cookies, NSURLSessionTask? task) { + return _lib._objc_msgSend_697(_id, _lib._sel_storeCookies_forTask_1, + cookies?._id ?? ffi.nullptr, task?._id ?? ffi.nullptr); + } + + void getCookiesForTask_completionHandler_( + NSURLSessionTask? task, ObjCBlock36 completionHandler) { + return _lib._objc_msgSend_698( + _id, + _lib._sel_getCookiesForTask_completionHandler_1, + task?._id ?? ffi.nullptr, + completionHandler._id); + } + + static NSHTTPCookieStorage new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSHTTPCookieStorage1, _lib._sel_new1); + return NSHTTPCookieStorage._(_ret, _lib, retain: false, release: true); + } + + static NSHTTPCookieStorage alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSHTTPCookieStorage1, _lib._sel_alloc1); + return NSHTTPCookieStorage._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSHTTPCookieStorage1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSHTTPCookieStorage1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSHTTPCookieStorage1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSHTTPCookieStorage1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSHTTPCookieStorage1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSHTTPCookieStorage1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSHTTPCookieStorage1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSHTTPCookieStorage1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSHTTPCookieStorage1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @class NSHTTPCookie +/// @abstract NSHTTPCookie represents an http cookie. +/// @discussion A NSHTTPCookie instance represents a single http cookie. It is +/// an immutable object initialized from a dictionary that contains +/// the various cookie attributes. It has accessors to get the various +/// attributes of a cookie. +class NSHTTPCookie extends NSObject { + NSHTTPCookie._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSHTTPCookie] that points to the same underlying object as [other]. + static NSHTTPCookie castFrom(T other) { + return NSHTTPCookie._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSHTTPCookie] that wraps the given raw object pointer. + static NSHTTPCookie castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSHTTPCookie._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSHTTPCookie]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSHTTPCookie1); + } + + /// ! + /// @method initWithProperties: + /// @abstract Initialize a NSHTTPCookie object with a dictionary of + /// parameters + /// @param properties The dictionary of properties to be used to + /// initialize this cookie. + /// @discussion Supported dictionary keys and value types for the + /// given dictionary are as follows. + /// + /// All properties can handle an NSString value, but some can also + /// handle other types. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + ///
Property key constantType of valueRequiredDescription
NSHTTPCookieCommentNSStringNOComment for the cookie. Only valid for version 1 cookies and + /// later. Default is nil.
NSHTTPCookieCommentURLNSURL or NSStringNOComment URL for the cookie. Only valid for version 1 cookies + /// and later. Default is nil.
NSHTTPCookieDomainNSStringSpecial, a value for either NSHTTPCookieOriginURL or + /// NSHTTPCookieDomain must be specified.Domain for the cookie. Inferred from the value for + /// NSHTTPCookieOriginURL if not provided.
NSHTTPCookieDiscardNSStringNOA string stating whether the cookie should be discarded at + /// the end of the session. String value must be either "TRUE" or + /// "FALSE". Default is "FALSE", unless this is cookie is version + /// 1 or greater and a value for NSHTTPCookieMaximumAge is not + /// specified, in which case it is assumed "TRUE".
NSHTTPCookieExpiresNSDate or NSStringNOExpiration date for the cookie. Used only for version 0 + /// cookies. Ignored for version 1 or greater.
NSHTTPCookieMaximumAgeNSStringNOA string containing an integer value stating how long in + /// seconds the cookie should be kept, at most. Only valid for + /// version 1 cookies and later. Default is "0".
NSHTTPCookieNameNSStringYESName of the cookie
NSHTTPCookieOriginURLNSURL or NSStringSpecial, a value for either NSHTTPCookieOriginURL or + /// NSHTTPCookieDomain must be specified.URL that set this cookie. Used as default for other fields + /// as noted.
NSHTTPCookiePathNSStringNOPath for the cookie. Inferred from the value for + /// NSHTTPCookieOriginURL if not provided. Default is "/".
NSHTTPCookiePortNSStringNOcomma-separated integer values specifying the ports for the + /// cookie. Only valid for version 1 cookies and later. Default is + /// empty string ("").
NSHTTPCookieSecureNSStringNOA string stating whether the cookie should be transmitted + /// only over secure channels. String value must be either "TRUE" + /// or "FALSE". Default is "FALSE".
NSHTTPCookieValueNSStringYESValue of the cookie
NSHTTPCookieVersionNSStringNOSpecifies the version of the cookie. Must be either "0" or + /// "1". Default is "0".
+ ///

+ /// All other keys are ignored. + /// @result An initialized NSHTTPCookie, or nil if the set of + /// dictionary keys is invalid, for example because a required key is + /// missing, or a recognized key maps to an illegal value. + NSHTTPCookie initWithProperties_(NSDictionary? properties) { + final _ret = _lib._objc_msgSend_141( + _id, _lib._sel_initWithProperties_1, properties?._id ?? ffi.nullptr); + return NSHTTPCookie._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method cookieWithProperties: + /// @abstract Allocates and initializes an NSHTTPCookie with the given + /// dictionary. + /// @discussion See the NSHTTPCookie -initWithProperties: + /// method for more information on the constraints imposed on the + /// dictionary, and for descriptions of the supported keys and values. + /// @param properties The dictionary to use to initialize this cookie. + /// @result A newly-created and autoreleased NSHTTPCookie instance, or + /// nil if the set of dictionary keys is invalid, for example because + /// a required key is missing, or a recognized key maps to an illegal + /// value. + static NSHTTPCookie cookieWithProperties_( + PedometerBindings _lib, NSDictionary? properties) { + final _ret = _lib._objc_msgSend_673(_lib._class_NSHTTPCookie1, + _lib._sel_cookieWithProperties_1, properties?._id ?? ffi.nullptr); + return NSHTTPCookie._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method requestHeaderFieldsWithCookies: + /// @abstract Return a dictionary of header fields that can be used to add the + /// specified cookies to the request. + /// @param cookies The cookies to turn into request headers. + /// @result An NSDictionary where the keys are header field names, and the values + /// are the corresponding header field values. + static NSDictionary requestHeaderFieldsWithCookies_( + PedometerBindings _lib, NSArray? cookies) { + final _ret = _lib._objc_msgSend_437( + _lib._class_NSHTTPCookie1, + _lib._sel_requestHeaderFieldsWithCookies_1, + cookies?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method cookiesWithResponseHeaderFields:forURL: + /// @abstract Return an array of cookies parsed from the specified response header fields and URL. + /// @param headerFields The response header fields to check for cookies. + /// @param URL The URL that the cookies came from - relevant to how the cookies are interpreted. + /// @result An NSArray of NSHTTPCookie objects + /// @discussion This method will ignore irrelevant header fields so + /// you can pass a dictionary containing data other than cookie data. + static NSArray cookiesWithResponseHeaderFields_forURL_( + PedometerBindings _lib, NSDictionary? headerFields, NSURL? URL) { + final _ret = _lib._objc_msgSend_674( + _lib._class_NSHTTPCookie1, + _lib._sel_cookiesWithResponseHeaderFields_forURL_1, + headerFields?._id ?? ffi.nullptr, + URL?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns a dictionary representation of the receiver. + /// @discussion This method returns a dictionary representation of the + /// NSHTTPCookie which can be saved and passed to + /// -initWithProperties: or +cookieWithProperties: + /// later to reconstitute an equivalent cookie. + ///

See the NSHTTPCookie -initWithProperties: method for + /// more information on the constraints imposed on the dictionary, and + /// for descriptions of the supported keys and values. + /// @result The dictionary representation of the receiver. + NSDictionary? get properties { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_properties1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the version of the receiver. + /// @discussion Version 0 maps to "old-style" Netscape cookies. + /// Version 1 maps to RFC2965 cookies. There may be future versions. + /// @result the version of the receiver. + int get version { + return _lib._objc_msgSend_10(_id, _lib._sel_version1); + } + + /// ! + /// @abstract Returns the name of the receiver. + /// @result the name of the receiver. + NSString? get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the value of the receiver. + /// @result the value of the receiver. + NSString? get value { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_value1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the expires date of the receiver. + /// @result the expires date of the receiver. + /// @discussion The expires date is the date when the cookie should be + /// deleted. The result will be nil if there is no specific expires + /// date. This will be the case only for "session-only" cookies. + /// @result The expires date of the receiver. + NSDate? get expiresDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_expiresDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns whether the receiver is session-only. + /// @result YES if this receiver should be discarded at the end of the + /// session (regardless of expiration date), NO if receiver need not + /// be discarded at the end of the session. + bool get sessionOnly { + return _lib._objc_msgSend_12(_id, _lib._sel_isSessionOnly1); + } + + /// ! + /// @abstract Returns the domain of the receiver. + /// @discussion This value specifies URL domain to which the cookie + /// should be sent. A domain with a leading dot means the cookie + /// should be sent to subdomains as well, assuming certain other + /// restrictions are valid. See RFC 2965 for more detail. + /// @result The domain of the receiver. + NSString? get domain { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_domain1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the path of the receiver. + /// @discussion This value specifies the URL path under the cookie's + /// domain for which this cookie should be sent. The cookie will also + /// be sent for children of that path, so "/" is the most general. + /// @result The path of the receiver. + NSString? get path { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_path1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns whether the receiver should be sent only over + /// secure channels + /// @discussion Cookies may be marked secure by a server (or by a javascript). + /// Cookies marked as such must only be sent via an encrypted connection to + /// trusted servers (i.e. via SSL or TLS), and should not be delivered to any + /// javascript applications to prevent cross-site scripting vulnerabilities. + /// @result YES if this cookie should be sent only over secure channels, + /// NO otherwise. + bool get secure { + return _lib._objc_msgSend_12(_id, _lib._sel_isSecure1); + } + + /// ! + /// @abstract Returns whether the receiver should only be sent to HTTP servers + /// per RFC 2965 + /// @discussion Cookies may be marked as HTTPOnly by a server (or by a javascript). + /// Cookies marked as such must only be sent via HTTP Headers in HTTP Requests + /// for URL's that match both the path and domain of the respective Cookies. + /// Specifically these cookies should not be delivered to any javascript + /// applications to prevent cross-site scripting vulnerabilities. + /// @result YES if this cookie should only be sent via HTTP headers, + /// NO otherwise. + bool get HTTPOnly { + return _lib._objc_msgSend_12(_id, _lib._sel_isHTTPOnly1); + } + + /// ! + /// @abstract Returns the comment of the receiver. + /// @discussion This value specifies a string which is suitable for + /// presentation to the user explaining the contents and purpose of this + /// cookie. It may be nil. + /// @result The comment of the receiver, or nil if the receiver has no + /// comment. + NSString? get comment { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_comment1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the comment URL of the receiver. + /// @discussion This value specifies a URL which is suitable for + /// presentation to the user as a link for further information about + /// this cookie. It may be nil. + /// @result The comment URL of the receiver, or nil if the receiver + /// has no comment URL. + NSURL? get commentURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_commentURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the list ports to which the receiver should be + /// sent. + /// @discussion This value specifies an NSArray of NSNumbers + /// (containing integers) which specify the only ports to which this + /// cookie should be sent. + /// @result The list ports to which the receiver should be sent. The + /// array may be nil, in which case this cookie can be sent to any + /// port. + NSArray? get portList { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_portList1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the value of the same site attribute on the cookie. + /// @discussion Cookies can be marked with an attribute Strict or Lax. + /// Cookies marked with "strict" (NSHTTPCookieSameSiteStrict) are not sent along with cross-site requests. + /// Cookies marked with "lax" (NSHTTPCookieSameSiteLax) sent along cross-site requests provided the + /// cross-site requests are top-level-requests (one that changes the url in the address bar). + /// The attribute value is canonicalized and stored. Any value other than the default (strict and lax) will be ignored. + /// @result strict or lax. The result could also be nil, in which case the + /// cookie will be sent along with all cross-site requests. + NSString get sameSitePolicy { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_sameSitePolicy1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSHTTPCookie new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSHTTPCookie1, _lib._sel_new1); + return NSHTTPCookie._(_ret, _lib, retain: false, release: true); + } + + static NSHTTPCookie alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSHTTPCookie1, _lib._sel_alloc1); + return NSHTTPCookie._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSHTTPCookie1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSHTTPCookie1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSHTTPCookie1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSHTTPCookie1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSHTTPCookie1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSHTTPCookie1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSHTTPCookie1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSHTTPCookie1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSHTTPCookie1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @enum NSHTTPCookieAcceptPolicy +/// @abstract Values for the different cookie accept policies +/// @constant NSHTTPCookieAcceptPolicyAlways Accept all cookies +/// @constant NSHTTPCookieAcceptPolicyNever Reject all cookies +/// @constant NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain Accept cookies +/// only from the main document domain +abstract class NSHTTPCookieAcceptPolicy { + static const int NSHTTPCookieAcceptPolicyAlways = 0; + static const int NSHTTPCookieAcceptPolicyNever = 1; + static const int NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain = 2; +} + +class NSURLSessionTask extends NSObject { + NSURLSessionTask._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionTask] that points to the same underlying object as [other]. + static NSURLSessionTask castFrom(T other) { + return NSURLSessionTask._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionTask] that wraps the given raw object pointer. + static NSURLSessionTask castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionTask._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionTask]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionTask1); + } + + int get taskIdentifier { + return _lib._objc_msgSend_10(_id, _lib._sel_taskIdentifier1); + } + + NSURLRequest? get originalRequest { + final _ret = _lib._objc_msgSend_692(_id, _lib._sel_originalRequest1); + return _ret.address == 0 + ? null + : NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + NSURLRequest? get currentRequest { + final _ret = _lib._objc_msgSend_692(_id, _lib._sel_currentRequest1); + return _ret.address == 0 + ? null + : NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + NSURLResponse? get response { + final _ret = _lib._objc_msgSend_694(_id, _lib._sel_response1); + return _ret.address == 0 + ? null + : NSURLResponse._(_ret, _lib, retain: true, release: true); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + set delegate(NSObject? value) { + _lib._objc_msgSend_348( + _id, _lib._sel_setDelegate_1, value?._id ?? ffi.nullptr); + } + + NSProgress? get progress { + final _ret = _lib._objc_msgSend_475(_id, _lib._sel_progress1); + return _ret.address == 0 + ? null + : NSProgress._(_ret, _lib, retain: true, release: true); + } + + NSDate? get earliestBeginDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_earliestBeginDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + set earliestBeginDate(NSDate? value) { + _lib._objc_msgSend_608( + _id, _lib._sel_setEarliestBeginDate_1, value?._id ?? ffi.nullptr); + } + + int get countOfBytesClientExpectsToSend { + return _lib._objc_msgSend_482( + _id, _lib._sel_countOfBytesClientExpectsToSend1); + } + + set countOfBytesClientExpectsToSend(int value) { + _lib._objc_msgSend_483( + _id, _lib._sel_setCountOfBytesClientExpectsToSend_1, value); + } + + int get countOfBytesClientExpectsToReceive { + return _lib._objc_msgSend_482( + _id, _lib._sel_countOfBytesClientExpectsToReceive1); + } + + set countOfBytesClientExpectsToReceive(int value) { + _lib._objc_msgSend_483( + _id, _lib._sel_setCountOfBytesClientExpectsToReceive_1, value); + } + + int get countOfBytesSent { + return _lib._objc_msgSend_482(_id, _lib._sel_countOfBytesSent1); + } + + int get countOfBytesReceived { + return _lib._objc_msgSend_482(_id, _lib._sel_countOfBytesReceived1); + } + + int get countOfBytesExpectedToSend { + return _lib._objc_msgSend_482(_id, _lib._sel_countOfBytesExpectedToSend1); + } + + int get countOfBytesExpectedToReceive { + return _lib._objc_msgSend_482( + _id, _lib._sel_countOfBytesExpectedToReceive1); + } + + NSString? get taskDescription { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_taskDescription1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set taskDescription(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setTaskDescription_1, value?._id ?? ffi.nullptr); + } + + void cancel() { + return _lib._objc_msgSend_1(_id, _lib._sel_cancel1); + } + + int get state { + return _lib._objc_msgSend_695(_id, _lib._sel_state1); + } + + NSError? get error { + final _ret = _lib._objc_msgSend_252(_id, _lib._sel_error1); + return _ret.address == 0 + ? null + : NSError._(_ret, _lib, retain: true, release: true); + } + + void suspend() { + return _lib._objc_msgSend_1(_id, _lib._sel_suspend1); + } + + void resume() { + return _lib._objc_msgSend_1(_id, _lib._sel_resume1); + } + + double get priority { + return _lib._objc_msgSend_179(_id, _lib._sel_priority1); + } + + set priority(double value) { + _lib._objc_msgSend_696(_id, _lib._sel_setPriority_1, value); + } + + bool get prefersIncrementalDelivery { + return _lib._objc_msgSend_12(_id, _lib._sel_prefersIncrementalDelivery1); + } + + set prefersIncrementalDelivery(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setPrefersIncrementalDelivery_1, value); + } + + @override + NSURLSessionTask init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionTask new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLSessionTask1, _lib._sel_new1); + return NSURLSessionTask._(_ret, _lib, retain: false, release: true); + } + + static NSURLSessionTask alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLSessionTask1, _lib._sel_alloc1); + return NSURLSessionTask._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionTask1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionTask1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionTask1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionTask1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionTask1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionTask1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionTask1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @class NSURLRequest +/// +/// @abstract An NSURLRequest object represents a URL load request in a +/// manner independent of protocol and URL scheme. +/// +/// @discussion NSURLRequest encapsulates two basic data elements about +/// a URL load request: +///

    +///
  • The URL to load. +///
  • The policy to use when consulting the URL content cache made +/// available by the implementation. +///
+/// In addition, NSURLRequest is designed to be extended to support +/// protocol-specific data by adding categories to access a property +/// object provided in an interface targeted at protocol implementors. +///
    +///
  • Protocol implementors should direct their attention to the +/// NSURLRequestExtensibility category on NSURLRequest for more +/// information on how to provide extensions on NSURLRequest to +/// support protocol-specific request information. +///
  • Clients of this API who wish to create NSURLRequest objects to +/// load URL content should consult the protocol-specific NSURLRequest +/// categories that are available. The NSHTTPURLRequest category on +/// NSURLRequest is an example. +///
+///

+/// Objects of this class are used to create NSURLConnection instances, +/// which can are used to perform the load of a URL, or as input to the +/// NSURLConnection class method which performs synchronous loads. +class NSURLRequest extends NSObject { + NSURLRequest._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLRequest] that points to the same underlying object as [other]. + static NSURLRequest castFrom(T other) { + return NSURLRequest._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSURLRequest] that wraps the given raw object pointer. + static NSURLRequest castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLRequest._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLRequest]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSURLRequest1); + } + + /// ! + /// @method requestWithURL: + /// @abstract Allocates and initializes an NSURLRequest with the given + /// URL. + /// @discussion Default values are used for cache policy + /// (NSURLRequestUseProtocolCachePolicy) and timeout interval (60 + /// seconds). + /// @param URL The URL for the request. + /// @result A newly-created and autoreleased NSURLRequest instance. + static NSURLRequest requestWithURL_(PedometerBindings _lib, NSURL? URL) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSURLRequest1, + _lib._sel_requestWithURL_1, URL?._id ?? ffi.nullptr); + return NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @property supportsSecureCoding + /// @abstract Indicates that NSURLRequest implements the NSSecureCoding protocol. + /// @result A BOOL value set to YES. + static bool getSupportsSecureCoding(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLRequest1, _lib._sel_supportsSecureCoding1); + } + + /// ! + /// @method requestWithURL:cachePolicy:timeoutInterval: + /// @abstract Allocates and initializes a NSURLRequest with the given + /// URL and cache policy. + /// @param URL The URL for the request. + /// @param cachePolicy The cache policy for the request. + /// @param timeoutInterval The timeout interval for the request. See the + /// commentary for the timeoutInterval for more information on + /// timeout intervals. + /// @result A newly-created and autoreleased NSURLRequest instance. + static NSURLRequest requestWithURL_cachePolicy_timeoutInterval_( + PedometerBindings _lib, + NSURL? URL, + int cachePolicy, + double timeoutInterval) { + final _ret = _lib._objc_msgSend_679( + _lib._class_NSURLRequest1, + _lib._sel_requestWithURL_cachePolicy_timeoutInterval_1, + URL?._id ?? ffi.nullptr, + cachePolicy, + timeoutInterval); + return NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method initWithURL: + /// @abstract Initializes an NSURLRequest with the given URL. + /// @discussion Default values are used for cache policy + /// (NSURLRequestUseProtocolCachePolicy) and timeout interval (60 + /// seconds). + /// @param URL The URL for the request. + /// @result An initialized NSURLRequest. + NSURLRequest initWithURL_(NSURL? URL) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithURL_1, URL?._id ?? ffi.nullptr); + return NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method initWithURL: + /// @abstract Initializes an NSURLRequest with the given URL and + /// cache policy. + /// @discussion This is the designated initializer for the + /// NSURLRequest class. + /// @param URL The URL for the request. + /// @param cachePolicy The cache policy for the request. + /// @param timeoutInterval The timeout interval for the request. See the + /// commentary for the timeoutInterval for more information on + /// timeout intervals. + /// @result An initialized NSURLRequest. + NSURLRequest initWithURL_cachePolicy_timeoutInterval_( + NSURL? URL, int cachePolicy, double timeoutInterval) { + final _ret = _lib._objc_msgSend_679( + _id, + _lib._sel_initWithURL_cachePolicy_timeoutInterval_1, + URL?._id ?? ffi.nullptr, + cachePolicy, + timeoutInterval); + return NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the URL of the receiver. + /// @result The URL of the receiver. + NSURL? get URL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_URL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the cache policy of the receiver. + /// @result The cache policy of the receiver. + int get cachePolicy { + return _lib._objc_msgSend_680(_id, _lib._sel_cachePolicy1); + } + + /// ! + /// @abstract Returns the timeout interval of the receiver. + /// @discussion The timeout interval specifies the limit on the idle + /// interval allotted to a request in the process of loading. The "idle + /// interval" is defined as the period of time that has passed since the + /// last instance of load activity occurred for a request that is in the + /// process of loading. Hence, when an instance of load activity occurs + /// (e.g. bytes are received from the network for a request), the idle + /// interval for a request is reset to 0. If the idle interval ever + /// becomes greater than or equal to the timeout interval, the request + /// is considered to have timed out. This timeout interval is measured + /// in seconds. + /// @result The timeout interval of the receiver. + double get timeoutInterval { + return _lib._objc_msgSend_147(_id, _lib._sel_timeoutInterval1); + } + + /// ! + /// @abstract The main document URL associated with this load. + /// @discussion This URL is used for the cookie "same domain as main + /// document" policy, and attributing the request as a sub-resource + /// of a user-specified URL. There may also be other future uses. + /// See setMainDocumentURL: + /// @result The main document URL. + NSURL? get mainDocumentURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_mainDocumentURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the NSURLRequestNetworkServiceType associated with this request. + /// @discussion This will return NSURLNetworkServiceTypeDefault for requests that have + /// not explicitly set a networkServiceType (using the setNetworkServiceType method). + /// @result The NSURLRequestNetworkServiceType associated with this request. + int get networkServiceType { + return _lib._objc_msgSend_681(_id, _lib._sel_networkServiceType1); + } + + /// ! + /// @abstract returns whether a connection created with this request is allowed to use + /// the built in cellular radios (if present). + /// @result YES if the receiver is allowed to use the built in cellular radios to + /// satisfy the request, NO otherwise. + bool get allowsCellularAccess { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsCellularAccess1); + } + + /// ! + /// @abstract returns whether a connection created with this request is allowed to use + /// network interfaces which have been marked as expensive. + /// @result YES if the receiver is allowed to use an interface marked as expensive to + /// satisfy the request, NO otherwise. + bool get allowsExpensiveNetworkAccess { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsExpensiveNetworkAccess1); + } + + /// ! + /// @abstract returns whether a connection created with this request is allowed to use + /// network interfaces which have been marked as constrained. + /// @result YES if the receiver is allowed to use an interface marked as constrained to + /// satisfy the request, NO otherwise. + bool get allowsConstrainedNetworkAccess { + return _lib._objc_msgSend_12( + _id, _lib._sel_allowsConstrainedNetworkAccess1); + } + + /// ! + /// @abstract returns whether we assume that server supports HTTP/3. Enables QUIC + /// racing without HTTP/3 service discovery. + /// @result YES if server endpoint is known to support HTTP/3. Defaults to NO. + /// The default may be YES in a future OS update. + bool get assumesHTTP3Capable { + return _lib._objc_msgSend_12(_id, _lib._sel_assumesHTTP3Capable1); + } + + /// ! + /// @abstract Returns the NSURLRequestAttribution associated with this request. + /// @discussion This will return NSURLRequestAttributionDeveloper for requests that + /// have not explicitly set an attribution. + /// @result The NSURLRequestAttribution associated with this request. + int get attribution { + return _lib._objc_msgSend_682(_id, _lib._sel_attribution1); + } + + /// ! + /// @abstract sets whether a request is required to do DNSSEC validation during DNS lookup. + /// @discussion YES, if the DNS lookup for this request should require DNSSEC validation, + /// No otherwise. Defaults to NO. + bool get requiresDNSSECValidation { + return _lib._objc_msgSend_12(_id, _lib._sel_requiresDNSSECValidation1); + } + + /// ! + /// @abstract Returns the HTTP request method of the receiver. + /// @result the HTTP request method of the receiver. + NSString? get HTTPMethod { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_HTTPMethod1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns a dictionary containing all the HTTP header fields + /// of the receiver. + /// @result a dictionary containing all the HTTP header fields of the + /// receiver. + NSDictionary? get allHTTPHeaderFields { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_allHTTPHeaderFields1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method valueForHTTPHeaderField: + /// @abstract Returns the value which corresponds to the given header + /// field. Note that, in keeping with the HTTP RFC, HTTP header field + /// names are case-insensitive. + /// @param field the header field name to use for the lookup + /// (case-insensitive). + /// @result the value associated with the given header field, or nil if + /// there is no value associated with the given header field. + NSString valueForHTTPHeaderField_(NSString? field) { + final _ret = _lib._objc_msgSend_56( + _id, _lib._sel_valueForHTTPHeaderField_1, field?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the request body data of the receiver. + /// @discussion This data is sent as the message body of the request, as + /// in done in an HTTP POST request. + /// @result The request body data of the receiver. + NSData? get HTTPBody { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_HTTPBody1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the request body stream of the receiver + /// if any has been set + /// @discussion The stream is returned for examination only; it is + /// not safe for the caller to manipulate the stream in any way. Also + /// note that the HTTPBodyStream and HTTPBody are mutually exclusive - only + /// one can be set on a given request. Also note that the body stream is + /// preserved across copies, but is LOST when the request is coded via the + /// NSCoding protocol + /// @result The request body stream of the receiver. + NSInputStream? get HTTPBodyStream { + final _ret = _lib._objc_msgSend_691(_id, _lib._sel_HTTPBodyStream1); + return _ret.address == 0 + ? null + : NSInputStream._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Determine whether default cookie handling will happen for + /// this request. + /// @discussion NOTE: This value is not used prior to 10.3 + /// @result YES if cookies will be sent with and set for this request; + /// otherwise NO. + bool get HTTPShouldHandleCookies { + return _lib._objc_msgSend_12(_id, _lib._sel_HTTPShouldHandleCookies1); + } + + /// ! + /// @abstract Reports whether the receiver is not expected to wait for the + /// previous response before transmitting. + /// @result YES if the receiver should transmit before the previous response + /// is received. NO if the receiver should wait for the previous response + /// before transmitting. + bool get HTTPShouldUsePipelining { + return _lib._objc_msgSend_12(_id, _lib._sel_HTTPShouldUsePipelining1); + } + + static NSURLRequest new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLRequest1, _lib._sel_new1); + return NSURLRequest._(_ret, _lib, retain: false, release: true); + } + + static NSURLRequest alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLRequest1, _lib._sel_alloc1); + return NSURLRequest._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLRequest1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLRequest1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLRequest1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLRequest1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLRequest1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLRequest1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLRequest1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURLRequest1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLRequest1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @enum NSURLRequestCachePolicy +/// +/// @discussion The NSURLRequestCachePolicy enum defines constants that +/// can be used to specify the type of interactions that take place with +/// the caching system when the URL loading system processes a request. +/// Specifically, these constants cover interactions that have to do +/// with whether already-existing cache data is returned to satisfy a +/// URL load request. +/// +/// @constant NSURLRequestUseProtocolCachePolicy Specifies that the +/// caching logic defined in the protocol implementation, if any, is +/// used for a particular URL load request. This is the default policy +/// for URL load requests. +/// +/// @constant NSURLRequestReloadIgnoringLocalCacheData Specifies that the +/// data for the URL load should be loaded from the origin source. No +/// existing local cache data, regardless of its freshness or validity, +/// should be used to satisfy a URL load request. +/// +/// @constant NSURLRequestReloadIgnoringLocalAndRemoteCacheData Specifies that +/// not only should the local cache data be ignored, but that proxies and +/// other intermediates should be instructed to disregard their caches +/// so far as the protocol allows. +/// +/// @constant NSURLRequestReloadIgnoringCacheData Older name for +/// NSURLRequestReloadIgnoringLocalCacheData. +/// +/// @constant NSURLRequestReturnCacheDataElseLoad Specifies that the +/// existing cache data should be used to satisfy a URL load request, +/// regardless of its age or expiration date. However, if there is no +/// existing data in the cache corresponding to a URL load request, +/// the URL is loaded from the origin source. +/// +/// @constant NSURLRequestReturnCacheDataDontLoad Specifies that the +/// existing cache data should be used to satisfy a URL load request, +/// regardless of its age or expiration date. However, if there is no +/// existing data in the cache corresponding to a URL load request, no +/// attempt is made to load the URL from the origin source, and the +/// load is considered to have failed. This constant specifies a +/// behavior that is similar to an "offline" mode. +/// +/// @constant NSURLRequestReloadRevalidatingCacheData Specifies that +/// the existing cache data may be used provided the origin source +/// confirms its validity, otherwise the URL is loaded from the +/// origin source. +abstract class NSURLRequestCachePolicy { + static const int NSURLRequestUseProtocolCachePolicy = 0; + static const int NSURLRequestReloadIgnoringLocalCacheData = 1; + static const int NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4; + static const int NSURLRequestReloadIgnoringCacheData = 1; + static const int NSURLRequestReturnCacheDataElseLoad = 2; + static const int NSURLRequestReturnCacheDataDontLoad = 3; + static const int NSURLRequestReloadRevalidatingCacheData = 5; +} + +/// ! +/// @enum NSURLRequestNetworkServiceType +/// +/// @discussion The NSURLRequestNetworkServiceType enum defines constants that +/// can be used to specify the service type to associate with this request. The +/// service type is used to provide the networking layers a hint of the purpose +/// of the request. +/// +/// @constant NSURLNetworkServiceTypeDefault Is the default value for an NSURLRequest +/// when created. This value should be left unchanged for the vast majority of requests. +/// +/// @constant NSURLNetworkServiceTypeVoIP Specifies that the request is for voice over IP +/// control traffic. +/// +/// @constant NSURLNetworkServiceTypeVideo Specifies that the request is for video +/// traffic. +/// +/// @constant NSURLNetworkServiceTypeBackground Specifies that the request is for background +/// traffic (such as a file download). +/// +/// @constant NSURLNetworkServiceTypeVoice Specifies that the request is for voice data. +/// +/// @constant NSURLNetworkServiceTypeResponsiveData Specifies that the request is for responsive (time sensitive) data. +/// +/// @constant NSURLNetworkServiceTypeAVStreaming Specifies that the request is streaming audio/video data. +/// +/// @constant NSURLNetworkServiceTypeResponsiveAV Specifies that the request is for responsive (time sensitive) audio/video data. +/// +/// @constant NSURLNetworkServiceTypeCallSignaling Specifies that the request is for call signaling. +abstract class NSURLRequestNetworkServiceType { + static const int NSURLNetworkServiceTypeDefault = 0; + static const int NSURLNetworkServiceTypeVoIP = 1; + static const int NSURLNetworkServiceTypeVideo = 2; + static const int NSURLNetworkServiceTypeBackground = 3; + static const int NSURLNetworkServiceTypeVoice = 4; + static const int NSURLNetworkServiceTypeResponsiveData = 6; + static const int NSURLNetworkServiceTypeAVStreaming = 8; + static const int NSURLNetworkServiceTypeResponsiveAV = 9; + static const int NSURLNetworkServiceTypeCallSignaling = 11; +} + +/// ! +/// @enum NSURLRequestAttribution +/// +/// @discussion The NSURLRequestAttribution enum is used to indicate whether the +/// user or developer specified the URL. +/// +/// @constant NSURLRequestAttributionDeveloper Indicates that the URL was specified +/// by the developer. This is the default value for an NSURLRequest when created. +/// +/// @constant NSURLRequestAttributionUser Indicates that the URL was specified by +/// the user. +abstract class NSURLRequestAttribution { + static const int NSURLRequestAttributionDeveloper = 0; + static const int NSURLRequestAttributionUser = 1; +} + +class NSInputStream extends NSStream { + NSInputStream._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSInputStream] that points to the same underlying object as [other]. + static NSInputStream castFrom(T other) { + return NSInputStream._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSInputStream] that wraps the given raw object pointer. + static NSInputStream castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSInputStream._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSInputStream]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSInputStream1); + } + + int read_maxLength_(ffi.Pointer buffer, int len) { + return _lib._objc_msgSend_684(_id, _lib._sel_read_maxLength_1, buffer, len); + } + + bool getBuffer_length_(ffi.Pointer> buffer, + ffi.Pointer len) { + return _lib._objc_msgSend_690( + _id, _lib._sel_getBuffer_length_1, buffer, len); + } + + bool get hasBytesAvailable { + return _lib._objc_msgSend_12(_id, _lib._sel_hasBytesAvailable1); + } + + NSInputStream initWithData_(NSData? data) { + final _ret = _lib._objc_msgSend_211( + _id, _lib._sel_initWithData_1, data?._id ?? ffi.nullptr); + return NSInputStream._(_ret, _lib, retain: true, release: true); + } + + NSInputStream initWithURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithURL_1, url?._id ?? ffi.nullptr); + return NSInputStream._(_ret, _lib, retain: true, release: true); + } + + NSInputStream initWithFileAtPath_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithFileAtPath_1, path?._id ?? ffi.nullptr); + return NSInputStream._(_ret, _lib, retain: true, release: true); + } + + static NSInputStream inputStreamWithData_( + PedometerBindings _lib, NSData? data) { + final _ret = _lib._objc_msgSend_211(_lib._class_NSInputStream1, + _lib._sel_inputStreamWithData_1, data?._id ?? ffi.nullptr); + return NSInputStream._(_ret, _lib, retain: true, release: true); + } + + static NSInputStream inputStreamWithFileAtPath_( + PedometerBindings _lib, NSString? path) { + final _ret = _lib._objc_msgSend_30(_lib._class_NSInputStream1, + _lib._sel_inputStreamWithFileAtPath_1, path?._id ?? ffi.nullptr); + return NSInputStream._(_ret, _lib, retain: true, release: true); + } + + static NSInputStream inputStreamWithURL_(PedometerBindings _lib, NSURL? url) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSInputStream1, + _lib._sel_inputStreamWithURL_1, url?._id ?? ffi.nullptr); + return NSInputStream._(_ret, _lib, retain: true, release: true); + } + + static void getStreamsToHostWithName_port_inputStream_outputStream_( + PedometerBindings _lib, + NSString? hostname, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_687( + _lib._class_NSInputStream1, + _lib._sel_getStreamsToHostWithName_port_inputStream_outputStream_1, + hostname?._id ?? ffi.nullptr, + port, + inputStream, + outputStream); + } + + static void getStreamsToHost_port_inputStream_outputStream_( + PedometerBindings _lib, + NSHost? host, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_688( + _lib._class_NSInputStream1, + _lib._sel_getStreamsToHost_port_inputStream_outputStream_1, + host?._id ?? ffi.nullptr, + port, + inputStream, + outputStream); + } + + static void getBoundStreamsWithBufferSize_inputStream_outputStream_( + PedometerBindings _lib, + int bufferSize, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_689( + _lib._class_NSInputStream1, + _lib._sel_getBoundStreamsWithBufferSize_inputStream_outputStream_1, + bufferSize, + inputStream, + outputStream); + } + + static NSInputStream new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSInputStream1, _lib._sel_new1); + return NSInputStream._(_ret, _lib, retain: false, release: true); + } + + static NSInputStream alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSInputStream1, _lib._sel_alloc1); + return NSInputStream._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSInputStream1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSInputStream1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSInputStream1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSInputStream1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSInputStream1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSInputStream1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSInputStream1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSInputStream1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSInputStream1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSStream extends NSObject { + NSStream._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSStream] that points to the same underlying object as [other]. + static NSStream castFrom(T other) { + return NSStream._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSStream] that wraps the given raw object pointer. + static NSStream castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSStream._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSStream]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSStream1); + } + + void open() { + return _lib._objc_msgSend_1(_id, _lib._sel_open1); + } + + void close() { + return _lib._objc_msgSend_1(_id, _lib._sel_close1); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + set delegate(NSObject? value) { + _lib._objc_msgSend_348( + _id, _lib._sel_setDelegate_1, value?._id ?? ffi.nullptr); + } + + NSObject propertyForKey_(NSString key) { + final _ret = + _lib._objc_msgSend_30(_id, _lib._sel_propertyForKey_1, key._id); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool setProperty_forKey_(NSObject property, NSString key) { + return _lib._objc_msgSend_199( + _id, _lib._sel_setProperty_forKey_1, property._id, key._id); + } + + void scheduleInRunLoop_forMode_(NSRunLoop? aRunLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_scheduleInRunLoop_forMode_1, + aRunLoop?._id ?? ffi.nullptr, mode._id); + } + + void removeFromRunLoop_forMode_(NSRunLoop? aRunLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_removeFromRunLoop_forMode_1, + aRunLoop?._id ?? ffi.nullptr, mode._id); + } + + int get streamStatus { + return _lib._objc_msgSend_683(_id, _lib._sel_streamStatus1); + } + + NSError? get streamError { + final _ret = _lib._objc_msgSend_252(_id, _lib._sel_streamError1); + return _ret.address == 0 + ? null + : NSError._(_ret, _lib, retain: true, release: true); + } + + static void getStreamsToHostWithName_port_inputStream_outputStream_( + PedometerBindings _lib, + NSString? hostname, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_687( + _lib._class_NSStream1, + _lib._sel_getStreamsToHostWithName_port_inputStream_outputStream_1, + hostname?._id ?? ffi.nullptr, + port, + inputStream, + outputStream); + } + + static void getStreamsToHost_port_inputStream_outputStream_( + PedometerBindings _lib, + NSHost? host, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_688( + _lib._class_NSStream1, + _lib._sel_getStreamsToHost_port_inputStream_outputStream_1, + host?._id ?? ffi.nullptr, + port, + inputStream, + outputStream); + } + + static void getBoundStreamsWithBufferSize_inputStream_outputStream_( + PedometerBindings _lib, + int bufferSize, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_689( + _lib._class_NSStream1, + _lib._sel_getBoundStreamsWithBufferSize_inputStream_outputStream_1, + bufferSize, + inputStream, + outputStream); + } + + static NSStream new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSStream1, _lib._sel_new1); + return NSStream._(_ret, _lib, retain: false, release: true); + } + + static NSStream alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSStream1, _lib._sel_alloc1); + return NSStream._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSStream1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSStream1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSStream1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSStream1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSStream1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSStream1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSStream1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSStream1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSStream1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSStreamStatus { + static const int NSStreamStatusNotOpen = 0; + static const int NSStreamStatusOpening = 1; + static const int NSStreamStatusOpen = 2; + static const int NSStreamStatusReading = 3; + static const int NSStreamStatusWriting = 4; + static const int NSStreamStatusAtEnd = 5; + static const int NSStreamStatusClosed = 6; + static const int NSStreamStatusError = 7; +} + +class NSOutputStream extends NSStream { + NSOutputStream._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSOutputStream] that points to the same underlying object as [other]. + static NSOutputStream castFrom(T other) { + return NSOutputStream._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSOutputStream] that wraps the given raw object pointer. + static NSOutputStream castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSOutputStream._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSOutputStream]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSOutputStream1); + } + + int write_maxLength_(ffi.Pointer buffer, int len) { + return _lib._objc_msgSend_684( + _id, _lib._sel_write_maxLength_1, buffer, len); + } + + bool get hasSpaceAvailable { + return _lib._objc_msgSend_12(_id, _lib._sel_hasSpaceAvailable1); + } + + NSOutputStream initToMemory() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_initToMemory1); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + NSOutputStream initToBuffer_capacity_( + ffi.Pointer buffer, int capacity) { + final _ret = _lib._objc_msgSend_685( + _id, _lib._sel_initToBuffer_capacity_1, buffer, capacity); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + NSOutputStream initWithURL_append_(NSURL? url, bool shouldAppend) { + final _ret = _lib._objc_msgSend_686(_id, _lib._sel_initWithURL_append_1, + url?._id ?? ffi.nullptr, shouldAppend); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + NSOutputStream initToFileAtPath_append_(NSString? path, bool shouldAppend) { + final _ret = _lib._objc_msgSend_29(_id, _lib._sel_initToFileAtPath_append_1, + path?._id ?? ffi.nullptr, shouldAppend); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + static NSOutputStream outputStreamToMemory(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSOutputStream1, _lib._sel_outputStreamToMemory1); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + static NSOutputStream outputStreamToBuffer_capacity_( + PedometerBindings _lib, ffi.Pointer buffer, int capacity) { + final _ret = _lib._objc_msgSend_685(_lib._class_NSOutputStream1, + _lib._sel_outputStreamToBuffer_capacity_1, buffer, capacity); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + static NSOutputStream outputStreamToFileAtPath_append_( + PedometerBindings _lib, NSString? path, bool shouldAppend) { + final _ret = _lib._objc_msgSend_29( + _lib._class_NSOutputStream1, + _lib._sel_outputStreamToFileAtPath_append_1, + path?._id ?? ffi.nullptr, + shouldAppend); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + static NSOutputStream outputStreamWithURL_append_( + PedometerBindings _lib, NSURL? url, bool shouldAppend) { + final _ret = _lib._objc_msgSend_686( + _lib._class_NSOutputStream1, + _lib._sel_outputStreamWithURL_append_1, + url?._id ?? ffi.nullptr, + shouldAppend); + return NSOutputStream._(_ret, _lib, retain: true, release: true); + } + + static void getStreamsToHostWithName_port_inputStream_outputStream_( + PedometerBindings _lib, + NSString? hostname, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_687( + _lib._class_NSOutputStream1, + _lib._sel_getStreamsToHostWithName_port_inputStream_outputStream_1, + hostname?._id ?? ffi.nullptr, + port, + inputStream, + outputStream); + } + + static void getStreamsToHost_port_inputStream_outputStream_( + PedometerBindings _lib, + NSHost? host, + int port, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_688( + _lib._class_NSOutputStream1, + _lib._sel_getStreamsToHost_port_inputStream_outputStream_1, + host?._id ?? ffi.nullptr, + port, + inputStream, + outputStream); + } + + static void getBoundStreamsWithBufferSize_inputStream_outputStream_( + PedometerBindings _lib, + int bufferSize, + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_689( + _lib._class_NSOutputStream1, + _lib._sel_getBoundStreamsWithBufferSize_inputStream_outputStream_1, + bufferSize, + inputStream, + outputStream); + } + + static NSOutputStream new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOutputStream1, _lib._sel_new1); + return NSOutputStream._(_ret, _lib, retain: false, release: true); + } + + static NSOutputStream alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOutputStream1, _lib._sel_alloc1); + return NSOutputStream._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSOutputStream1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSOutputStream1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSOutputStream1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOutputStream1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSOutputStream1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSOutputStream1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSOutputStream1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSOutputStream1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSOutputStream1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSHost extends _ObjCWrapper { + NSHost._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSHost] that points to the same underlying object as [other]. + static NSHost castFrom(T other) { + return NSHost._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSHost] that wraps the given raw object pointer. + static NSHost castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSHost._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSHost]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSHost1); + } +} + +/// ! +/// @class NSURLResponse +/// +/// @abstract An NSURLResponse object represents a URL load response in a +/// manner independent of protocol and URL scheme. +/// +/// @discussion NSURLResponse encapsulates the metadata associated +/// with a URL load. Note that NSURLResponse objects do not contain +/// the actual bytes representing the content of a URL. See +/// NSURLConnection and NSURLConnectionDelegate for more information +/// about receiving the content data for a URL load. +class NSURLResponse extends NSObject { + NSURLResponse._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLResponse] that points to the same underlying object as [other]. + static NSURLResponse castFrom(T other) { + return NSURLResponse._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSURLResponse] that wraps the given raw object pointer. + static NSURLResponse castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLResponse._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLResponse]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSURLResponse1); + } + + /// ! + /// @method initWithURL:MIMEType:expectedContentLength:textEncodingName: + /// @abstract Initialize an NSURLResponse with the provided values. + /// @param URL the URL + /// @param MIMEType the MIME content type of the response + /// @param length the expected content length of the associated data + /// @param name the name of the text encoding for the associated data, if applicable, else nil + /// @result The initialized NSURLResponse. + /// @discussion This is the designated initializer for NSURLResponse. + NSURLResponse initWithURL_MIMEType_expectedContentLength_textEncodingName_( + NSURL? URL, NSString? MIMEType, int length, NSString? name) { + final _ret = _lib._objc_msgSend_693( + _id, + _lib._sel_initWithURL_MIMEType_expectedContentLength_textEncodingName_1, + URL?._id ?? ffi.nullptr, + MIMEType?._id ?? ffi.nullptr, + length, + name?._id ?? ffi.nullptr); + return NSURLResponse._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the URL of the receiver. + /// @result The URL of the receiver. + NSURL? get URL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_URL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the MIME type of the receiver. + /// @discussion The MIME type is based on the information provided + /// from an origin source. However, that value may be changed or + /// corrected by a protocol implementation if it can be determined + /// that the origin server or source reported the information + /// incorrectly or imprecisely. An attempt to guess the MIME type may + /// be made if the origin source did not report any such information. + /// @result The MIME type of the receiver. + NSString? get MIMEType { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_MIMEType1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the expected content length of the receiver. + /// @discussion Some protocol implementations report a content length + /// as part of delivering load metadata, but not all protocols + /// guarantee the amount of data that will be delivered in actuality. + /// Hence, this method returns an expected amount. Clients should use + /// this value as an advisory, and should be prepared to deal with + /// either more or less data. + /// @result The expected content length of the receiver, or -1 if + /// there is no expectation that can be arrived at regarding expected + /// content length. + int get expectedContentLength { + return _lib._objc_msgSend_178(_id, _lib._sel_expectedContentLength1); + } + + /// ! + /// @abstract Returns the name of the text encoding of the receiver. + /// @discussion This name will be the actual string reported by the + /// origin source during the course of performing a protocol-specific + /// URL load. Clients can inspect this string and convert it to an + /// NSStringEncoding or CFStringEncoding using the methods and + /// functions made available in the appropriate framework. + /// @result The name of the text encoding of the receiver, or nil if no + /// text encoding was specified. + NSString? get textEncodingName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_textEncodingName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns a suggested filename if the resource were saved to disk. + /// @discussion The method first checks if the server has specified a filename using the + /// content disposition header. If no valid filename is specified using that mechanism, + /// this method checks the last path component of the URL. If no valid filename can be + /// obtained using the last path component, this method uses the URL's host as the filename. + /// If the URL's host can't be converted to a valid filename, the filename "unknown" is used. + /// In most cases, this method appends the proper file extension based on the MIME type. + /// This method always returns a valid filename. + /// @result A suggested filename to use if saving the resource to disk. + NSString? get suggestedFilename { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_suggestedFilename1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + static NSURLResponse new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLResponse1, _lib._sel_new1); + return NSURLResponse._(_ret, _lib, retain: false, release: true); + } + + static NSURLResponse alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLResponse1, _lib._sel_alloc1); + return NSURLResponse._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLResponse1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLResponse1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLResponse1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLResponse1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLResponse1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLResponse1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLResponse1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURLResponse1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLResponse1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSURLSessionTaskState { + static const int NSURLSessionTaskStateRunning = 0; + static const int NSURLSessionTaskStateSuspended = 1; + static const int NSURLSessionTaskStateCanceling = 2; + static const int NSURLSessionTaskStateCompleted = 3; +} + +void _ObjCBlock36_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock36_closureRegistry = {}; +int _ObjCBlock36_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock36_registerClosure(Function fn) { + final id = ++_ObjCBlock36_closureRegistryIndex; + _ObjCBlock36_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock36_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock36_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock36 extends _ObjCBlockBase { + ObjCBlock36._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock36.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock36_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock36.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock36_closureTrampoline) + .cast(), + _ObjCBlock36_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSIndexPath extends NSObject { + NSIndexPath._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSIndexPath] that points to the same underlying object as [other]. + static NSIndexPath castFrom(T other) { + return NSIndexPath._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSIndexPath] that wraps the given raw object pointer. + static NSIndexPath castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSIndexPath._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSIndexPath]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSIndexPath1); + } + + static NSIndexPath indexPathWithIndex_(PedometerBindings _lib, int index) { + final _ret = _lib._objc_msgSend_52( + _lib._class_NSIndexPath1, _lib._sel_indexPathWithIndex_1, index); + return NSIndexPath._(_ret, _lib, retain: true, release: true); + } + + static NSIndexPath indexPathWithIndexes_length_(PedometerBindings _lib, + ffi.Pointer indexes, int length) { + final _ret = _lib._objc_msgSend_699(_lib._class_NSIndexPath1, + _lib._sel_indexPathWithIndexes_length_1, indexes, length); + return NSIndexPath._(_ret, _lib, retain: true, release: true); + } + + NSIndexPath initWithIndexes_length_( + ffi.Pointer indexes, int length) { + final _ret = _lib._objc_msgSend_699( + _id, _lib._sel_initWithIndexes_length_1, indexes, length); + return NSIndexPath._(_ret, _lib, retain: true, release: true); + } + + NSIndexPath initWithIndex_(int index) { + final _ret = _lib._objc_msgSend_52(_id, _lib._sel_initWithIndex_1, index); + return NSIndexPath._(_ret, _lib, retain: true, release: true); + } + + NSIndexPath indexPathByAddingIndex_(int index) { + final _ret = + _lib._objc_msgSend_700(_id, _lib._sel_indexPathByAddingIndex_1, index); + return NSIndexPath._(_ret, _lib, retain: true, release: true); + } + + NSIndexPath indexPathByRemovingLastIndex() { + final _ret = + _lib._objc_msgSend_701(_id, _lib._sel_indexPathByRemovingLastIndex1); + return NSIndexPath._(_ret, _lib, retain: true, release: true); + } + + int indexAtPosition_(int position) { + return _lib._objc_msgSend_80(_id, _lib._sel_indexAtPosition_1, position); + } + + int get length { + return _lib._objc_msgSend_10(_id, _lib._sel_length1); + } + + /// ! + /// @abstract Copies the indexes stored in this index path from the positions specified by positionRange into indexes. + /// @param indexes Buffer of at least as many NSUIntegers as specified by the length of positionRange. On return, this memory will hold the index path's indexes. + /// @param positionRange A range of valid positions within this index path. If the location plus the length of positionRange is greater than the length of this index path, this method raises an NSRangeException. + /// @discussion + /// It is the developer’s responsibility to allocate the memory for the C array. + void getIndexes_range_( + ffi.Pointer indexes, _NSRange positionRange) { + return _lib._objc_msgSend_702( + _id, _lib._sel_getIndexes_range_1, indexes, positionRange); + } + + int compare_(NSIndexPath? otherObject) { + return _lib._objc_msgSend_703( + _id, _lib._sel_compare_1, otherObject?._id ?? ffi.nullptr); + } + + /// This method is unsafe because it could potentially cause buffer overruns. You should use -getIndexes:range: instead. + void getIndexes_(ffi.Pointer indexes) { + return _lib._objc_msgSend_704(_id, _lib._sel_getIndexes_1, indexes); + } + + static NSIndexPath new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSIndexPath1, _lib._sel_new1); + return NSIndexPath._(_ret, _lib, retain: false, release: true); + } + + static NSIndexPath alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSIndexPath1, _lib._sel_alloc1); + return NSIndexPath._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSIndexPath1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSIndexPath1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSIndexPath1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSIndexPath1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSIndexPath1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSIndexPath1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSIndexPath1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSIndexPath1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSIndexPath1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSInflectionRule extends NSObject { + NSInflectionRule._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSInflectionRule] that points to the same underlying object as [other]. + static NSInflectionRule castFrom(T other) { + return NSInflectionRule._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSInflectionRule] that wraps the given raw object pointer. + static NSInflectionRule castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSInflectionRule._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSInflectionRule]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSInflectionRule1); + } + + @override + NSObject init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSInflectionRule? getAutomaticRule(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_705( + _lib._class_NSInflectionRule1, _lib._sel_automaticRule1); + return _ret.address == 0 + ? null + : NSInflectionRule._(_ret, _lib, retain: true, release: true); + } + + static bool canInflectLanguage_(PedometerBindings _lib, NSString? language) { + return _lib._objc_msgSend_51(_lib._class_NSInflectionRule1, + _lib._sel_canInflectLanguage_1, language?._id ?? ffi.nullptr); + } + + static bool getCanInflectPreferredLocalization(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSInflectionRule1, + _lib._sel_canInflectPreferredLocalization1); + } + + static NSInflectionRule new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSInflectionRule1, _lib._sel_new1); + return NSInflectionRule._(_ret, _lib, retain: false, release: true); + } + + static NSInflectionRule alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSInflectionRule1, _lib._sel_alloc1); + return NSInflectionRule._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSInflectionRule1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSInflectionRule1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSInflectionRule1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSInflectionRule1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSInflectionRule1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSInflectionRule1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSInflectionRule1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSInflectionRule1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSInflectionRule1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSMorphology extends NSObject { + NSMorphology._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMorphology] that points to the same underlying object as [other]. + static NSMorphology castFrom(T other) { + return NSMorphology._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSMorphology] that wraps the given raw object pointer. + static NSMorphology castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMorphology._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMorphology]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSMorphology1); + } + + int get grammaticalGender { + return _lib._objc_msgSend_706(_id, _lib._sel_grammaticalGender1); + } + + set grammaticalGender(int value) { + _lib._objc_msgSend_707(_id, _lib._sel_setGrammaticalGender_1, value); + } + + int get partOfSpeech { + return _lib._objc_msgSend_708(_id, _lib._sel_partOfSpeech1); + } + + set partOfSpeech(int value) { + _lib._objc_msgSend_709(_id, _lib._sel_setPartOfSpeech_1, value); + } + + int get number { + return _lib._objc_msgSend_710(_id, _lib._sel_number1); + } + + set number(int value) { + _lib._objc_msgSend_711(_id, _lib._sel_setNumber_1, value); + } + + NSMorphologyCustomPronoun customPronounForLanguage_(NSString? language) { + final _ret = _lib._objc_msgSend_712(_id, + _lib._sel_customPronounForLanguage_1, language?._id ?? ffi.nullptr); + return NSMorphologyCustomPronoun._(_ret, _lib, retain: true, release: true); + } + + bool setCustomPronoun_forLanguage_error_(NSMorphologyCustomPronoun? features, + NSString? language, ffi.Pointer> error) { + return _lib._objc_msgSend_713( + _id, + _lib._sel_setCustomPronoun_forLanguage_error_1, + features?._id ?? ffi.nullptr, + language?._id ?? ffi.nullptr, + error); + } + + bool get unspecified { + return _lib._objc_msgSend_12(_id, _lib._sel_isUnspecified1); + } + + static NSMorphology? getUserMorphology(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_714( + _lib._class_NSMorphology1, _lib._sel_userMorphology1); + return _ret.address == 0 + ? null + : NSMorphology._(_ret, _lib, retain: true, release: true); + } + + static NSMorphology new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMorphology1, _lib._sel_new1); + return NSMorphology._(_ret, _lib, retain: false, release: true); + } + + static NSMorphology alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMorphology1, _lib._sel_alloc1); + return NSMorphology._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMorphology1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMorphology1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMorphology1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMorphology1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMorphology1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMorphology1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMorphology1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSMorphology1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMorphology1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSGrammaticalGender { + static const int NSGrammaticalGenderNotSet = 0; + static const int NSGrammaticalGenderFeminine = 1; + static const int NSGrammaticalGenderMasculine = 2; + static const int NSGrammaticalGenderNeuter = 3; +} + +abstract class NSGrammaticalPartOfSpeech { + static const int NSGrammaticalPartOfSpeechNotSet = 0; + static const int NSGrammaticalPartOfSpeechDeterminer = 1; + static const int NSGrammaticalPartOfSpeechPronoun = 2; + static const int NSGrammaticalPartOfSpeechLetter = 3; + static const int NSGrammaticalPartOfSpeechAdverb = 4; + static const int NSGrammaticalPartOfSpeechParticle = 5; + static const int NSGrammaticalPartOfSpeechAdjective = 6; + static const int NSGrammaticalPartOfSpeechAdposition = 7; + static const int NSGrammaticalPartOfSpeechVerb = 8; + static const int NSGrammaticalPartOfSpeechNoun = 9; + static const int NSGrammaticalPartOfSpeechConjunction = 10; + static const int NSGrammaticalPartOfSpeechNumeral = 11; + static const int NSGrammaticalPartOfSpeechInterjection = 12; + static const int NSGrammaticalPartOfSpeechPreposition = 13; + static const int NSGrammaticalPartOfSpeechAbbreviation = 14; +} + +abstract class NSGrammaticalNumber { + static const int NSGrammaticalNumberNotSet = 0; + static const int NSGrammaticalNumberSingular = 1; + static const int NSGrammaticalNumberZero = 2; + static const int NSGrammaticalNumberPlural = 3; + static const int NSGrammaticalNumberPluralTwo = 4; + static const int NSGrammaticalNumberPluralFew = 5; + static const int NSGrammaticalNumberPluralMany = 6; +} + +class NSMorphologyCustomPronoun extends NSObject { + NSMorphologyCustomPronoun._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMorphologyCustomPronoun] that points to the same underlying object as [other]. + static NSMorphologyCustomPronoun castFrom(T other) { + return NSMorphologyCustomPronoun._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMorphologyCustomPronoun] that wraps the given raw object pointer. + static NSMorphologyCustomPronoun castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMorphologyCustomPronoun._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMorphologyCustomPronoun]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMorphologyCustomPronoun1); + } + + static bool isSupportedForLanguage_( + PedometerBindings _lib, NSString? language) { + return _lib._objc_msgSend_51(_lib._class_NSMorphologyCustomPronoun1, + _lib._sel_isSupportedForLanguage_1, language?._id ?? ffi.nullptr); + } + + static NSArray requiredKeysForLanguage_( + PedometerBindings _lib, NSString? language) { + final _ret = _lib._objc_msgSend_115(_lib._class_NSMorphologyCustomPronoun1, + _lib._sel_requiredKeysForLanguage_1, language?._id ?? ffi.nullptr); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get subjectForm { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_subjectForm1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set subjectForm(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setSubjectForm_1, value?._id ?? ffi.nullptr); + } + + NSString? get objectForm { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_objectForm1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set objectForm(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setObjectForm_1, value?._id ?? ffi.nullptr); + } + + NSString? get possessiveForm { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_possessiveForm1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set possessiveForm(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPossessiveForm_1, value?._id ?? ffi.nullptr); + } + + NSString? get possessiveAdjectiveForm { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_possessiveAdjectiveForm1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set possessiveAdjectiveForm(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPossessiveAdjectiveForm_1, value?._id ?? ffi.nullptr); + } + + NSString? get reflexiveForm { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_reflexiveForm1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set reflexiveForm(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setReflexiveForm_1, value?._id ?? ffi.nullptr); + } + + static NSMorphologyCustomPronoun new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMorphologyCustomPronoun1, _lib._sel_new1); + return NSMorphologyCustomPronoun._(_ret, _lib, + retain: false, release: true); + } + + static NSMorphologyCustomPronoun alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMorphologyCustomPronoun1, _lib._sel_alloc1); + return NSMorphologyCustomPronoun._(_ret, _lib, + retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMorphologyCustomPronoun1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMorphologyCustomPronoun1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMorphologyCustomPronoun1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMorphologyCustomPronoun1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMorphologyCustomPronoun1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMorphologyCustomPronoun1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMorphologyCustomPronoun1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMorphologyCustomPronoun1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSMorphologyCustomPronoun1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSOperationQueue extends NSObject { + NSOperationQueue._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSOperationQueue] that points to the same underlying object as [other]. + static NSOperationQueue castFrom(T other) { + return NSOperationQueue._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSOperationQueue] that wraps the given raw object pointer. + static NSOperationQueue castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSOperationQueue._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSOperationQueue]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSOperationQueue1); + } + + /// @property progress + /// @discussion The `progress` property represents a total progress of the operations executed in the queue. By default NSOperationQueue + /// does not report progress until the `totalUnitCount` of the progress is set. When the `totalUnitCount` property of the progress is set the + /// queue then opts into participating in progress reporting. When enabled, each operation will contribute 1 unit of completion to the + /// overall progress of the queue for operations that are finished by the end of main (operations that override start and do not invoke super + /// will not contribute to progress). Special attention to race conditions should be made when updating the `totalUnitCount` of the progress + /// as well as care should be taken to avoid 'backwards progress'. For example; when a NSOperationQueue's progress is 5/10, representing 50% + /// completed, and there are 90 more operations about to be added and the `totalUnitCount` that would then make the progress report as 5/100 + /// which represents 5%. In this example it would mean that any progress bar would jump from displaying 50% back to 5%, which might not be + /// desirable. In the cases where the `totalUnitCount` needs to be adjusted it is suggested to do this for thread-safety in a barrier by + /// using the `addBarrierBlock:` API. This ensures that no un-expected execution state occurs adjusting into a potentially backwards moving + /// progress scenario. + /// + /// @example + /// NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + /// queue.progress.totalUnitCount = 10; + NSProgress? get progress { + final _ret = _lib._objc_msgSend_475(_id, _lib._sel_progress1); + return _ret.address == 0 + ? null + : NSProgress._(_ret, _lib, retain: true, release: true); + } + + void addOperation_(NSOperation? op) { + return _lib._objc_msgSend_715( + _id, _lib._sel_addOperation_1, op?._id ?? ffi.nullptr); + } + + void addOperations_waitUntilFinished_(NSArray? ops, bool wait) { + return _lib._objc_msgSend_718( + _id, + _lib._sel_addOperations_waitUntilFinished_1, + ops?._id ?? ffi.nullptr, + wait); + } + + void addOperationWithBlock_(ObjCBlock21 block) { + return _lib._objc_msgSend_458( + _id, _lib._sel_addOperationWithBlock_1, block._id); + } + + /// @method addBarrierBlock: + /// @param barrier A block to execute + /// @discussion The `addBarrierBlock:` method executes the block when the NSOperationQueue has finished all enqueued operations and + /// prevents any subsequent operations to be executed until the barrier has been completed. This acts similarly to the + /// `dispatch_barrier_async` function. + void addBarrierBlock_(ObjCBlock21 barrier) { + return _lib._objc_msgSend_458( + _id, _lib._sel_addBarrierBlock_1, barrier._id); + } + + int get maxConcurrentOperationCount { + return _lib._objc_msgSend_70(_id, _lib._sel_maxConcurrentOperationCount1); + } + + set maxConcurrentOperationCount(int value) { + _lib._objc_msgSend_583( + _id, _lib._sel_setMaxConcurrentOperationCount_1, value); + } + + bool get suspended { + return _lib._objc_msgSend_12(_id, _lib._sel_isSuspended1); + } + + set suspended(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setSuspended_1, value); + } + + NSString? get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set name(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setName_1, value?._id ?? ffi.nullptr); + } + + int get qualityOfService { + return _lib._objc_msgSend_468(_id, _lib._sel_qualityOfService1); + } + + set qualityOfService(int value) { + _lib._objc_msgSend_469(_id, _lib._sel_setQualityOfService_1, value); + } + + ffi.Pointer get underlyingQueue { + return _lib._objc_msgSend_719(_id, _lib._sel_underlyingQueue1); + } + + set underlyingQueue(ffi.Pointer value) { + _lib._objc_msgSend_720(_id, _lib._sel_setUnderlyingQueue_1, value); + } + + void cancelAllOperations() { + return _lib._objc_msgSend_1(_id, _lib._sel_cancelAllOperations1); + } + + void waitUntilAllOperationsAreFinished() { + return _lib._objc_msgSend_1( + _id, _lib._sel_waitUntilAllOperationsAreFinished1); + } + + static NSOperationQueue? getCurrentQueue(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_721( + _lib._class_NSOperationQueue1, _lib._sel_currentQueue1); + return _ret.address == 0 + ? null + : NSOperationQueue._(_ret, _lib, retain: true, release: true); + } + + static NSOperationQueue? getMainQueue(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_721( + _lib._class_NSOperationQueue1, _lib._sel_mainQueue1); + return _ret.address == 0 + ? null + : NSOperationQueue._(_ret, _lib, retain: true, release: true); + } + + NSArray? get operations { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_operations1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + int get operationCount { + return _lib._objc_msgSend_10(_id, _lib._sel_operationCount1); + } + + static NSOperationQueue new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOperationQueue1, _lib._sel_new1); + return NSOperationQueue._(_ret, _lib, retain: false, release: true); + } + + static NSOperationQueue alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOperationQueue1, _lib._sel_alloc1); + return NSOperationQueue._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSOperationQueue1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSOperationQueue1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSOperationQueue1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOperationQueue1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSOperationQueue1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSOperationQueue1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSOperationQueue1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSOperationQueue1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSOperationQueue1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSOperation extends NSObject { + NSOperation._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSOperation] that points to the same underlying object as [other]. + static NSOperation castFrom(T other) { + return NSOperation._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSOperation] that wraps the given raw object pointer. + static NSOperation castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSOperation._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSOperation]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSOperation1); + } + + void start() { + return _lib._objc_msgSend_1(_id, _lib._sel_start1); + } + + void main() { + return _lib._objc_msgSend_1(_id, _lib._sel_main1); + } + + bool get cancelled { + return _lib._objc_msgSend_12(_id, _lib._sel_isCancelled1); + } + + void cancel() { + return _lib._objc_msgSend_1(_id, _lib._sel_cancel1); + } + + bool get executing { + return _lib._objc_msgSend_12(_id, _lib._sel_isExecuting1); + } + + bool get finished { + return _lib._objc_msgSend_12(_id, _lib._sel_isFinished1); + } + + bool get concurrent { + return _lib._objc_msgSend_12(_id, _lib._sel_isConcurrent1); + } + + bool get asynchronous { + return _lib._objc_msgSend_12(_id, _lib._sel_isAsynchronous1); + } + + bool get ready { + return _lib._objc_msgSend_12(_id, _lib._sel_isReady1); + } + + void addDependency_(NSOperation? op) { + return _lib._objc_msgSend_715( + _id, _lib._sel_addDependency_1, op?._id ?? ffi.nullptr); + } + + void removeDependency_(NSOperation? op) { + return _lib._objc_msgSend_715( + _id, _lib._sel_removeDependency_1, op?._id ?? ffi.nullptr); + } + + NSArray? get dependencies { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_dependencies1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + int get queuePriority { + return _lib._objc_msgSend_716(_id, _lib._sel_queuePriority1); + } + + set queuePriority(int value) { + _lib._objc_msgSend_717(_id, _lib._sel_setQueuePriority_1, value); + } + + ObjCBlock21 get completionBlock { + final _ret = _lib._objc_msgSend_484(_id, _lib._sel_completionBlock1); + return ObjCBlock21._(_ret, _lib); + } + + set completionBlock(ObjCBlock21 value) { + _lib._objc_msgSend_485(_id, _lib._sel_setCompletionBlock_1, value._id); + } + + void waitUntilFinished() { + return _lib._objc_msgSend_1(_id, _lib._sel_waitUntilFinished1); + } + + double get threadPriority { + return _lib._objc_msgSend_147(_id, _lib._sel_threadPriority1); + } + + set threadPriority(double value) { + _lib._objc_msgSend_467(_id, _lib._sel_setThreadPriority_1, value); + } + + int get qualityOfService { + return _lib._objc_msgSend_468(_id, _lib._sel_qualityOfService1); + } + + set qualityOfService(int value) { + _lib._objc_msgSend_469(_id, _lib._sel_setQualityOfService_1, value); + } + + NSString? get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set name(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setName_1, value?._id ?? ffi.nullptr); + } + + static NSOperation new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSOperation1, _lib._sel_new1); + return NSOperation._(_ret, _lib, retain: false, release: true); + } + + static NSOperation alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSOperation1, _lib._sel_alloc1); + return NSOperation._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSOperation1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSOperation1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOperation1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSOperation1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSOperation1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSOperation1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSOperation1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSOperation1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSOperation1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSOperationQueuePriority { + static const int NSOperationQueuePriorityVeryLow = -8; + static const int NSOperationQueuePriorityLow = -4; + static const int NSOperationQueuePriorityNormal = 0; + static const int NSOperationQueuePriorityHigh = 4; + static const int NSOperationQueuePriorityVeryHigh = 8; +} + +class dispatch_queue_s extends ffi.Opaque {} + +class NSPointerArray extends NSObject { + NSPointerArray._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSPointerArray] that points to the same underlying object as [other]. + static NSPointerArray castFrom(T other) { + return NSPointerArray._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSPointerArray] that wraps the given raw object pointer. + static NSPointerArray castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSPointerArray._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSPointerArray]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSPointerArray1); + } + + NSPointerArray initWithOptions_(int options) { + final _ret = + _lib._objc_msgSend_722(_id, _lib._sel_initWithOptions_1, options); + return NSPointerArray._(_ret, _lib, retain: true, release: true); + } + + NSPointerArray initWithPointerFunctions_(NSPointerFunctions? functions) { + final _ret = _lib._objc_msgSend_736(_id, + _lib._sel_initWithPointerFunctions_1, functions?._id ?? ffi.nullptr); + return NSPointerArray._(_ret, _lib, retain: true, release: true); + } + + static NSPointerArray pointerArrayWithOptions_( + PedometerBindings _lib, int options) { + final _ret = _lib._objc_msgSend_737(_lib._class_NSPointerArray1, + _lib._sel_pointerArrayWithOptions_1, options); + return NSPointerArray._(_ret, _lib, retain: true, release: true); + } + + static NSPointerArray pointerArrayWithPointerFunctions_( + PedometerBindings _lib, NSPointerFunctions? functions) { + final _ret = _lib._objc_msgSend_738( + _lib._class_NSPointerArray1, + _lib._sel_pointerArrayWithPointerFunctions_1, + functions?._id ?? ffi.nullptr); + return NSPointerArray._(_ret, _lib, retain: true, release: true); + } + + NSPointerFunctions? get pointerFunctions { + final _ret = _lib._objc_msgSend_739(_id, _lib._sel_pointerFunctions1); + return _ret.address == 0 + ? null + : NSPointerFunctions._(_ret, _lib, retain: true, release: true); + } + + ffi.Pointer pointerAtIndex_(int index) { + return _lib._objc_msgSend_740(_id, _lib._sel_pointerAtIndex_1, index); + } + + void addPointer_(ffi.Pointer pointer) { + return _lib._objc_msgSend_47(_id, _lib._sel_addPointer_1, pointer); + } + + void removePointerAtIndex_(int index) { + return _lib._objc_msgSend_401(_id, _lib._sel_removePointerAtIndex_1, index); + } + + void insertPointer_atIndex_(ffi.Pointer item, int index) { + return _lib._objc_msgSend_21( + _id, _lib._sel_insertPointer_atIndex_1, item, index); + } + + void replacePointerAtIndex_withPointer_( + int index, ffi.Pointer item) { + return _lib._objc_msgSend_741( + _id, _lib._sel_replacePointerAtIndex_withPointer_1, index, item); + } + + void compact() { + return _lib._objc_msgSend_1(_id, _lib._sel_compact1); + } + + int get count { + return _lib._objc_msgSend_10(_id, _lib._sel_count1); + } + + set count(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setCount_1, value); + } + + static NSObject pointerArrayWithStrongObjects(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSPointerArray1, _lib._sel_pointerArrayWithStrongObjects1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSObject pointerArrayWithWeakObjects(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSPointerArray1, _lib._sel_pointerArrayWithWeakObjects1); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + static NSPointerArray strongObjectsPointerArray(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_742( + _lib._class_NSPointerArray1, _lib._sel_strongObjectsPointerArray1); + return NSPointerArray._(_ret, _lib, retain: true, release: true); + } + + static NSPointerArray weakObjectsPointerArray(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_742( + _lib._class_NSPointerArray1, _lib._sel_weakObjectsPointerArray1); + return NSPointerArray._(_ret, _lib, retain: true, release: true); + } + + NSArray? get allObjects { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_allObjects1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSPointerArray new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSPointerArray1, _lib._sel_new1); + return NSPointerArray._(_ret, _lib, retain: false, release: true); + } + + static NSPointerArray alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSPointerArray1, _lib._sel_alloc1); + return NSPointerArray._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSPointerArray1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSPointerArray1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSPointerArray1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSPointerArray1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSPointerArray1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSPointerArray1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSPointerArray1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSPointerArray1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSPointerArray1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSPointerFunctionsOptions { + static const int NSPointerFunctionsStrongMemory = 0; + static const int NSPointerFunctionsZeroingWeakMemory = 1; + static const int NSPointerFunctionsOpaqueMemory = 2; + static const int NSPointerFunctionsMallocMemory = 3; + static const int NSPointerFunctionsMachVirtualMemory = 4; + static const int NSPointerFunctionsWeakMemory = 5; + static const int NSPointerFunctionsObjectPersonality = 0; + static const int NSPointerFunctionsOpaquePersonality = 256; + static const int NSPointerFunctionsObjectPointerPersonality = 512; + static const int NSPointerFunctionsCStringPersonality = 768; + static const int NSPointerFunctionsStructPersonality = 1024; + static const int NSPointerFunctionsIntegerPersonality = 1280; + static const int NSPointerFunctionsCopyIn = 65536; +} + +class NSPointerFunctions extends NSObject { + NSPointerFunctions._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSPointerFunctions] that points to the same underlying object as [other]. + static NSPointerFunctions castFrom(T other) { + return NSPointerFunctions._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSPointerFunctions] that wraps the given raw object pointer. + static NSPointerFunctions castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSPointerFunctions._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSPointerFunctions]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSPointerFunctions1); + } + + NSPointerFunctions initWithOptions_(int options) { + final _ret = + _lib._objc_msgSend_722(_id, _lib._sel_initWithOptions_1, options); + return NSPointerFunctions._(_ret, _lib, retain: true, release: true); + } + + static NSPointerFunctions pointerFunctionsWithOptions_( + PedometerBindings _lib, int options) { + final _ret = _lib._objc_msgSend_723(_lib._class_NSPointerFunctions1, + _lib._sel_pointerFunctionsWithOptions_1, options); + return NSPointerFunctions._(_ret, _lib, retain: true, release: true); + } + + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>> + get hashFunction { + return _lib._objc_msgSend_724(_id, _lib._sel_hashFunction1); + } + + set hashFunction( + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + value) { + _lib._objc_msgSend_725(_id, _lib._sel_setHashFunction_1, value); + } + + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>> + get isEqualFunction { + return _lib._objc_msgSend_726(_id, _lib._sel_isEqualFunction1); + } + + set isEqualFunction( + ffi.Pointer< + ffi.NativeFunction< + ffi.Bool Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + value) { + _lib._objc_msgSend_727(_id, _lib._sel_setIsEqualFunction_1, value); + } + + ffi.Pointer< + ffi.NativeFunction)>> + get sizeFunction { + return _lib._objc_msgSend_728(_id, _lib._sel_sizeFunction1); + } + + set sizeFunction( + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>> + value) { + _lib._objc_msgSend_729(_id, _lib._sel_setSizeFunction_1, value); + } + + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer)>> + get descriptionFunction { + return _lib._objc_msgSend_730(_id, _lib._sel_descriptionFunction1); + } + + set descriptionFunction( + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function(ffi.Pointer)>> + value) { + _lib._objc_msgSend_731(_id, _lib._sel_setDescriptionFunction_1, value); + } + + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>)>> + get relinquishFunction { + return _lib._objc_msgSend_732(_id, _lib._sel_relinquishFunction1); + } + + set relinquishFunction( + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>)>> + value) { + _lib._objc_msgSend_733(_id, _lib._sel_setRelinquishFunction_1, value); + } + + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function(ffi.Pointer)>>, + ffi.Bool)>> get acquireFunction { + return _lib._objc_msgSend_734(_id, _lib._sel_acquireFunction1); + } + + set acquireFunction( + ffi.Pointer< + ffi.NativeFunction< + ffi.Pointer Function( + ffi.Pointer, + ffi.Pointer< + ffi.NativeFunction< + ffi.UnsignedLong Function( + ffi.Pointer)>>, + ffi.Bool)>> + value) { + _lib._objc_msgSend_735(_id, _lib._sel_setAcquireFunction_1, value); + } + + bool get usesStrongWriteBarrier { + return _lib._objc_msgSend_12(_id, _lib._sel_usesStrongWriteBarrier1); + } + + set usesStrongWriteBarrier(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setUsesStrongWriteBarrier_1, value); + } + + bool get usesWeakReadAndWriteBarriers { + return _lib._objc_msgSend_12(_id, _lib._sel_usesWeakReadAndWriteBarriers1); + } + + set usesWeakReadAndWriteBarriers(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setUsesWeakReadAndWriteBarriers_1, value); + } + + static NSPointerFunctions new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSPointerFunctions1, _lib._sel_new1); + return NSPointerFunctions._(_ret, _lib, retain: false, release: true); + } + + static NSPointerFunctions alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSPointerFunctions1, _lib._sel_alloc1); + return NSPointerFunctions._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSPointerFunctions1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSPointerFunctions1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSPointerFunctions1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSPointerFunctions1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSPointerFunctions1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSPointerFunctions1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSPointerFunctions1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSPointerFunctions1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSPointerFunctions1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSProcessInfo extends NSObject { + NSProcessInfo._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSProcessInfo] that points to the same underlying object as [other]. + static NSProcessInfo castFrom(T other) { + return NSProcessInfo._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSProcessInfo] that wraps the given raw object pointer. + static NSProcessInfo castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSProcessInfo._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSProcessInfo]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSProcessInfo1); + } + + static NSProcessInfo? getProcessInfo(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_743( + _lib._class_NSProcessInfo1, _lib._sel_processInfo1); + return _ret.address == 0 + ? null + : NSProcessInfo._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get environment { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_environment1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSArray? get arguments { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_arguments1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSString? get hostName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_hostName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get processName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_processName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set processName(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setProcessName_1, value?._id ?? ffi.nullptr); + } + + int get processIdentifier { + return _lib._objc_msgSend_177(_id, _lib._sel_processIdentifier1); + } + + NSString? get globallyUniqueString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_globallyUniqueString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int operatingSystem() { + return _lib._objc_msgSend_10(_id, _lib._sel_operatingSystem1); + } + + NSString operatingSystemName() { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_operatingSystemName1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get operatingSystemVersionString { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_operatingSystemVersionString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSOperatingSystemVersion get operatingSystemVersion { + return _lib._objc_msgSend_744(_id, _lib._sel_operatingSystemVersion1); + } + + int get processorCount { + return _lib._objc_msgSend_10(_id, _lib._sel_processorCount1); + } + + int get activeProcessorCount { + return _lib._objc_msgSend_10(_id, _lib._sel_activeProcessorCount1); + } + + int get physicalMemory { + return _lib._objc_msgSend_146(_id, _lib._sel_physicalMemory1); + } + + bool isOperatingSystemAtLeastVersion_(NSOperatingSystemVersion version) { + return _lib._objc_msgSend_745( + _id, _lib._sel_isOperatingSystemAtLeastVersion_1, version); + } + + double get systemUptime { + return _lib._objc_msgSend_147(_id, _lib._sel_systemUptime1); + } + + void disableSuddenTermination() { + return _lib._objc_msgSend_1(_id, _lib._sel_disableSuddenTermination1); + } + + void enableSuddenTermination() { + return _lib._objc_msgSend_1(_id, _lib._sel_enableSuddenTermination1); + } + + void disableAutomaticTermination_(NSString? reason) { + return _lib._objc_msgSend_188(_id, _lib._sel_disableAutomaticTermination_1, + reason?._id ?? ffi.nullptr); + } + + void enableAutomaticTermination_(NSString? reason) { + return _lib._objc_msgSend_188(_id, _lib._sel_enableAutomaticTermination_1, + reason?._id ?? ffi.nullptr); + } + + bool get automaticTerminationSupportEnabled { + return _lib._objc_msgSend_12( + _id, _lib._sel_automaticTerminationSupportEnabled1); + } + + set automaticTerminationSupportEnabled(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAutomaticTerminationSupportEnabled_1, value); + } + + NSObject beginActivityWithOptions_reason_(int options, NSString? reason) { + final _ret = _lib._objc_msgSend_746( + _id, + _lib._sel_beginActivityWithOptions_reason_1, + options, + reason?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + void endActivity_(NSObject? activity) { + return _lib._objc_msgSend_15( + _id, _lib._sel_endActivity_1, activity?._id ?? ffi.nullptr); + } + + void performActivityWithOptions_reason_usingBlock_( + int options, NSString? reason, ObjCBlock21 block) { + return _lib._objc_msgSend_747( + _id, + _lib._sel_performActivityWithOptions_reason_usingBlock_1, + options, + reason?._id ?? ffi.nullptr, + block._id); + } + + void performExpiringActivityWithReason_usingBlock_( + NSString? reason, ObjCBlock37 block) { + return _lib._objc_msgSend_748( + _id, + _lib._sel_performExpiringActivityWithReason_usingBlock_1, + reason?._id ?? ffi.nullptr, + block._id); + } + + NSString? get userName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_userName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get fullUserName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_fullUserName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get thermalState { + return _lib._objc_msgSend_749(_id, _lib._sel_thermalState1); + } + + bool get lowPowerModeEnabled { + return _lib._objc_msgSend_12(_id, _lib._sel_isLowPowerModeEnabled1); + } + + bool get macCatalystApp { + return _lib._objc_msgSend_12(_id, _lib._sel_isMacCatalystApp1); + } + + bool get iOSAppOnMac { + return _lib._objc_msgSend_12(_id, _lib._sel_isiOSAppOnMac1); + } + + static NSProcessInfo new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSProcessInfo1, _lib._sel_new1); + return NSProcessInfo._(_ret, _lib, retain: false, release: true); + } + + static NSProcessInfo alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSProcessInfo1, _lib._sel_alloc1); + return NSProcessInfo._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSProcessInfo1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSProcessInfo1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSProcessInfo1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSProcessInfo1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSProcessInfo1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSProcessInfo1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSProcessInfo1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSProcessInfo1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSProcessInfo1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSOperatingSystemVersion extends ffi.Struct { + @ffi.Long() + external int majorVersion; + + @ffi.Long() + external int minorVersion; + + @ffi.Long() + external int patchVersion; +} + +abstract class NSActivityOptions { + static const int NSActivityIdleDisplaySleepDisabled = 1099511627776; + static const int NSActivityIdleSystemSleepDisabled = 1048576; + static const int NSActivitySuddenTerminationDisabled = 16384; + static const int NSActivityAutomaticTerminationDisabled = 32768; + static const int NSActivityAnimationTrackingEnabled = 35184372088832; + static const int NSActivityTrackingEnabled = 70368744177664; + static const int NSActivityUserInitiated = 16777215; + static const int NSActivityUserInitiatedAllowingIdleSystemSleep = 15728639; + static const int NSActivityBackground = 255; + static const int NSActivityLatencyCritical = 1095216660480; + static const int NSActivityUserInteractive = 1095233437695; +} + +void _ObjCBlock37_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, bool arg0) { + return block.ref.target + .cast>() + .asFunction()(arg0); +} + +final _ObjCBlock37_closureRegistry = {}; +int _ObjCBlock37_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock37_registerClosure(Function fn) { + final id = ++_ObjCBlock37_closureRegistryIndex; + _ObjCBlock37_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock37_closureTrampoline(ffi.Pointer<_ObjCBlock> block, bool arg0) { + return _ObjCBlock37_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock37 extends _ObjCBlockBase { + ObjCBlock37._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock37.fromFunctionPointer(PedometerBindings lib, + ffi.Pointer> ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Bool arg0)>(_ObjCBlock37_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock37.fromFunction(PedometerBindings lib, void Function(bool arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Bool arg0)>(_ObjCBlock37_closureTrampoline) + .cast(), + _ObjCBlock37_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(bool arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, ffi.Bool arg0)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, bool arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSProcessInfoThermalState { + static const int NSProcessInfoThermalStateNominal = 0; + static const int NSProcessInfoThermalStateFair = 1; + static const int NSProcessInfoThermalStateSerious = 2; + static const int NSProcessInfoThermalStateCritical = 3; +} + +class NSTextCheckingResult extends NSObject { + NSTextCheckingResult._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSTextCheckingResult] that points to the same underlying object as [other]. + static NSTextCheckingResult castFrom(T other) { + return NSTextCheckingResult._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSTextCheckingResult] that wraps the given raw object pointer. + static NSTextCheckingResult castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSTextCheckingResult._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSTextCheckingResult]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSTextCheckingResult1); + } + + int get resultType { + return _lib._objc_msgSend_750(_id, _lib._sel_resultType1); + } + + _NSRange get range { + return _lib._objc_msgSend_49(_id, _lib._sel_range1); + } + + NSOrthography? get orthography { + final _ret = _lib._objc_msgSend_751(_id, _lib._sel_orthography1); + return _ret.address == 0 + ? null + : NSOrthography._(_ret, _lib, retain: true, release: true); + } + + NSArray? get grammarDetails { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_grammarDetails1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSDate? get date { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_date1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + NSTimeZone? get timeZone { + final _ret = _lib._objc_msgSend_569(_id, _lib._sel_timeZone1); + return _ret.address == 0 + ? null + : NSTimeZone._(_ret, _lib, retain: true, release: true); + } + + double get duration { + return _lib._objc_msgSend_147(_id, _lib._sel_duration1); + } + + NSDictionary? get components { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_components1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSURL? get URL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_URL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSString? get replacementString { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_replacementString1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray? get alternativeStrings { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_alternativeStrings1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + NSRegularExpression? get regularExpression { + final _ret = _lib._objc_msgSend_763(_id, _lib._sel_regularExpression1); + return _ret.address == 0 + ? null + : NSRegularExpression._(_ret, _lib, retain: true, release: true); + } + + NSString? get phoneNumber { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_phoneNumber1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get numberOfRanges { + return _lib._objc_msgSend_10(_id, _lib._sel_numberOfRanges1); + } + + _NSRange rangeAtIndex_(int idx) { + return _lib._objc_msgSend_282(_id, _lib._sel_rangeAtIndex_1, idx); + } + + _NSRange rangeWithName_(NSString? name) { + return _lib._objc_msgSend_261( + _id, _lib._sel_rangeWithName_1, name?._id ?? ffi.nullptr); + } + + NSTextCheckingResult resultByAdjustingRangesWithOffset_(int offset) { + final _ret = _lib._objc_msgSend_764( + _id, _lib._sel_resultByAdjustingRangesWithOffset_1, offset); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + NSDictionary? get addressComponents { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_addressComponents1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult orthographyCheckingResultWithRange_orthography_( + PedometerBindings _lib, _NSRange range, NSOrthography? orthography) { + final _ret = _lib._objc_msgSend_765( + _lib._class_NSTextCheckingResult1, + _lib._sel_orthographyCheckingResultWithRange_orthography_1, + range, + orthography?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult spellCheckingResultWithRange_( + PedometerBindings _lib, _NSRange range) { + final _ret = _lib._objc_msgSend_766(_lib._class_NSTextCheckingResult1, + _lib._sel_spellCheckingResultWithRange_1, range); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult grammarCheckingResultWithRange_details_( + PedometerBindings _lib, _NSRange range, NSArray? details) { + final _ret = _lib._objc_msgSend_767( + _lib._class_NSTextCheckingResult1, + _lib._sel_grammarCheckingResultWithRange_details_1, + range, + details?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult dateCheckingResultWithRange_date_( + PedometerBindings _lib, _NSRange range, NSDate? date) { + final _ret = _lib._objc_msgSend_768( + _lib._class_NSTextCheckingResult1, + _lib._sel_dateCheckingResultWithRange_date_1, + range, + date?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult + dateCheckingResultWithRange_date_timeZone_duration_( + PedometerBindings _lib, + _NSRange range, + NSDate? date, + NSTimeZone? timeZone, + double duration) { + final _ret = _lib._objc_msgSend_769( + _lib._class_NSTextCheckingResult1, + _lib._sel_dateCheckingResultWithRange_date_timeZone_duration_1, + range, + date?._id ?? ffi.nullptr, + timeZone?._id ?? ffi.nullptr, + duration); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult addressCheckingResultWithRange_components_( + PedometerBindings _lib, _NSRange range, NSDictionary? components) { + final _ret = _lib._objc_msgSend_770( + _lib._class_NSTextCheckingResult1, + _lib._sel_addressCheckingResultWithRange_components_1, + range, + components?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult linkCheckingResultWithRange_URL_( + PedometerBindings _lib, _NSRange range, NSURL? url) { + final _ret = _lib._objc_msgSend_771( + _lib._class_NSTextCheckingResult1, + _lib._sel_linkCheckingResultWithRange_URL_1, + range, + url?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult quoteCheckingResultWithRange_replacementString_( + PedometerBindings _lib, _NSRange range, NSString? replacementString) { + final _ret = _lib._objc_msgSend_772( + _lib._class_NSTextCheckingResult1, + _lib._sel_quoteCheckingResultWithRange_replacementString_1, + range, + replacementString?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult dashCheckingResultWithRange_replacementString_( + PedometerBindings _lib, _NSRange range, NSString? replacementString) { + final _ret = _lib._objc_msgSend_772( + _lib._class_NSTextCheckingResult1, + _lib._sel_dashCheckingResultWithRange_replacementString_1, + range, + replacementString?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult + replacementCheckingResultWithRange_replacementString_( + PedometerBindings _lib, _NSRange range, NSString? replacementString) { + final _ret = _lib._objc_msgSend_772( + _lib._class_NSTextCheckingResult1, + _lib._sel_replacementCheckingResultWithRange_replacementString_1, + range, + replacementString?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult + correctionCheckingResultWithRange_replacementString_( + PedometerBindings _lib, _NSRange range, NSString? replacementString) { + final _ret = _lib._objc_msgSend_772( + _lib._class_NSTextCheckingResult1, + _lib._sel_correctionCheckingResultWithRange_replacementString_1, + range, + replacementString?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult + correctionCheckingResultWithRange_replacementString_alternativeStrings_( + PedometerBindings _lib, + _NSRange range, + NSString? replacementString, + NSArray? alternativeStrings) { + final _ret = _lib._objc_msgSend_773( + _lib._class_NSTextCheckingResult1, + _lib._sel_correctionCheckingResultWithRange_replacementString_alternativeStrings_1, + range, + replacementString?._id ?? ffi.nullptr, + alternativeStrings?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult + regularExpressionCheckingResultWithRanges_count_regularExpression_( + PedometerBindings _lib, + ffi.Pointer<_NSRange> ranges, + int count, + NSRegularExpression? regularExpression) { + final _ret = _lib._objc_msgSend_774( + _lib._class_NSTextCheckingResult1, + _lib._sel_regularExpressionCheckingResultWithRanges_count_regularExpression_1, + ranges, + count, + regularExpression?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult phoneNumberCheckingResultWithRange_phoneNumber_( + PedometerBindings _lib, _NSRange range, NSString? phoneNumber) { + final _ret = _lib._objc_msgSend_772( + _lib._class_NSTextCheckingResult1, + _lib._sel_phoneNumberCheckingResultWithRange_phoneNumber_1, + range, + phoneNumber?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult + transitInformationCheckingResultWithRange_components_( + PedometerBindings _lib, _NSRange range, NSDictionary? components) { + final _ret = _lib._objc_msgSend_770( + _lib._class_NSTextCheckingResult1, + _lib._sel_transitInformationCheckingResultWithRange_components_1, + range, + components?._id ?? ffi.nullptr); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + static NSTextCheckingResult new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSTextCheckingResult1, _lib._sel_new1); + return NSTextCheckingResult._(_ret, _lib, retain: false, release: true); + } + + static NSTextCheckingResult alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSTextCheckingResult1, _lib._sel_alloc1); + return NSTextCheckingResult._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSTextCheckingResult1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSTextCheckingResult1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSTextCheckingResult1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSTextCheckingResult1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSTextCheckingResult1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSTextCheckingResult1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSTextCheckingResult1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSTextCheckingResult1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSTextCheckingResult1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSTextCheckingType { + static const int NSTextCheckingTypeOrthography = 1; + static const int NSTextCheckingTypeSpelling = 2; + static const int NSTextCheckingTypeGrammar = 4; + static const int NSTextCheckingTypeDate = 8; + static const int NSTextCheckingTypeAddress = 16; + static const int NSTextCheckingTypeLink = 32; + static const int NSTextCheckingTypeQuote = 64; + static const int NSTextCheckingTypeDash = 128; + static const int NSTextCheckingTypeReplacement = 256; + static const int NSTextCheckingTypeCorrection = 512; + static const int NSTextCheckingTypeRegularExpression = 1024; + static const int NSTextCheckingTypePhoneNumber = 2048; + static const int NSTextCheckingTypeTransitInformation = 4096; +} + +class NSRegularExpression extends NSObject { + NSRegularExpression._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSRegularExpression] that points to the same underlying object as [other]. + static NSRegularExpression castFrom(T other) { + return NSRegularExpression._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSRegularExpression] that wraps the given raw object pointer. + static NSRegularExpression castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSRegularExpression._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSRegularExpression]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSRegularExpression1); + } + + static NSRegularExpression regularExpressionWithPattern_options_error_( + PedometerBindings _lib, + NSString? pattern, + int options, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_752( + _lib._class_NSRegularExpression1, + _lib._sel_regularExpressionWithPattern_options_error_1, + pattern?._id ?? ffi.nullptr, + options, + error); + return NSRegularExpression._(_ret, _lib, retain: true, release: true); + } + + NSRegularExpression initWithPattern_options_error_(NSString? pattern, + int options, ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_753( + _id, + _lib._sel_initWithPattern_options_error_1, + pattern?._id ?? ffi.nullptr, + options, + error); + return NSRegularExpression._(_ret, _lib, retain: true, release: true); + } + + NSString? get pattern { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_pattern1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get options { + return _lib._objc_msgSend_754(_id, _lib._sel_options1); + } + + int get numberOfCaptureGroups { + return _lib._objc_msgSend_10(_id, _lib._sel_numberOfCaptureGroups1); + } + + static NSString escapedPatternForString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_56(_lib._class_NSRegularExpression1, + _lib._sel_escapedPatternForString_1, string?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + void enumerateMatchesInString_options_range_usingBlock_( + NSString? string, int options, _NSRange range, ObjCBlock38 block) { + return _lib._objc_msgSend_755( + _id, + _lib._sel_enumerateMatchesInString_options_range_usingBlock_1, + string?._id ?? ffi.nullptr, + options, + range, + block._id); + } + + NSArray matchesInString_options_range_( + NSString? string, int options, _NSRange range) { + final _ret = _lib._objc_msgSend_756( + _id, + _lib._sel_matchesInString_options_range_1, + string?._id ?? ffi.nullptr, + options, + range); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + int numberOfMatchesInString_options_range_( + NSString? string, int options, _NSRange range) { + return _lib._objc_msgSend_757( + _id, + _lib._sel_numberOfMatchesInString_options_range_1, + string?._id ?? ffi.nullptr, + options, + range); + } + + NSTextCheckingResult firstMatchInString_options_range_( + NSString? string, int options, _NSRange range) { + final _ret = _lib._objc_msgSend_758( + _id, + _lib._sel_firstMatchInString_options_range_1, + string?._id ?? ffi.nullptr, + options, + range); + return NSTextCheckingResult._(_ret, _lib, retain: true, release: true); + } + + _NSRange rangeOfFirstMatchInString_options_range_( + NSString? string, int options, _NSRange range) { + return _lib._objc_msgSend_759( + _id, + _lib._sel_rangeOfFirstMatchInString_options_range_1, + string?._id ?? ffi.nullptr, + options, + range); + } + + NSString stringByReplacingMatchesInString_options_range_withTemplate_( + NSString? string, int options, _NSRange range, NSString? templ) { + final _ret = _lib._objc_msgSend_760( + _id, + _lib._sel_stringByReplacingMatchesInString_options_range_withTemplate_1, + string?._id ?? ffi.nullptr, + options, + range, + templ?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + int replaceMatchesInString_options_range_withTemplate_( + NSMutableString? string, int options, _NSRange range, NSString? templ) { + return _lib._objc_msgSend_761( + _id, + _lib._sel_replaceMatchesInString_options_range_withTemplate_1, + string?._id ?? ffi.nullptr, + options, + range, + templ?._id ?? ffi.nullptr); + } + + NSString replacementStringForResult_inString_offset_template_( + NSTextCheckingResult? result, + NSString? string, + int offset, + NSString? templ) { + final _ret = _lib._objc_msgSend_762( + _id, + _lib._sel_replacementStringForResult_inString_offset_template_1, + result?._id ?? ffi.nullptr, + string?._id ?? ffi.nullptr, + offset, + templ?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSString escapedTemplateForString_( + PedometerBindings _lib, NSString? string) { + final _ret = _lib._objc_msgSend_56(_lib._class_NSRegularExpression1, + _lib._sel_escapedTemplateForString_1, string?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSRegularExpression new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSRegularExpression1, _lib._sel_new1); + return NSRegularExpression._(_ret, _lib, retain: false, release: true); + } + + static NSRegularExpression alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSRegularExpression1, _lib._sel_alloc1); + return NSRegularExpression._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSRegularExpression1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSRegularExpression1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSRegularExpression1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSRegularExpression1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSRegularExpression1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSRegularExpression1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSRegularExpression1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSRegularExpression1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSRegularExpression1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSRegularExpressionOptions { + static const int NSRegularExpressionCaseInsensitive = 1; + static const int NSRegularExpressionAllowCommentsAndWhitespace = 2; + static const int NSRegularExpressionIgnoreMetacharacters = 4; + static const int NSRegularExpressionDotMatchesLineSeparators = 8; + static const int NSRegularExpressionAnchorsMatchLines = 16; + static const int NSRegularExpressionUseUnixLineSeparators = 32; + static const int NSRegularExpressionUseUnicodeWordBoundaries = 64; +} + +abstract class NSMatchingOptions { + static const int NSMatchingReportProgress = 1; + static const int NSMatchingReportCompletion = 2; + static const int NSMatchingAnchored = 4; + static const int NSMatchingWithTransparentBounds = 8; + static const int NSMatchingWithoutAnchoringBounds = 16; +} + +void _ObjCBlock38_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Int32 arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, int arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock38_closureRegistry = {}; +int _ObjCBlock38_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock38_registerClosure(Function fn) { + final id = ++_ObjCBlock38_closureRegistryIndex; + _ObjCBlock38_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock38_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return _ObjCBlock38_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock38 extends _ObjCBlockBase { + ObjCBlock38._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock38.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Int32 arg1, ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Int32 arg1, + ffi.Pointer arg2)>( + _ObjCBlock38_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock38.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, int arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Int32 arg1, + ffi.Pointer arg2)>( + _ObjCBlock38_closureTrampoline) + .cast(), + _ObjCBlock38_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, int arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Int32 arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + int arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSMatchingFlags { + static const int NSMatchingProgress = 1; + static const int NSMatchingCompleted = 2; + static const int NSMatchingHitEnd = 4; + static const int NSMatchingRequiredEnd = 8; + static const int NSMatchingInternalError = 16; +} + +class NSURLCache extends NSObject { + NSURLCache._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLCache] that points to the same underlying object as [other]. + static NSURLCache castFrom(T other) { + return NSURLCache._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSURLCache] that wraps the given raw object pointer. + static NSURLCache castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLCache._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLCache]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSURLCache1); + } + + /// ! + /// @property sharedURLCache + /// @abstract Returns the shared NSURLCache instance or + /// sets the NSURLCache instance shared by all clients of + /// the current process. This will be the new object returned when + /// calls to the sharedURLCache method are made. + /// @discussion Unless set explicitly through a call to + /// +setSharedURLCache:, this method returns an NSURLCache + /// instance created with the following default values: + ///

    + ///
  • Memory capacity: 4 megabytes (4 * 1024 * 1024 bytes) + ///
  • Disk capacity: 20 megabytes (20 * 1024 * 1024 bytes) + ///
  • Disk path: (user home directory)/Library/Caches/(application bundle id) + ///
+ ///

Users who do not have special caching requirements or + /// constraints should find the default shared cache instance + /// acceptable. If this default shared cache instance is not + /// acceptable, +setSharedURLCache: can be called to set a + /// different NSURLCache instance to be returned from this method. + /// Callers should take care to ensure that the setter is called + /// at a time when no other caller has a reference to the previously-set + /// shared URL cache. This is to prevent storing cache data from + /// becoming unexpectedly unretrievable. + /// @result the shared NSURLCache instance. + static NSURLCache? getSharedURLCache(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_775( + _lib._class_NSURLCache1, _lib._sel_sharedURLCache1); + return _ret.address == 0 + ? null + : NSURLCache._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @property sharedURLCache + /// @abstract Returns the shared NSURLCache instance or + /// sets the NSURLCache instance shared by all clients of + /// the current process. This will be the new object returned when + /// calls to the sharedURLCache method are made. + /// @discussion Unless set explicitly through a call to + /// +setSharedURLCache:, this method returns an NSURLCache + /// instance created with the following default values: + ///

    + ///
  • Memory capacity: 4 megabytes (4 * 1024 * 1024 bytes) + ///
  • Disk capacity: 20 megabytes (20 * 1024 * 1024 bytes) + ///
  • Disk path: (user home directory)/Library/Caches/(application bundle id) + ///
+ ///

Users who do not have special caching requirements or + /// constraints should find the default shared cache instance + /// acceptable. If this default shared cache instance is not + /// acceptable, +setSharedURLCache: can be called to set a + /// different NSURLCache instance to be returned from this method. + /// Callers should take care to ensure that the setter is called + /// at a time when no other caller has a reference to the previously-set + /// shared URL cache. This is to prevent storing cache data from + /// becoming unexpectedly unretrievable. + /// @result the shared NSURLCache instance. + static void setSharedURLCache(PedometerBindings _lib, NSURLCache? value) { + _lib._objc_msgSend_776(_lib._class_NSURLCache1, + _lib._sel_setSharedURLCache_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @method initWithMemoryCapacity:diskCapacity:diskPath: + /// @abstract Initializes an NSURLCache with the given capacity and + /// path. + /// @discussion The returned NSURLCache is backed by disk, so + /// developers can be more liberal with space when choosing the + /// capacity for this kind of cache. A disk cache measured in the tens + /// of megabytes should be acceptable in most cases. + /// @param memoryCapacity the capacity, measured in bytes, for the cache in memory. + /// @param diskCapacity the capacity, measured in bytes, for the cache on disk. + /// @param path the path on disk where the cache data is stored. + /// @result an initialized NSURLCache, with the given capacity, backed + /// by disk. + NSURLCache initWithMemoryCapacity_diskCapacity_diskPath_( + int memoryCapacity, int diskCapacity, NSString? path) { + final _ret = _lib._objc_msgSend_777( + _id, + _lib._sel_initWithMemoryCapacity_diskCapacity_diskPath_1, + memoryCapacity, + diskCapacity, + path?._id ?? ffi.nullptr); + return NSURLCache._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method initWithMemoryCapacity:diskCapacity:directoryURL: + /// @abstract Initializes an NSURLCache with the given capacity and directory. + /// @param memoryCapacity the capacity, measured in bytes, for the cache in memory. Or 0 to disable memory cache. + /// @param diskCapacity the capacity, measured in bytes, for the cache on disk. Or 0 to disable disk cache. + /// @param directoryURL the path to a directory on disk where the cache data is stored. Or nil for default directory. + /// @result an initialized NSURLCache, with the given capacity, optionally backed by disk. + NSURLCache initWithMemoryCapacity_diskCapacity_directoryURL_( + int memoryCapacity, int diskCapacity, NSURL? directoryURL) { + final _ret = _lib._objc_msgSend_778( + _id, + _lib._sel_initWithMemoryCapacity_diskCapacity_directoryURL_1, + memoryCapacity, + diskCapacity, + directoryURL?._id ?? ffi.nullptr); + return NSURLCache._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method cachedResponseForRequest: + /// @abstract Returns the NSCachedURLResponse stored in the cache with + /// the given request. + /// @discussion The method returns nil if there is no + /// NSCachedURLResponse stored using the given request. + /// @param request the NSURLRequest to use as a key for the lookup. + /// @result The NSCachedURLResponse stored in the cache with the given + /// request, or nil if there is no NSCachedURLResponse stored with the + /// given request. + NSCachedURLResponse cachedResponseForRequest_(NSURLRequest? request) { + final _ret = _lib._objc_msgSend_782( + _id, _lib._sel_cachedResponseForRequest_1, request?._id ?? ffi.nullptr); + return NSCachedURLResponse._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method storeCachedResponse:forRequest: + /// @abstract Stores the given NSCachedURLResponse in the cache using + /// the given request. + /// @param cachedResponse The cached response to store. + /// @param request the NSURLRequest to use as a key for the storage. + void storeCachedResponse_forRequest_( + NSCachedURLResponse? cachedResponse, NSURLRequest? request) { + return _lib._objc_msgSend_783( + _id, + _lib._sel_storeCachedResponse_forRequest_1, + cachedResponse?._id ?? ffi.nullptr, + request?._id ?? ffi.nullptr); + } + + /// ! + /// @method removeCachedResponseForRequest: + /// @abstract Removes the NSCachedURLResponse from the cache that is + /// stored using the given request. + /// @discussion No action is taken if there is no NSCachedURLResponse + /// stored with the given request. + /// @param request the NSURLRequest to use as a key for the lookup. + void removeCachedResponseForRequest_(NSURLRequest? request) { + return _lib._objc_msgSend_784( + _id, + _lib._sel_removeCachedResponseForRequest_1, + request?._id ?? ffi.nullptr); + } + + /// ! + /// @method removeAllCachedResponses + /// @abstract Clears the given cache, removing all NSCachedURLResponse + /// objects that it stores. + void removeAllCachedResponses() { + return _lib._objc_msgSend_1(_id, _lib._sel_removeAllCachedResponses1); + } + + /// ! + /// @method removeCachedResponsesSince: + /// @abstract Clears the given cache of any cached responses since the provided date. + void removeCachedResponsesSinceDate_(NSDate? date) { + return _lib._objc_msgSend_465(_id, + _lib._sel_removeCachedResponsesSinceDate_1, date?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract In-memory capacity of the receiver. + /// @discussion At the time this call is made, the in-memory cache will truncate its contents to the size given, if necessary. + /// @result The in-memory capacity, measured in bytes, for the receiver. + int get memoryCapacity { + return _lib._objc_msgSend_10(_id, _lib._sel_memoryCapacity1); + } + + /// ! + /// @abstract In-memory capacity of the receiver. + /// @discussion At the time this call is made, the in-memory cache will truncate its contents to the size given, if necessary. + /// @result The in-memory capacity, measured in bytes, for the receiver. + set memoryCapacity(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setMemoryCapacity_1, value); + } + + /// ! + /// @abstract The on-disk capacity of the receiver. + /// @discussion The on-disk capacity, measured in bytes, for the receiver. On mutation the on-disk cache will truncate its contents to the size given, if necessary. + int get diskCapacity { + return _lib._objc_msgSend_10(_id, _lib._sel_diskCapacity1); + } + + /// ! + /// @abstract The on-disk capacity of the receiver. + /// @discussion The on-disk capacity, measured in bytes, for the receiver. On mutation the on-disk cache will truncate its contents to the size given, if necessary. + set diskCapacity(int value) { + _lib._objc_msgSend_444(_id, _lib._sel_setDiskCapacity_1, value); + } + + /// ! + /// @abstract Returns the current amount of space consumed by the + /// in-memory cache of the receiver. + /// @discussion This size, measured in bytes, indicates the current + /// usage of the in-memory cache. + /// @result the current usage of the in-memory cache of the receiver. + int get currentMemoryUsage { + return _lib._objc_msgSend_10(_id, _lib._sel_currentMemoryUsage1); + } + + /// ! + /// @abstract Returns the current amount of space consumed by the + /// on-disk cache of the receiver. + /// @discussion This size, measured in bytes, indicates the current + /// usage of the on-disk cache. + /// @result the current usage of the on-disk cache of the receiver. + int get currentDiskUsage { + return _lib._objc_msgSend_10(_id, _lib._sel_currentDiskUsage1); + } + + void storeCachedResponse_forDataTask_( + NSCachedURLResponse? cachedResponse, NSURLSessionDataTask? dataTask) { + return _lib._objc_msgSend_785( + _id, + _lib._sel_storeCachedResponse_forDataTask_1, + cachedResponse?._id ?? ffi.nullptr, + dataTask?._id ?? ffi.nullptr); + } + + void getCachedResponseForDataTask_completionHandler_( + NSURLSessionDataTask? dataTask, ObjCBlock39 completionHandler) { + return _lib._objc_msgSend_786( + _id, + _lib._sel_getCachedResponseForDataTask_completionHandler_1, + dataTask?._id ?? ffi.nullptr, + completionHandler._id); + } + + void removeCachedResponseForDataTask_(NSURLSessionDataTask? dataTask) { + return _lib._objc_msgSend_787( + _id, + _lib._sel_removeCachedResponseForDataTask_1, + dataTask?._id ?? ffi.nullptr); + } + + static NSURLCache new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLCache1, _lib._sel_new1); + return NSURLCache._(_ret, _lib, retain: false, release: true); + } + + static NSURLCache alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLCache1, _lib._sel_alloc1); + return NSURLCache._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLCache1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLCache1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLCache1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLCache1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLCache1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLCache1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLCache1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURLCache1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLCache1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @class NSCachedURLResponse +/// NSCachedURLResponse is a class whose objects functions as a wrapper for +/// objects that are stored in the framework's caching system. +/// It is used to maintain characteristics and attributes of a cached +/// object. +class NSCachedURLResponse extends NSObject { + NSCachedURLResponse._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSCachedURLResponse] that points to the same underlying object as [other]. + static NSCachedURLResponse castFrom(T other) { + return NSCachedURLResponse._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSCachedURLResponse] that wraps the given raw object pointer. + static NSCachedURLResponse castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSCachedURLResponse._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSCachedURLResponse]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSCachedURLResponse1); + } + + /// ! + /// @method initWithResponse:data + /// @abstract Initializes an NSCachedURLResponse with the given + /// response and data. + /// @discussion A default NSURLCacheStoragePolicy is used for + /// NSCachedURLResponse objects initialized with this method: + /// NSURLCacheStorageAllowed. + /// @param response a NSURLResponse object. + /// @param data an NSData object representing the URL content + /// corresponding to the given response. + /// @result an initialized NSCachedURLResponse. + NSCachedURLResponse initWithResponse_data_( + NSURLResponse? response, NSData? data) { + final _ret = _lib._objc_msgSend_779(_id, _lib._sel_initWithResponse_data_1, + response?._id ?? ffi.nullptr, data?._id ?? ffi.nullptr); + return NSCachedURLResponse._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method initWithResponse:data:userInfo:storagePolicy: + /// @abstract Initializes an NSCachedURLResponse with the given + /// response, data, user-info dictionary, and storage policy. + /// @param response a NSURLResponse object. + /// @param data an NSData object representing the URL content + /// corresponding to the given response. + /// @param userInfo a dictionary user-specified information to be + /// stored with the NSCachedURLResponse. + /// @param storagePolicy an NSURLCacheStoragePolicy constant. + /// @result an initialized NSCachedURLResponse. + NSCachedURLResponse initWithResponse_data_userInfo_storagePolicy_( + NSURLResponse? response, + NSData? data, + NSDictionary? userInfo, + int storagePolicy) { + final _ret = _lib._objc_msgSend_780( + _id, + _lib._sel_initWithResponse_data_userInfo_storagePolicy_1, + response?._id ?? ffi.nullptr, + data?._id ?? ffi.nullptr, + userInfo?._id ?? ffi.nullptr, + storagePolicy); + return NSCachedURLResponse._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the response wrapped by this instance. + /// @result The response wrapped by this instance. + NSURLResponse? get response { + final _ret = _lib._objc_msgSend_694(_id, _lib._sel_response1); + return _ret.address == 0 + ? null + : NSURLResponse._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the data of the receiver. + /// @result The data of the receiver. + NSData? get data { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_data1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the userInfo dictionary of the receiver. + /// @result The userInfo dictionary of the receiver. + NSDictionary? get userInfo { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_userInfo1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the NSURLCacheStoragePolicy constant of the receiver. + /// @result The NSURLCacheStoragePolicy constant of the receiver. + int get storagePolicy { + return _lib._objc_msgSend_781(_id, _lib._sel_storagePolicy1); + } + + static NSCachedURLResponse new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSCachedURLResponse1, _lib._sel_new1); + return NSCachedURLResponse._(_ret, _lib, retain: false, release: true); + } + + static NSCachedURLResponse alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSCachedURLResponse1, _lib._sel_alloc1); + return NSCachedURLResponse._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSCachedURLResponse1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSCachedURLResponse1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSCachedURLResponse1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSCachedURLResponse1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSCachedURLResponse1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSCachedURLResponse1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSCachedURLResponse1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSCachedURLResponse1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSCachedURLResponse1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @enum NSURLCacheStoragePolicy +/// +/// @discussion The NSURLCacheStoragePolicy enum defines constants that +/// can be used to specify the type of storage that is allowable for an +/// NSCachedURLResponse object that is to be stored in an NSURLCache. +/// +/// @constant NSURLCacheStorageAllowed Specifies that storage in an +/// NSURLCache is allowed without restriction. +/// +/// @constant NSURLCacheStorageAllowedInMemoryOnly Specifies that +/// storage in an NSURLCache is allowed; however storage should be +/// done in memory only, no disk storage should be done. +/// +/// @constant NSURLCacheStorageNotAllowed Specifies that storage in an +/// NSURLCache is not allowed in any fashion, either in memory or on +/// disk. +abstract class NSURLCacheStoragePolicy { + static const int NSURLCacheStorageAllowed = 0; + static const int NSURLCacheStorageAllowedInMemoryOnly = 1; + static const int NSURLCacheStorageNotAllowed = 2; +} + +class NSURLSessionDataTask extends NSURLSessionTask { + NSURLSessionDataTask._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionDataTask] that points to the same underlying object as [other]. + static NSURLSessionDataTask castFrom(T other) { + return NSURLSessionDataTask._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionDataTask] that wraps the given raw object pointer. + static NSURLSessionDataTask castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionDataTask._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionDataTask]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionDataTask1); + } + + @override + NSURLSessionDataTask init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionDataTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionDataTask new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLSessionDataTask1, _lib._sel_new1); + return NSURLSessionDataTask._(_ret, _lib, retain: false, release: true); + } + + static NSURLSessionDataTask alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionDataTask1, _lib._sel_alloc1); + return NSURLSessionDataTask._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionDataTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionDataTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionDataTask1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionDataTask1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionDataTask1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionDataTask1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionDataTask1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionDataTask1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionDataTask1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock39_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock39_closureRegistry = {}; +int _ObjCBlock39_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock39_registerClosure(Function fn) { + final id = ++_ObjCBlock39_closureRegistryIndex; + _ObjCBlock39_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock39_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock39_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock39 extends _ObjCBlockBase { + ObjCBlock39._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock39.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock39_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock39.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock39_closureTrampoline) + .cast(), + _ObjCBlock39_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// ! +/// @class NSURLConnection +/// +/// @abstract An NSURLConnection object provides support to perform +/// asynchronous loads of a URL request, providing data to a +/// client supplied delegate. +/// +/// @discussion The interface for NSURLConnection is very sparse, providing +/// only the controls to start and cancel asynchronous loads of a +/// URL request.

+/// +/// An NSURLConnection may be used for loading of resource data +/// directly to memory, in which case an +/// NSURLConnectionDataDelegate should be supplied, or for +/// downloading of resource data directly to a file, in which case +/// an NSURLConnectionDownloadDelegate is used. The delegate is +/// retained by the NSURLConnection until a terminal condition is +/// encountered. These two delegates are logically subclasses of +/// the base protocol, NSURLConnectionDelegate.

+/// +/// A terminal condition produced by the loader will result in a +/// connection:didFailWithError: in the case of an error, or +/// connectionDidFinishLoading: or connectionDidFinishDownloading: +/// delegate message.

+/// +/// The -cancel message hints to the loader that a resource load +/// should be abandoned but does not guarantee that more delegate +/// messages will not be delivered. If -cancel does cause the +/// load to be abandoned, the delegate will be released without +/// further messages. In general, a caller should be prepared for +/// -cancel to have no effect, and internally ignore any delegate +/// callbacks until the delegate is released. +/// +/// Scheduling of an NSURLConnection specifies the context in +/// which delegate callbacks will be made, but the actual IO may +/// occur on a separate thread and should be considered an +/// implementation detail.

+/// +/// When created, an NSURLConnection performs a deep-copy of the +/// NSURLRequest. This copy is available through the +/// -originalRequest method. As the connection performs the load, +/// this request may change as a result of protocol +/// canonicalization or due to following redirects. +/// -currentRequest can be used to retrieve this value.

+/// +/// An NSURLConnections created with the +/// +connectionWithRequest:delegate: or -initWithRequest:delegate: +/// methods are scheduled on the current runloop immediately, and +/// it is not necessary to send the -start message to begin the +/// resource load.

+/// +/// NSURLConnections created with +/// -initWithRequest:delegate:startImmediately: are not +/// automatically scheduled. Use -scheduleWithRunLoop:forMode: or +/// -setDelegateQueue: to specify the context for delegate +/// callbacks, and -start to begin the load. If you do not +/// explicitly schedule the connection before -start, it will be +/// scheduled on the current runloop and mode automatically.

+/// +/// The NSURLConnectionSynchronousLoading category adds +/// +sendSynchronousRequest:returningResponse:error, which blocks +/// the current thread until the resource data is available or an +/// error occurs. It should be noted that using this method on an +/// applications main run loop may result in an unacceptably long +/// delay in a user interface and its use is strongly +/// discourage.

+/// +/// The NSURLConnectionQueuedLoading category implements +/// +sendAsynchronousRequest:queue:completionHandler, providing +/// similar simplicity but provides a mechanism where the current +/// runloop is not blocked.

+/// +/// Both of the immediate loading categories do not provide for +/// customization of resource load, and do not allow the caller to +/// respond to, e.g., authentication challenges.

+class NSURLConnection extends NSObject { + NSURLConnection._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLConnection] that points to the same underlying object as [other]. + static NSURLConnection castFrom(T other) { + return NSURLConnection._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLConnection] that wraps the given raw object pointer. + static NSURLConnection castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLConnection._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLConnection]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLConnection1); + } + + NSURLConnection initWithRequest_delegate_startImmediately_( + NSURLRequest? request, NSObject delegate, bool startImmediately) { + final _ret = _lib._objc_msgSend_788( + _id, + _lib._sel_initWithRequest_delegate_startImmediately_1, + request?._id ?? ffi.nullptr, + delegate._id, + startImmediately); + return NSURLConnection._(_ret, _lib, retain: true, release: true); + } + + NSURLConnection initWithRequest_delegate_( + NSURLRequest? request, NSObject delegate) { + final _ret = _lib._objc_msgSend_789( + _id, + _lib._sel_initWithRequest_delegate_1, + request?._id ?? ffi.nullptr, + delegate._id); + return NSURLConnection._(_ret, _lib, retain: true, release: true); + } + + static NSURLConnection connectionWithRequest_delegate_( + PedometerBindings _lib, NSURLRequest? request, NSObject delegate) { + final _ret = _lib._objc_msgSend_790( + _lib._class_NSURLConnection1, + _lib._sel_connectionWithRequest_delegate_1, + request?._id ?? ffi.nullptr, + delegate._id); + return NSURLConnection._(_ret, _lib, retain: true, release: true); + } + + NSURLRequest? get originalRequest { + final _ret = _lib._objc_msgSend_692(_id, _lib._sel_originalRequest1); + return _ret.address == 0 + ? null + : NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + NSURLRequest? get currentRequest { + final _ret = _lib._objc_msgSend_692(_id, _lib._sel_currentRequest1); + return _ret.address == 0 + ? null + : NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + void start() { + return _lib._objc_msgSend_1(_id, _lib._sel_start1); + } + + void cancel() { + return _lib._objc_msgSend_1(_id, _lib._sel_cancel1); + } + + void scheduleInRunLoop_forMode_(NSRunLoop? aRunLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_scheduleInRunLoop_forMode_1, + aRunLoop?._id ?? ffi.nullptr, mode._id); + } + + void unscheduleFromRunLoop_forMode_(NSRunLoop? aRunLoop, NSString mode) { + return _lib._objc_msgSend_650( + _id, + _lib._sel_unscheduleFromRunLoop_forMode_1, + aRunLoop?._id ?? ffi.nullptr, + mode._id); + } + + void setDelegateQueue_(NSOperationQueue? queue) { + return _lib._objc_msgSend_791( + _id, _lib._sel_setDelegateQueue_1, queue?._id ?? ffi.nullptr); + } + + /// ! + /// @method canHandleRequest: + /// + /// @abstract + /// Performs a "preflight" operation that performs + /// some speculative checks to see if a connection can + /// be initialized, and the associated I/O that is + /// started in the initializer methods can begin. + /// + /// @discussion + /// The result of this method is valid only as long as + /// no protocols are registered or unregistered, and + /// as long as the request is not mutated (if the + /// request is mutable). Hence, clients should be + /// prepared to handle failures even if they have + /// performed request preflighting by calling this + /// method. + /// + /// @param + /// request The request to preflight. + /// + /// @result YES if it is likely that the given request can be used to + /// initialize a connection and the associated I/O can be + /// started, NO otherwise. + static bool canHandleRequest_(PedometerBindings _lib, NSURLRequest? request) { + return _lib._objc_msgSend_792(_lib._class_NSURLConnection1, + _lib._sel_canHandleRequest_1, request?._id ?? ffi.nullptr); + } + + /// ! + /// @method sendSynchronousRequest:returningResponse:error: + /// + /// @abstract + /// Performs a synchronous load of the given request, + /// returning an NSURLResponse in the given out + /// parameter. + /// + /// @discussion + /// A synchronous load for the given request is built on + /// top of the asynchronous loading code made available + /// by the class. The calling thread is blocked while + /// the asynchronous loading system performs the URL load + /// on a thread spawned specifically for this load + /// request. No special threading or run loop + /// configuration is necessary in the calling thread in + /// order to perform a synchronous load. For instance, + /// the calling thread need not be running its run loop. + /// + /// @param + /// request The request to load. Note that the request is + /// deep-copied as part of the initialization + /// process. Changes made to the request argument after + /// this method returns do not affect the request that is + /// used for the loading process. + /// + /// @param + /// response An out parameter which is filled in with the + /// response generated by performing the load. + /// + /// @param + /// error Out parameter (may be NULL) used if an error occurs + /// while processing the request. Will not be modified if the + /// load succeeds. + /// + /// @result The content of the URL resulting from performing the load, + /// or nil if the load failed. + static NSData sendSynchronousRequest_returningResponse_error_( + PedometerBindings _lib, + NSURLRequest? request, + ffi.Pointer> response, + ffi.Pointer> error) { + final _ret = _lib._objc_msgSend_793( + _lib._class_NSURLConnection1, + _lib._sel_sendSynchronousRequest_returningResponse_error_1, + request?._id ?? ffi.nullptr, + response, + error); + return NSData._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method sendAsynchronousRequest:queue:completionHandler: + /// + /// @abstract + /// Performs an asynchronous load of the given + /// request. When the request has completed or failed, + /// the block will be executed from the context of the + /// specified NSOperationQueue. + /// + /// @discussion + /// This is a convenience routine that allows for + /// asynchronous loading of a url-based resource. If + /// the resource load is successful, the data parameter + /// to the callback will contain the resource data and + /// the error parameter will be nil. If the resource + /// load fails, the data parameter will be nil and the + /// error will contain information about the failure. + /// + /// @param + /// request The request to load. Note that the request is + /// deep-copied as part of the initialization + /// process. Changes made to the request argument after + /// this method returns do not affect the request that + /// is used for the loading process. + /// + /// @param + /// queue An NSOperationQueue upon which the handler block will + /// be dispatched. + /// + /// @param + /// handler A block which receives the results of the resource load. + static void sendAsynchronousRequest_queue_completionHandler_( + PedometerBindings _lib, + NSURLRequest? request, + NSOperationQueue? queue, + ObjCBlock40 handler) { + return _lib._objc_msgSend_794( + _lib._class_NSURLConnection1, + _lib._sel_sendAsynchronousRequest_queue_completionHandler_1, + request?._id ?? ffi.nullptr, + queue?._id ?? ffi.nullptr, + handler._id); + } + + static NSURLConnection new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLConnection1, _lib._sel_new1); + return NSURLConnection._(_ret, _lib, retain: false, release: true); + } + + static NSURLConnection alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLConnection1, _lib._sel_alloc1); + return NSURLConnection._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLConnection1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLConnection1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLConnection1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLConnection1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLConnection1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLConnection1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLConnection1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLConnection1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLConnection1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock40_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock40_closureRegistry = {}; +int _ObjCBlock40_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock40_registerClosure(Function fn) { + final id = ++_ObjCBlock40_closureRegistryIndex; + _ObjCBlock40_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock40_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock40_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock40 extends _ObjCBlockBase { + ObjCBlock40._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock40.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock40_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock40.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock40_closureTrampoline) + .cast(), + _ObjCBlock40_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// ! +/// @class NSURLCredential +/// @discussion This class is an immutable object representing an authentication credential. The actual type of the credential is determined by the constructor called in the categories declared below. +class NSURLCredential extends NSObject { + NSURLCredential._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLCredential] that points to the same underlying object as [other]. + static NSURLCredential castFrom(T other) { + return NSURLCredential._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLCredential] that wraps the given raw object pointer. + static NSURLCredential castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLCredential._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLCredential]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLCredential1); + } + + /// ! + /// @abstract Determine whether this credential is or should be stored persistently + /// @result A value indicating whether this credential is stored permanently, per session or not at all. + int get persistence { + return _lib._objc_msgSend_795(_id, _lib._sel_persistence1); + } + + /// ! + /// @method initWithUser:password:persistence: + /// @abstract Initialize a NSURLCredential with a user and password + /// @param user the username + /// @param password the password + /// @param persistence enum that says to store per session, permanently or not at all + /// @result The initialized NSURLCredential + NSURLCredential initWithUser_password_persistence_( + NSString? user, NSString? password, int persistence) { + final _ret = _lib._objc_msgSend_796( + _id, + _lib._sel_initWithUser_password_persistence_1, + user?._id ?? ffi.nullptr, + password?._id ?? ffi.nullptr, + persistence); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method credentialWithUser:password:persistence: + /// @abstract Create a new NSURLCredential with a user and password + /// @param user the username + /// @param password the password + /// @param persistence enum that says to store per session, permanently or not at all + /// @result The new autoreleased NSURLCredential + static NSURLCredential credentialWithUser_password_persistence_( + PedometerBindings _lib, + NSString? user, + NSString? password, + int persistence) { + final _ret = _lib._objc_msgSend_797( + _lib._class_NSURLCredential1, + _lib._sel_credentialWithUser_password_persistence_1, + user?._id ?? ffi.nullptr, + password?._id ?? ffi.nullptr, + persistence); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get the username + /// @result The user string + NSString? get user { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_user1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get the password + /// @result The password string + /// @discussion This method might actually attempt to retrieve the + /// password from an external store, possible resulting in prompting, + /// so do not call it unless needed. + NSString? get password { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_password1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Find out if this credential has a password, without trying to get it + /// @result YES if this credential has a password, otherwise NO + /// @discussion If this credential's password is actually kept in an + /// external store, the password method may return nil even if this + /// method returns YES, since getting the password may fail, or the + /// user may refuse access. + bool get hasPassword { + return _lib._objc_msgSend_12(_id, _lib._sel_hasPassword1); + } + + /// ! + /// @method initWithIdentity:certificates:persistence: + /// @abstract Initialize an NSURLCredential with an identity and array of at least 1 client certificates (SecCertificateRef) + /// @param identity a SecIdentityRef object + /// @param certArray an array containing at least one SecCertificateRef objects + /// @param persistence enum that says to store per session, permanently or not at all + /// @result the Initialized NSURLCredential + NSURLCredential initWithIdentity_certificates_persistence_( + ffi.Pointer<__SecIdentity> identity, + NSArray? certArray, + int persistence) { + final _ret = _lib._objc_msgSend_798( + _id, + _lib._sel_initWithIdentity_certificates_persistence_1, + identity, + certArray?._id ?? ffi.nullptr, + persistence); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method credentialWithIdentity:certificates:persistence: + /// @abstract Create a new NSURLCredential with an identity and certificate array + /// @param identity a SecIdentityRef object + /// @param certArray an array containing at least one SecCertificateRef objects + /// @param persistence enum that says to store per session, permanently or not at all + /// @result The new autoreleased NSURLCredential + static NSURLCredential credentialWithIdentity_certificates_persistence_( + PedometerBindings _lib, + ffi.Pointer<__SecIdentity> identity, + NSArray? certArray, + int persistence) { + final _ret = _lib._objc_msgSend_799( + _lib._class_NSURLCredential1, + _lib._sel_credentialWithIdentity_certificates_persistence_1, + identity, + certArray?._id ?? ffi.nullptr, + persistence); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the SecIdentityRef of this credential, if it was created with a certificate and identity + /// @result A SecIdentityRef or NULL if this is a username/password credential + ffi.Pointer<__SecIdentity> get identity { + return _lib._objc_msgSend_800(_id, _lib._sel_identity1); + } + + /// ! + /// @abstract Returns an NSArray of SecCertificateRef objects representing the client certificate for this credential, if this credential was created with an identity and certificate. + /// @result an NSArray of SecCertificateRef or NULL if this is a username/password credential + NSArray? get certificates { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_certificates1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method initWithTrust: + /// @abstract Initialize a new NSURLCredential which specifies that the specified trust has been accepted. + /// @result the Initialized NSURLCredential + NSURLCredential initWithTrust_(ffi.Pointer<__SecTrust> trust) { + final _ret = _lib._objc_msgSend_801(_id, _lib._sel_initWithTrust_1, trust); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method credentialForTrust: + /// @abstract Create a new NSURLCredential which specifies that a handshake has been trusted. + /// @result The new autoreleased NSURLCredential + static NSURLCredential credentialForTrust_( + PedometerBindings _lib, ffi.Pointer<__SecTrust> trust) { + final _ret = _lib._objc_msgSend_802( + _lib._class_NSURLCredential1, _lib._sel_credentialForTrust_1, trust); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + static NSURLCredential new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLCredential1, _lib._sel_new1); + return NSURLCredential._(_ret, _lib, retain: false, release: true); + } + + static NSURLCredential alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLCredential1, _lib._sel_alloc1); + return NSURLCredential._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLCredential1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLCredential1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLCredential1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLCredential1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLCredential1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLCredential1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLCredential1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLCredential1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLCredential1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @enum NSURLCredentialPersistence +/// @abstract Constants defining how long a credential will be kept around +/// @constant NSURLCredentialPersistenceNone This credential won't be saved. +/// @constant NSURLCredentialPersistenceForSession This credential will only be stored for this session. +/// @constant NSURLCredentialPersistencePermanent This credential will be stored permanently. Note: Whereas in Mac OS X any application can access any credential provided the user gives permission, in iPhone OS an application can access only its own credentials. +/// @constant NSURLCredentialPersistenceSynchronizable This credential will be stored permanently. Additionally, this credential will be distributed to other devices based on the owning AppleID. +/// Note: Whereas in Mac OS X any application can access any credential provided the user gives permission, on iOS an application can +/// access only its own credentials. +abstract class NSURLCredentialPersistence { + static const int NSURLCredentialPersistenceNone = 0; + static const int NSURLCredentialPersistenceForSession = 1; + static const int NSURLCredentialPersistencePermanent = 2; + static const int NSURLCredentialPersistenceSynchronizable = 3; +} + +class __SecIdentity extends ffi.Opaque {} + +class __SecTrust extends ffi.Opaque {} + +/// ! +/// @class NSURLProtectionSpace +/// @discussion This class represents a protection space requiring authentication. +class NSURLProtectionSpace extends NSObject { + NSURLProtectionSpace._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLProtectionSpace] that points to the same underlying object as [other]. + static NSURLProtectionSpace castFrom(T other) { + return NSURLProtectionSpace._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLProtectionSpace] that wraps the given raw object pointer. + static NSURLProtectionSpace castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLProtectionSpace._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLProtectionSpace]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLProtectionSpace1); + } + + /// ! + /// @method initWithHost:port:protocol:realm:authenticationMethod: + /// @abstract Initialize a protection space representing an origin server, or a realm on one + /// @param host The hostname of the server + /// @param port The port for the server + /// @param protocol The protocol for this server - e.g. "http", "ftp", "https" + /// @param realm A string indicating a protocol-specific subdivision + /// of a single host. For http and https, this maps to the realm + /// string in http authentication challenges. For many other protocols + /// it is unused. + /// @param authenticationMethod The authentication method to use to access this protection space - + /// valid values include nil (default method), @"digest" and @"form". + /// @result The initialized object. + NSURLProtectionSpace initWithHost_port_protocol_realm_authenticationMethod_( + NSString? host, + int port, + NSString? protocol, + NSString? realm, + NSString? authenticationMethod) { + final _ret = _lib._objc_msgSend_803( + _id, + _lib._sel_initWithHost_port_protocol_realm_authenticationMethod_1, + host?._id ?? ffi.nullptr, + port, + protocol?._id ?? ffi.nullptr, + realm?._id ?? ffi.nullptr, + authenticationMethod?._id ?? ffi.nullptr); + return NSURLProtectionSpace._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method initWithProxyHost:port:type:realm:authenticationMethod: + /// @abstract Initialize a protection space representing a proxy server, or a realm on one + /// @param host The hostname of the proxy server + /// @param port The port for the proxy server + /// @param type The type of proxy - e.g. "http", "ftp", "SOCKS" + /// @param realm A string indicating a protocol-specific subdivision + /// of a single host. For http and https, this maps to the realm + /// string in http authentication challenges. For many other protocols + /// it is unused. + /// @param authenticationMethod The authentication method to use to access this protection space - + /// valid values include nil (default method) and @"digest" + /// @result The initialized object. + NSURLProtectionSpace initWithProxyHost_port_type_realm_authenticationMethod_( + NSString? host, + int port, + NSString? type, + NSString? realm, + NSString? authenticationMethod) { + final _ret = _lib._objc_msgSend_803( + _id, + _lib._sel_initWithProxyHost_port_type_realm_authenticationMethod_1, + host?._id ?? ffi.nullptr, + port, + type?._id ?? ffi.nullptr, + realm?._id ?? ffi.nullptr, + authenticationMethod?._id ?? ffi.nullptr); + return NSURLProtectionSpace._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get the authentication realm for which the protection space that + /// needs authentication + /// @discussion This is generally only available for http + /// authentication, and may be nil otherwise. + /// @result The realm string + NSString? get realm { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_realm1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Determine if the password for this protection space can be sent securely + /// @result YES if a secure authentication method or protocol will be used, NO otherwise + bool get receivesCredentialSecurely { + return _lib._objc_msgSend_12(_id, _lib._sel_receivesCredentialSecurely1); + } + + /// ! + /// @abstract Determine if this authenticating protection space is a proxy server + /// @result YES if a proxy, NO otherwise + bool get isProxy { + return _lib._objc_msgSend_12(_id, _lib._sel_isProxy1); + } + + /// ! + /// @abstract Get the proxy host if this is a proxy authentication, or the host from the URL. + /// @result The host for this protection space. + NSString? get host { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_host1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get the proxy port if this is a proxy authentication, or the port from the URL. + /// @result The port for this protection space, or 0 if not set. + int get port { + return _lib._objc_msgSend_70(_id, _lib._sel_port1); + } + + /// ! + /// @abstract Get the type of this protection space, if a proxy + /// @result The type string, or nil if not a proxy. + NSString? get proxyType { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_proxyType1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get the protocol of this protection space, if not a proxy + /// @result The type string, or nil if a proxy. + NSString? get protocol { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_protocol1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get the authentication method to be used for this protection space + /// @result The authentication method + NSString? get authenticationMethod { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_authenticationMethod1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns an array of acceptable certificate issuing authorities for client certification authentication. Issuers are identified by their distinguished name and returned as a DER encoded data. + /// @result An array of NSData objects. (Nil if the authenticationMethod is not NSURLAuthenticationMethodClientCertificate) + NSArray? get distinguishedNames { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_distinguishedNames1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns a SecTrustRef which represents the state of the servers SSL transaction state + /// @result A SecTrustRef from Security.framework. (Nil if the authenticationMethod is not NSURLAuthenticationMethodServerTrust) + ffi.Pointer<__SecTrust> get serverTrust { + return _lib._objc_msgSend_804(_id, _lib._sel_serverTrust1); + } + + static NSURLProtectionSpace new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLProtectionSpace1, _lib._sel_new1); + return NSURLProtectionSpace._(_ret, _lib, retain: false, release: true); + } + + static NSURLProtectionSpace alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLProtectionSpace1, _lib._sel_alloc1); + return NSURLProtectionSpace._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLProtectionSpace1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLProtectionSpace1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLProtectionSpace1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLProtectionSpace1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLProtectionSpace1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLProtectionSpace1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLProtectionSpace1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLProtectionSpace1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLProtectionSpace1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @class NSURLCredentialStorage +/// @discussion NSURLCredentialStorage implements a singleton object (shared instance) which manages the shared credentials cache. Note: Whereas in Mac OS X any application can access any credential with a persistence of NSURLCredentialPersistencePermanent provided the user gives permission, in iPhone OS an application can access only its own credentials. +class NSURLCredentialStorage extends NSObject { + NSURLCredentialStorage._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLCredentialStorage] that points to the same underlying object as [other]. + static NSURLCredentialStorage castFrom(T other) { + return NSURLCredentialStorage._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLCredentialStorage] that wraps the given raw object pointer. + static NSURLCredentialStorage castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLCredentialStorage._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLCredentialStorage]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLCredentialStorage1); + } + + /// ! + /// @property sharedCredentialStorage + /// @abstract Get the shared singleton authentication storage + /// @result the shared authentication storage + static NSURLCredentialStorage? getSharedCredentialStorage( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_805(_lib._class_NSURLCredentialStorage1, + _lib._sel_sharedCredentialStorage1); + return _ret.address == 0 + ? null + : NSURLCredentialStorage._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method credentialsForProtectionSpace: + /// @abstract Get a dictionary mapping usernames to credentials for the specified protection space. + /// @param space An NSURLProtectionSpace indicating the protection space for which to get credentials + /// @result A dictionary where the keys are usernames and the values are the corresponding NSURLCredentials. + NSDictionary credentialsForProtectionSpace_(NSURLProtectionSpace? space) { + final _ret = _lib._objc_msgSend_806(_id, + _lib._sel_credentialsForProtectionSpace_1, space?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Get a dictionary mapping NSURLProtectionSpaces to dictionaries which map usernames to NSURLCredentials + /// @result an NSDictionary where the keys are NSURLProtectionSpaces + /// and the values are dictionaries, in which the keys are usernames + /// and the values are NSURLCredentials + NSDictionary? get allCredentials { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_allCredentials1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method setCredential:forProtectionSpace: + /// @abstract Add a new credential to the set for the specified protection space or replace an existing one. + /// @param credential The credential to set. + /// @param space The protection space for which to add it. + /// @discussion Multiple credentials may be set for a given protection space, but each must have + /// a distinct user. If a credential with the same user is already set for the protection space, + /// the new one will replace it. + void setCredential_forProtectionSpace_( + NSURLCredential? credential, NSURLProtectionSpace? space) { + return _lib._objc_msgSend_807( + _id, + _lib._sel_setCredential_forProtectionSpace_1, + credential?._id ?? ffi.nullptr, + space?._id ?? ffi.nullptr); + } + + /// ! + /// @method removeCredential:forProtectionSpace: + /// @abstract Remove the credential from the set for the specified protection space. + /// @param credential The credential to remove. + /// @param space The protection space for which a credential should be removed + /// @discussion The credential is removed from both persistent and temporary storage. A credential that + /// has a persistence policy of NSURLCredentialPersistenceSynchronizable will fail. + /// See removeCredential:forProtectionSpace:options. + void removeCredential_forProtectionSpace_( + NSURLCredential? credential, NSURLProtectionSpace? space) { + return _lib._objc_msgSend_807( + _id, + _lib._sel_removeCredential_forProtectionSpace_1, + credential?._id ?? ffi.nullptr, + space?._id ?? ffi.nullptr); + } + + /// ! + /// @method removeCredential:forProtectionSpace:options + /// @abstract Remove the credential from the set for the specified protection space based on options. + /// @param credential The credential to remove. + /// @param space The protection space for which a credential should be removed + /// @param options A dictionary containing options to consider when removing the credential. This should + /// be used when trying to delete a credential that has the NSURLCredentialPersistenceSynchronizable policy. + /// Please note that when NSURLCredential objects that have a NSURLCredentialPersistenceSynchronizable policy + /// are removed, the credential will be removed on all devices that contain this credential. + /// @discussion The credential is removed from both persistent and temporary storage. + void removeCredential_forProtectionSpace_options_(NSURLCredential? credential, + NSURLProtectionSpace? space, NSDictionary? options) { + return _lib._objc_msgSend_808( + _id, + _lib._sel_removeCredential_forProtectionSpace_options_1, + credential?._id ?? ffi.nullptr, + space?._id ?? ffi.nullptr, + options?._id ?? ffi.nullptr); + } + + /// ! + /// @method defaultCredentialForProtectionSpace: + /// @abstract Get the default credential for the specified protection space. + /// @param space The protection space for which to get the default credential. + NSURLCredential defaultCredentialForProtectionSpace_( + NSURLProtectionSpace? space) { + final _ret = _lib._objc_msgSend_809( + _id, + _lib._sel_defaultCredentialForProtectionSpace_1, + space?._id ?? ffi.nullptr); + return NSURLCredential._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method setDefaultCredential:forProtectionSpace: + /// @abstract Set the default credential for the specified protection space. + /// @param credential The credential to set as default. + /// @param space The protection space for which the credential should be set as default. + /// @discussion If the credential is not yet in the set for the protection space, it will be added to it. + void setDefaultCredential_forProtectionSpace_( + NSURLCredential? credential, NSURLProtectionSpace? space) { + return _lib._objc_msgSend_807( + _id, + _lib._sel_setDefaultCredential_forProtectionSpace_1, + credential?._id ?? ffi.nullptr, + space?._id ?? ffi.nullptr); + } + + void getCredentialsForProtectionSpace_task_completionHandler_( + NSURLProtectionSpace? protectionSpace, + NSURLSessionTask? task, + ObjCBlock41 completionHandler) { + return _lib._objc_msgSend_810( + _id, + _lib._sel_getCredentialsForProtectionSpace_task_completionHandler_1, + protectionSpace?._id ?? ffi.nullptr, + task?._id ?? ffi.nullptr, + completionHandler._id); + } + + void setCredential_forProtectionSpace_task_(NSURLCredential? credential, + NSURLProtectionSpace? protectionSpace, NSURLSessionTask? task) { + return _lib._objc_msgSend_811( + _id, + _lib._sel_setCredential_forProtectionSpace_task_1, + credential?._id ?? ffi.nullptr, + protectionSpace?._id ?? ffi.nullptr, + task?._id ?? ffi.nullptr); + } + + void removeCredential_forProtectionSpace_options_task_( + NSURLCredential? credential, + NSURLProtectionSpace? protectionSpace, + NSDictionary? options, + NSURLSessionTask? task) { + return _lib._objc_msgSend_812( + _id, + _lib._sel_removeCredential_forProtectionSpace_options_task_1, + credential?._id ?? ffi.nullptr, + protectionSpace?._id ?? ffi.nullptr, + options?._id ?? ffi.nullptr, + task?._id ?? ffi.nullptr); + } + + void getDefaultCredentialForProtectionSpace_task_completionHandler_( + NSURLProtectionSpace? space, + NSURLSessionTask? task, + ObjCBlock42 completionHandler) { + return _lib._objc_msgSend_813( + _id, + _lib._sel_getDefaultCredentialForProtectionSpace_task_completionHandler_1, + space?._id ?? ffi.nullptr, + task?._id ?? ffi.nullptr, + completionHandler._id); + } + + void setDefaultCredential_forProtectionSpace_task_( + NSURLCredential? credential, + NSURLProtectionSpace? protectionSpace, + NSURLSessionTask? task) { + return _lib._objc_msgSend_811( + _id, + _lib._sel_setDefaultCredential_forProtectionSpace_task_1, + credential?._id ?? ffi.nullptr, + protectionSpace?._id ?? ffi.nullptr, + task?._id ?? ffi.nullptr); + } + + static NSURLCredentialStorage new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLCredentialStorage1, _lib._sel_new1); + return NSURLCredentialStorage._(_ret, _lib, retain: false, release: true); + } + + static NSURLCredentialStorage alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLCredentialStorage1, _lib._sel_alloc1); + return NSURLCredentialStorage._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLCredentialStorage1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLCredentialStorage1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLCredentialStorage1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLCredentialStorage1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLCredentialStorage1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLCredentialStorage1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLCredentialStorage1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLCredentialStorage1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLCredentialStorage1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock41_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock41_closureRegistry = {}; +int _ObjCBlock41_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock41_registerClosure(Function fn) { + final id = ++_ObjCBlock41_closureRegistryIndex; + _ObjCBlock41_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock41_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock41_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock41 extends _ObjCBlockBase { + ObjCBlock41._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock41.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock41_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock41.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock41_closureTrampoline) + .cast(), + _ObjCBlock41_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock42_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock42_closureRegistry = {}; +int _ObjCBlock42_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock42_registerClosure(Function fn) { + final id = ++_ObjCBlock42_closureRegistryIndex; + _ObjCBlock42_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock42_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock42_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock42 extends _ObjCBlockBase { + ObjCBlock42._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock42.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock42_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock42.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock42_closureTrampoline) + .cast(), + _ObjCBlock42_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +/// ! +/// @class NSURLProtocol +/// +/// @abstract NSURLProtocol is an abstract class which provides the +/// basic structure for performing protocol-specific loading of URL +/// data. Concrete subclasses handle the specifics associated with one +/// or more protocols or URL schemes. +class NSURLProtocol extends NSObject { + NSURLProtocol._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLProtocol] that points to the same underlying object as [other]. + static NSURLProtocol castFrom(T other) { + return NSURLProtocol._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSURLProtocol] that wraps the given raw object pointer. + static NSURLProtocol castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLProtocol._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLProtocol]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSURLProtocol1); + } + + /// ! + /// @method initWithRequest:cachedResponse:client: + /// @abstract Initializes an NSURLProtocol given request, + /// cached response, and client. + /// @param request The request to load. + /// @param cachedResponse A response that has been retrieved from the + /// cache for the given request. The protocol implementation should + /// apply protocol-specific validity checks if such tests are + /// necessary. + /// @param client The NSURLProtocolClient object that serves as the + /// interface the protocol implementation can use to report results back + /// to the URL loading system. + NSURLProtocol initWithRequest_cachedResponse_client_(NSURLRequest? request, + NSCachedURLResponse? cachedResponse, NSObject? client) { + final _ret = _lib._objc_msgSend_814( + _id, + _lib._sel_initWithRequest_cachedResponse_client_1, + request?._id ?? ffi.nullptr, + cachedResponse?._id ?? ffi.nullptr, + client?._id ?? ffi.nullptr); + return NSURLProtocol._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the NSURLProtocolClient of the receiver. + /// @result The NSURLProtocolClient of the receiver. + NSObject? get client { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_client1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the NSURLRequest of the receiver. + /// @result The NSURLRequest of the receiver. + NSURLRequest? get request { + final _ret = _lib._objc_msgSend_692(_id, _lib._sel_request1); + return _ret.address == 0 + ? null + : NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Returns the NSCachedURLResponse of the receiver. + /// @result The NSCachedURLResponse of the receiver. + NSCachedURLResponse? get cachedResponse { + final _ret = _lib._objc_msgSend_815(_id, _lib._sel_cachedResponse1); + return _ret.address == 0 + ? null + : NSCachedURLResponse._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method canInitWithRequest: + /// @abstract This method determines whether this protocol can handle + /// the given request. + /// @discussion A concrete subclass should inspect the given request and + /// determine whether or not the implementation can perform a load with + /// that request. This is an abstract method. Subclasses must provide an + /// implementation. + /// @param request A request to inspect. + /// @result YES if the protocol can handle the given request, NO if not. + static bool canInitWithRequest_( + PedometerBindings _lib, NSURLRequest? request) { + return _lib._objc_msgSend_792(_lib._class_NSURLProtocol1, + _lib._sel_canInitWithRequest_1, request?._id ?? ffi.nullptr); + } + + /// ! + /// @method canonicalRequestForRequest: + /// @abstract This method returns a canonical version of the given + /// request. + /// @discussion It is up to each concrete protocol implementation to + /// define what "canonical" means. However, a protocol should + /// guarantee that the same input request always yields the same + /// canonical form. Special consideration should be given when + /// implementing this method since the canonical form of a request is + /// used to look up objects in the URL cache, a process which performs + /// equality checks between NSURLRequest objects. + ///

+ /// This is an abstract method; subclasses must provide an + /// implementation. + /// @param request A request to make canonical. + /// @result The canonical form of the given request. + static NSURLRequest canonicalRequestForRequest_( + PedometerBindings _lib, NSURLRequest? request) { + final _ret = _lib._objc_msgSend_816(_lib._class_NSURLProtocol1, + _lib._sel_canonicalRequestForRequest_1, request?._id ?? ffi.nullptr); + return NSURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method requestIsCacheEquivalent:toRequest: + /// @abstract Compares two requests for equivalence with regard to caching. + /// @discussion Requests are considered equivalent for cache purposes + /// if and only if they would be handled by the same protocol AND that + /// protocol declares them equivalent after performing + /// implementation-specific checks. + /// @result YES if the two requests are cache-equivalent, NO otherwise. + static bool requestIsCacheEquivalent_toRequest_( + PedometerBindings _lib, NSURLRequest? a, NSURLRequest? b) { + return _lib._objc_msgSend_817( + _lib._class_NSURLProtocol1, + _lib._sel_requestIsCacheEquivalent_toRequest_1, + a?._id ?? ffi.nullptr, + b?._id ?? ffi.nullptr); + } + + /// ! + /// @method startLoading + /// @abstract Starts protocol-specific loading of a request. + /// @discussion When this method is called, the protocol implementation + /// should start loading a request. + void startLoading() { + return _lib._objc_msgSend_1(_id, _lib._sel_startLoading1); + } + + /// ! + /// @method stopLoading + /// @abstract Stops protocol-specific loading of a request. + /// @discussion When this method is called, the protocol implementation + /// should end the work of loading a request. This could be in response + /// to a cancel operation, so protocol implementations must be able to + /// handle this call while a load is in progress. + void stopLoading() { + return _lib._objc_msgSend_1(_id, _lib._sel_stopLoading1); + } + + /// ! + /// @method propertyForKey:inRequest: + /// @abstract Returns the property in the given request previously + /// stored with the given key. + /// @discussion The purpose of this method is to provide an interface + /// for protocol implementors to access protocol-specific information + /// associated with NSURLRequest objects. + /// @param key The string to use for the property lookup. + /// @param request The request to use for the property lookup. + /// @result The property stored with the given key, or nil if no property + /// had previously been stored with the given key in the given request. + static NSObject propertyForKey_inRequest_( + PedometerBindings _lib, NSString? key, NSURLRequest? request) { + final _ret = _lib._objc_msgSend_818( + _lib._class_NSURLProtocol1, + _lib._sel_propertyForKey_inRequest_1, + key?._id ?? ffi.nullptr, + request?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @method setProperty:forKey:inRequest: + /// @abstract Stores the given property in the given request using the + /// given key. + /// @discussion The purpose of this method is to provide an interface + /// for protocol implementors to customize protocol-specific + /// information associated with NSMutableURLRequest objects. + /// @param value The property to store. + /// @param key The string to use for the property storage. + /// @param request The request in which to store the property. + static void setProperty_forKey_inRequest_(PedometerBindings _lib, + NSObject value, NSString? key, NSMutableURLRequest? request) { + return _lib._objc_msgSend_824( + _lib._class_NSURLProtocol1, + _lib._sel_setProperty_forKey_inRequest_1, + value._id, + key?._id ?? ffi.nullptr, + request?._id ?? ffi.nullptr); + } + + /// ! + /// @method removePropertyForKey:inRequest: + /// @abstract Remove any property stored under the given key + /// @discussion Like setProperty:forKey:inRequest: above, the purpose of this + /// method is to give protocol implementors the ability to store + /// protocol-specific information in an NSURLRequest + /// @param key The key whose value should be removed + /// @param request The request to be modified + static void removePropertyForKey_inRequest_( + PedometerBindings _lib, NSString? key, NSMutableURLRequest? request) { + return _lib._objc_msgSend_825( + _lib._class_NSURLProtocol1, + _lib._sel_removePropertyForKey_inRequest_1, + key?._id ?? ffi.nullptr, + request?._id ?? ffi.nullptr); + } + + /// ! + /// @method registerClass: + /// @abstract This method registers a protocol class, making it visible + /// to several other NSURLProtocol class methods. + /// @discussion When the URL loading system begins to load a request, + /// each protocol class that has been registered is consulted in turn to + /// see if it can be initialized with a given request. The first + /// protocol handler class to provide a YES answer to + /// +canInitWithRequest: "wins" and that protocol + /// implementation is used to perform the URL load. There is no + /// guarantee that all registered protocol classes will be consulted. + /// Hence, it should be noted that registering a class places it first + /// on the list of classes that will be consulted in calls to + /// +canInitWithRequest:, moving it in front of all classes + /// that had been registered previously. + ///

A similar design governs the process to create the canonical form + /// of a request with the +canonicalRequestForRequest: class + /// method. + /// @param protocolClass the class to register. + /// @result YES if the protocol was registered successfully, NO if not. + /// The only way that failure can occur is if the given class is not a + /// subclass of NSURLProtocol. + static bool registerClass_(PedometerBindings _lib, NSObject protocolClass) { + return _lib._objc_msgSend_0(_lib._class_NSURLProtocol1, + _lib._sel_registerClass_1, protocolClass._id); + } + + /// ! + /// @method unregisterClass: + /// @abstract This method unregisters a protocol. + /// @discussion After unregistration, a protocol class is no longer + /// consulted in calls to NSURLProtocol class methods. + /// @param protocolClass The class to unregister. + static void unregisterClass_(PedometerBindings _lib, NSObject protocolClass) { + return _lib._objc_msgSend_15(_lib._class_NSURLProtocol1, + _lib._sel_unregisterClass_1, protocolClass._id); + } + + static bool canInitWithTask_(PedometerBindings _lib, NSURLSessionTask? task) { + return _lib._objc_msgSend_826(_lib._class_NSURLProtocol1, + _lib._sel_canInitWithTask_1, task?._id ?? ffi.nullptr); + } + + NSURLProtocol initWithTask_cachedResponse_client_(NSURLSessionTask? task, + NSCachedURLResponse? cachedResponse, NSObject? client) { + final _ret = _lib._objc_msgSend_827( + _id, + _lib._sel_initWithTask_cachedResponse_client_1, + task?._id ?? ffi.nullptr, + cachedResponse?._id ?? ffi.nullptr, + client?._id ?? ffi.nullptr); + return NSURLProtocol._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionTask? get task { + final _ret = _lib._objc_msgSend_828(_id, _lib._sel_task1); + return _ret.address == 0 + ? null + : NSURLSessionTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLProtocol new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLProtocol1, _lib._sel_new1); + return NSURLProtocol._(_ret, _lib, retain: false, release: true); + } + + static NSURLProtocol alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLProtocol1, _lib._sel_alloc1); + return NSURLProtocol._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLProtocol1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLProtocol1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLProtocol1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLProtocol1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLProtocol1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLProtocol1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLProtocol1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURLProtocol1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLProtocol1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @class NSMutableURLRequest +/// +/// @abstract An NSMutableURLRequest object represents a mutable URL load +/// request in a manner independent of protocol and URL scheme. +/// +/// @discussion This specialization of NSURLRequest is provided to aid +/// developers who may find it more convenient to mutate a single request +/// object for a series of URL loads instead of creating an immutable +/// NSURLRequest for each load. This programming model is supported by +/// the following contract stipulation between NSMutableURLRequest and +/// NSURLConnection: NSURLConnection makes a deep copy of each +/// NSMutableURLRequest object passed to one of its initializers. +///

NSMutableURLRequest is designed to be extended to support +/// protocol-specific data by adding categories to access a property +/// object provided in an interface targeted at protocol implementors. +///

    +///
  • Protocol implementors should direct their attention to the +/// NSMutableURLRequestExtensibility category on +/// NSMutableURLRequest for more information on how to provide +/// extensions on NSMutableURLRequest to support protocol-specific +/// request information. +///
  • Clients of this API who wish to create NSMutableURLRequest +/// objects to load URL content should consult the protocol-specific +/// NSMutableURLRequest categories that are available. The +/// NSMutableHTTPURLRequest category on NSMutableURLRequest is an +/// example. +///
+class NSMutableURLRequest extends NSURLRequest { + NSMutableURLRequest._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSMutableURLRequest] that points to the same underlying object as [other]. + static NSMutableURLRequest castFrom(T other) { + return NSMutableURLRequest._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSMutableURLRequest] that wraps the given raw object pointer. + static NSMutableURLRequest castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSMutableURLRequest._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSMutableURLRequest]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSMutableURLRequest1); + } + + /// ! + /// @abstract The URL of the receiver. + @override + NSURL? get URL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_URL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract The URL of the receiver. + set URL(NSURL? value) { + _lib._objc_msgSend_487(_id, _lib._sel_setURL_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract The cache policy of the receiver. + @override + int get cachePolicy { + return _lib._objc_msgSend_680(_id, _lib._sel_cachePolicy1); + } + + /// ! + /// @abstract The cache policy of the receiver. + set cachePolicy(int value) { + _lib._objc_msgSend_819(_id, _lib._sel_setCachePolicy_1, value); + } + + /// ! + /// @abstract Sets the timeout interval of the receiver. + /// @discussion The timeout interval specifies the limit on the idle + /// interval allotted to a request in the process of loading. The "idle + /// interval" is defined as the period of time that has passed since the + /// last instance of load activity occurred for a request that is in the + /// process of loading. Hence, when an instance of load activity occurs + /// (e.g. bytes are received from the network for a request), the idle + /// interval for a request is reset to 0. If the idle interval ever + /// becomes greater than or equal to the timeout interval, the request + /// is considered to have timed out. This timeout interval is measured + /// in seconds. + @override + double get timeoutInterval { + return _lib._objc_msgSend_147(_id, _lib._sel_timeoutInterval1); + } + + /// ! + /// @abstract Sets the timeout interval of the receiver. + /// @discussion The timeout interval specifies the limit on the idle + /// interval allotted to a request in the process of loading. The "idle + /// interval" is defined as the period of time that has passed since the + /// last instance of load activity occurred for a request that is in the + /// process of loading. Hence, when an instance of load activity occurs + /// (e.g. bytes are received from the network for a request), the idle + /// interval for a request is reset to 0. If the idle interval ever + /// becomes greater than or equal to the timeout interval, the request + /// is considered to have timed out. This timeout interval is measured + /// in seconds. + set timeoutInterval(double value) { + _lib._objc_msgSend_467(_id, _lib._sel_setTimeoutInterval_1, value); + } + + /// ! + /// @abstract Sets the main document URL + /// @discussion The caller should pass the URL for an appropriate main + /// document, if known. For example, when loading a web page, the URL + /// of the main html document for the top-level frame should be + /// passed. This main document is used to implement the cookie "only + /// from same domain as main document" policy, attributing this request + /// as a sub-resource of a user-specified URL, and possibly other things + /// in the future. + @override + NSURL? get mainDocumentURL { + final _ret = _lib._objc_msgSend_40(_id, _lib._sel_mainDocumentURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Sets the main document URL + /// @discussion The caller should pass the URL for an appropriate main + /// document, if known. For example, when loading a web page, the URL + /// of the main html document for the top-level frame should be + /// passed. This main document is used to implement the cookie "only + /// from same domain as main document" policy, attributing this request + /// as a sub-resource of a user-specified URL, and possibly other things + /// in the future. + set mainDocumentURL(NSURL? value) { + _lib._objc_msgSend_487( + _id, _lib._sel_setMainDocumentURL_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract Sets the NSURLRequestNetworkServiceType to associate with this request + /// @discussion This method is used to provide the network layers with a hint as to the purpose + /// of the request. Most clients should not need to use this method. + @override + int get networkServiceType { + return _lib._objc_msgSend_681(_id, _lib._sel_networkServiceType1); + } + + /// ! + /// @abstract Sets the NSURLRequestNetworkServiceType to associate with this request + /// @discussion This method is used to provide the network layers with a hint as to the purpose + /// of the request. Most clients should not need to use this method. + set networkServiceType(int value) { + _lib._objc_msgSend_820(_id, _lib._sel_setNetworkServiceType_1, value); + } + + /// ! + /// @abstract sets whether a connection created with this request is allowed to use + /// the built in cellular radios (if present). + /// @discussion NO if the receiver should not be allowed to use the built in + /// cellular radios to satisfy the request, YES otherwise. The default is YES. + @override + bool get allowsCellularAccess { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsCellularAccess1); + } + + /// ! + /// @abstract sets whether a connection created with this request is allowed to use + /// the built in cellular radios (if present). + /// @discussion NO if the receiver should not be allowed to use the built in + /// cellular radios to satisfy the request, YES otherwise. The default is YES. + set allowsCellularAccess(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setAllowsCellularAccess_1, value); + } + + /// ! + /// @abstract sets whether a connection created with this request is allowed to use + /// network interfaces which have been marked as expensive. + /// @discussion NO if the receiver should not be allowed to use an interface marked as expensive to + /// satisfy the request, YES otherwise. + @override + bool get allowsExpensiveNetworkAccess { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsExpensiveNetworkAccess1); + } + + /// ! + /// @abstract sets whether a connection created with this request is allowed to use + /// network interfaces which have been marked as expensive. + /// @discussion NO if the receiver should not be allowed to use an interface marked as expensive to + /// satisfy the request, YES otherwise. + set allowsExpensiveNetworkAccess(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAllowsExpensiveNetworkAccess_1, value); + } + + /// ! + /// @abstract sets whether a connection created with this request is allowed to use + /// network interfaces which have been marked as constrained. + /// @discussion NO if the receiver should not be allowed to use an interface marked as constrained to + /// satisfy the request, YES otherwise. + @override + bool get allowsConstrainedNetworkAccess { + return _lib._objc_msgSend_12( + _id, _lib._sel_allowsConstrainedNetworkAccess1); + } + + /// ! + /// @abstract sets whether a connection created with this request is allowed to use + /// network interfaces which have been marked as constrained. + /// @discussion NO if the receiver should not be allowed to use an interface marked as constrained to + /// satisfy the request, YES otherwise. + set allowsConstrainedNetworkAccess(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAllowsConstrainedNetworkAccess_1, value); + } + + /// ! + /// @abstract returns whether we assume that server supports HTTP/3. Enables QUIC + /// racing without HTTP/3 service discovery. + /// @result YES if server endpoint is known to support HTTP/3. Defaults to NO. + /// The default may be YES in a future OS update. + @override + bool get assumesHTTP3Capable { + return _lib._objc_msgSend_12(_id, _lib._sel_assumesHTTP3Capable1); + } + + /// ! + /// @abstract returns whether we assume that server supports HTTP/3. Enables QUIC + /// racing without HTTP/3 service discovery. + /// @result YES if server endpoint is known to support HTTP/3. Defaults to NO. + /// The default may be YES in a future OS update. + set assumesHTTP3Capable(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setAssumesHTTP3Capable_1, value); + } + + /// ! + /// @abstract Sets the NSURLRequestAttribution to associate with this request. + /// @discussion Set to NSURLRequestAttributionUser if the URL was specified by the + /// user. Defaults to NSURLRequestAttributionDeveloper. + @override + int get attribution { + return _lib._objc_msgSend_682(_id, _lib._sel_attribution1); + } + + /// ! + /// @abstract Sets the NSURLRequestAttribution to associate with this request. + /// @discussion Set to NSURLRequestAttributionUser if the URL was specified by the + /// user. Defaults to NSURLRequestAttributionDeveloper. + set attribution(int value) { + _lib._objc_msgSend_821(_id, _lib._sel_setAttribution_1, value); + } + + /// ! + /// @abstract sets whether a request is required to do DNSSEC validation during DNS lookup. + /// @discussion YES, if the DNS lookup for this request should require DNSSEC validation, + /// No otherwise. Defaults to NO. + @override + bool get requiresDNSSECValidation { + return _lib._objc_msgSend_12(_id, _lib._sel_requiresDNSSECValidation1); + } + + /// ! + /// @abstract sets whether a request is required to do DNSSEC validation during DNS lookup. + /// @discussion YES, if the DNS lookup for this request should require DNSSEC validation, + /// No otherwise. Defaults to NO. + set requiresDNSSECValidation(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setRequiresDNSSECValidation_1, value); + } + + /// ! + /// @abstract Sets the HTTP request method of the receiver. + @override + NSString? get HTTPMethod { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_HTTPMethod1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Sets the HTTP request method of the receiver. + set HTTPMethod(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setHTTPMethod_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract Sets the HTTP header fields of the receiver to the given + /// dictionary. + /// @discussion This method replaces all header fields that may have + /// existed before this method call. + ///

Since HTTP header fields must be string values, each object and + /// key in the dictionary passed to this method must answer YES when + /// sent an -isKindOfClass:[NSString class] message. If either + /// the key or value for a key-value pair answers NO when sent this + /// message, the key-value pair is skipped. + @override + NSDictionary? get allHTTPHeaderFields { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_allHTTPHeaderFields1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Sets the HTTP header fields of the receiver to the given + /// dictionary. + /// @discussion This method replaces all header fields that may have + /// existed before this method call. + ///

Since HTTP header fields must be string values, each object and + /// key in the dictionary passed to this method must answer YES when + /// sent an -isKindOfClass:[NSString class] message. If either + /// the key or value for a key-value pair answers NO when sent this + /// message, the key-value pair is skipped. + set allHTTPHeaderFields(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, _lib._sel_setAllHTTPHeaderFields_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @method setValue:forHTTPHeaderField: + /// @abstract Sets the value of the given HTTP header field. + /// @discussion If a value was previously set for the given header + /// field, that value is replaced with the given value. Note that, in + /// keeping with the HTTP RFC, HTTP header field names are + /// case-insensitive. + /// @param value the header field value. + /// @param field the header field name (case-insensitive). + void setValue_forHTTPHeaderField_(NSString? value, NSString? field) { + return _lib._objc_msgSend_639(_id, _lib._sel_setValue_forHTTPHeaderField_1, + value?._id ?? ffi.nullptr, field?._id ?? ffi.nullptr); + } + + /// ! + /// @method addValue:forHTTPHeaderField: + /// @abstract Adds an HTTP header field in the current header + /// dictionary. + /// @discussion This method provides a way to add values to header + /// fields incrementally. If a value was previously set for the given + /// header field, the given value is appended to the previously-existing + /// value. The appropriate field delimiter, a comma in the case of HTTP, + /// is added by the implementation, and should not be added to the given + /// value by the caller. Note that, in keeping with the HTTP RFC, HTTP + /// header field names are case-insensitive. + /// @param value the header field value. + /// @param field the header field name (case-insensitive). + void addValue_forHTTPHeaderField_(NSString? value, NSString? field) { + return _lib._objc_msgSend_639(_id, _lib._sel_addValue_forHTTPHeaderField_1, + value?._id ?? ffi.nullptr, field?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract Sets the request body data of the receiver. + /// @discussion This data is sent as the message body of the request, as + /// in done in an HTTP POST request. + @override + NSData? get HTTPBody { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_HTTPBody1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Sets the request body data of the receiver. + /// @discussion This data is sent as the message body of the request, as + /// in done in an HTTP POST request. + set HTTPBody(NSData? value) { + _lib._objc_msgSend_822( + _id, _lib._sel_setHTTPBody_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract Sets the request body to be the contents of the given stream. + /// @discussion The provided stream should be unopened; the request will take + /// over the stream's delegate. The entire stream's contents will be + /// transmitted as the HTTP body of the request. Note that the body stream + /// and the body data (set by setHTTPBody:, above) are mutually exclusive + /// - setting one will clear the other. + @override + NSInputStream? get HTTPBodyStream { + final _ret = _lib._objc_msgSend_691(_id, _lib._sel_HTTPBodyStream1); + return _ret.address == 0 + ? null + : NSInputStream._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @abstract Sets the request body to be the contents of the given stream. + /// @discussion The provided stream should be unopened; the request will take + /// over the stream's delegate. The entire stream's contents will be + /// transmitted as the HTTP body of the request. Note that the body stream + /// and the body data (set by setHTTPBody:, above) are mutually exclusive + /// - setting one will clear the other. + set HTTPBodyStream(NSInputStream? value) { + _lib._objc_msgSend_823( + _id, _lib._sel_setHTTPBodyStream_1, value?._id ?? ffi.nullptr); + } + + /// ! + /// @abstract Decide whether default cookie handling will happen for + /// this request (YES if cookies should be sent with and set for this request; + /// otherwise NO). + /// @discussion The default is YES - in other words, cookies are sent from and + /// stored to the cookie manager by default. + /// NOTE: In releases prior to 10.3, this value is ignored + @override + bool get HTTPShouldHandleCookies { + return _lib._objc_msgSend_12(_id, _lib._sel_HTTPShouldHandleCookies1); + } + + /// ! + /// @abstract Decide whether default cookie handling will happen for + /// this request (YES if cookies should be sent with and set for this request; + /// otherwise NO). + /// @discussion The default is YES - in other words, cookies are sent from and + /// stored to the cookie manager by default. + /// NOTE: In releases prior to 10.3, this value is ignored + set HTTPShouldHandleCookies(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setHTTPShouldHandleCookies_1, value); + } + + /// ! + /// @abstract Sets whether the request should not wait for the previous response + /// before transmitting (YES if the receiver should transmit before the previous response is + /// received. NO to wait for the previous response before transmitting) + /// @discussion Calling this method with a YES value does not guarantee HTTP + /// pipelining behavior. This method may have no effect if an HTTP proxy is + /// configured, or if the HTTP request uses an unsafe request method (e.g., POST + /// requests will not pipeline). Pipelining behavior also may not begin until + /// the second request on a given TCP connection. There may be other situations + /// where pipelining does not occur even though YES was set. + /// HTTP 1.1 allows the client to send multiple requests to the server without + /// waiting for a response. Though HTTP 1.1 requires support for pipelining, + /// some servers report themselves as being HTTP 1.1 but do not support + /// pipelining (disconnecting, sending resources misordered, omitting part of + /// a resource, etc.). + @override + bool get HTTPShouldUsePipelining { + return _lib._objc_msgSend_12(_id, _lib._sel_HTTPShouldUsePipelining1); + } + + /// ! + /// @abstract Sets whether the request should not wait for the previous response + /// before transmitting (YES if the receiver should transmit before the previous response is + /// received. NO to wait for the previous response before transmitting) + /// @discussion Calling this method with a YES value does not guarantee HTTP + /// pipelining behavior. This method may have no effect if an HTTP proxy is + /// configured, or if the HTTP request uses an unsafe request method (e.g., POST + /// requests will not pipeline). Pipelining behavior also may not begin until + /// the second request on a given TCP connection. There may be other situations + /// where pipelining does not occur even though YES was set. + /// HTTP 1.1 allows the client to send multiple requests to the server without + /// waiting for a response. Though HTTP 1.1 requires support for pipelining, + /// some servers report themselves as being HTTP 1.1 but do not support + /// pipelining (disconnecting, sending resources misordered, omitting part of + /// a resource, etc.). + set HTTPShouldUsePipelining(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setHTTPShouldUsePipelining_1, value); + } + + /// ! + /// @method requestWithURL: + /// @abstract Allocates and initializes an NSURLRequest with the given + /// URL. + /// @discussion Default values are used for cache policy + /// (NSURLRequestUseProtocolCachePolicy) and timeout interval (60 + /// seconds). + /// @param URL The URL for the request. + /// @result A newly-created and autoreleased NSURLRequest instance. + static NSMutableURLRequest requestWithURL_( + PedometerBindings _lib, NSURL? URL) { + final _ret = _lib._objc_msgSend_209(_lib._class_NSMutableURLRequest1, + _lib._sel_requestWithURL_1, URL?._id ?? ffi.nullptr); + return NSMutableURLRequest._(_ret, _lib, retain: true, release: true); + } + + /// ! + /// @property supportsSecureCoding + /// @abstract Indicates that NSURLRequest implements the NSSecureCoding protocol. + /// @result A BOOL value set to YES. + static bool getSupportsSecureCoding(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableURLRequest1, _lib._sel_supportsSecureCoding1); + } + + /// ! + /// @method requestWithURL:cachePolicy:timeoutInterval: + /// @abstract Allocates and initializes a NSURLRequest with the given + /// URL and cache policy. + /// @param URL The URL for the request. + /// @param cachePolicy The cache policy for the request. + /// @param timeoutInterval The timeout interval for the request. See the + /// commentary for the timeoutInterval for more information on + /// timeout intervals. + /// @result A newly-created and autoreleased NSURLRequest instance. + static NSMutableURLRequest requestWithURL_cachePolicy_timeoutInterval_( + PedometerBindings _lib, + NSURL? URL, + int cachePolicy, + double timeoutInterval) { + final _ret = _lib._objc_msgSend_679( + _lib._class_NSMutableURLRequest1, + _lib._sel_requestWithURL_cachePolicy_timeoutInterval_1, + URL?._id ?? ffi.nullptr, + cachePolicy, + timeoutInterval); + return NSMutableURLRequest._(_ret, _lib, retain: true, release: true); + } + + static NSMutableURLRequest new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSMutableURLRequest1, _lib._sel_new1); + return NSMutableURLRequest._(_ret, _lib, retain: false, release: true); + } + + static NSMutableURLRequest alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableURLRequest1, _lib._sel_alloc1); + return NSMutableURLRequest._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSMutableURLRequest1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSMutableURLRequest1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSMutableURLRequest1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSMutableURLRequest1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSMutableURLRequest1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSMutableURLRequest1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSMutableURLRequest1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSMutableURLRequest1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSMutableURLRequest1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSXMLParser extends NSObject { + NSXMLParser._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSXMLParser] that points to the same underlying object as [other]. + static NSXMLParser castFrom(T other) { + return NSXMLParser._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSXMLParser] that wraps the given raw object pointer. + static NSXMLParser castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSXMLParser._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSXMLParser]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSXMLParser1); + } + + NSXMLParser initWithContentsOfURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_209( + _id, _lib._sel_initWithContentsOfURL_1, url?._id ?? ffi.nullptr); + return NSXMLParser._(_ret, _lib, retain: true, release: true); + } + + NSXMLParser initWithData_(NSData? data) { + final _ret = _lib._objc_msgSend_211( + _id, _lib._sel_initWithData_1, data?._id ?? ffi.nullptr); + return NSXMLParser._(_ret, _lib, retain: true, release: true); + } + + NSXMLParser initWithStream_(NSInputStream? stream) { + final _ret = _lib._objc_msgSend_829( + _id, _lib._sel_initWithStream_1, stream?._id ?? ffi.nullptr); + return NSXMLParser._(_ret, _lib, retain: true, release: true); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + set delegate(NSObject? value) { + _lib._objc_msgSend_348( + _id, _lib._sel_setDelegate_1, value?._id ?? ffi.nullptr); + } + + bool get shouldProcessNamespaces { + return _lib._objc_msgSend_12(_id, _lib._sel_shouldProcessNamespaces1); + } + + set shouldProcessNamespaces(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setShouldProcessNamespaces_1, value); + } + + bool get shouldReportNamespacePrefixes { + return _lib._objc_msgSend_12(_id, _lib._sel_shouldReportNamespacePrefixes1); + } + + set shouldReportNamespacePrefixes(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setShouldReportNamespacePrefixes_1, value); + } + + int get externalEntityResolvingPolicy { + return _lib._objc_msgSend_830( + _id, _lib._sel_externalEntityResolvingPolicy1); + } + + set externalEntityResolvingPolicy(int value) { + _lib._objc_msgSend_831( + _id, _lib._sel_setExternalEntityResolvingPolicy_1, value); + } + + NSSet? get allowedExternalEntityURLs { + final _ret = + _lib._objc_msgSend_249(_id, _lib._sel_allowedExternalEntityURLs1); + return _ret.address == 0 + ? null + : NSSet._(_ret, _lib, retain: true, release: true); + } + + set allowedExternalEntityURLs(NSSet? value) { + _lib._objc_msgSend_832(_id, _lib._sel_setAllowedExternalEntityURLs_1, + value?._id ?? ffi.nullptr); + } + + bool parse() { + return _lib._objc_msgSend_12(_id, _lib._sel_parse1); + } + + void abortParsing() { + return _lib._objc_msgSend_1(_id, _lib._sel_abortParsing1); + } + + NSError? get parserError { + final _ret = _lib._objc_msgSend_252(_id, _lib._sel_parserError1); + return _ret.address == 0 + ? null + : NSError._(_ret, _lib, retain: true, release: true); + } + + bool get shouldResolveExternalEntities { + return _lib._objc_msgSend_12(_id, _lib._sel_shouldResolveExternalEntities1); + } + + set shouldResolveExternalEntities(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setShouldResolveExternalEntities_1, value); + } + + NSString? get publicID { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_publicID1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get systemID { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_systemID1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get lineNumber { + return _lib._objc_msgSend_70(_id, _lib._sel_lineNumber1); + } + + int get columnNumber { + return _lib._objc_msgSend_70(_id, _lib._sel_columnNumber1); + } + + static NSXMLParser new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSXMLParser1, _lib._sel_new1); + return NSXMLParser._(_ret, _lib, retain: false, release: true); + } + + static NSXMLParser alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSXMLParser1, _lib._sel_alloc1); + return NSXMLParser._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSXMLParser1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSXMLParser1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSXMLParser1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSXMLParser1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSXMLParser1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSXMLParser1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSXMLParser1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSXMLParser1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSXMLParser1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSXMLParserExternalEntityResolvingPolicy { + static const int NSXMLParserResolveExternalEntitiesNever = 0; + static const int NSXMLParserResolveExternalEntitiesNoNetwork = 1; + static const int NSXMLParserResolveExternalEntitiesSameOriginOnly = 2; + static const int NSXMLParserResolveExternalEntitiesAlways = 3; +} + +class NSFileWrapper extends NSObject { + NSFileWrapper._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSFileWrapper] that points to the same underlying object as [other]. + static NSFileWrapper castFrom(T other) { + return NSFileWrapper._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSFileWrapper] that wraps the given raw object pointer. + static NSFileWrapper castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSFileWrapper._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSFileWrapper]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSFileWrapper1); + } + + NSFileWrapper initWithURL_options_error_( + NSURL? url, int options, ffi.Pointer> outError) { + final _ret = _lib._objc_msgSend_833( + _id, + _lib._sel_initWithURL_options_error_1, + url?._id ?? ffi.nullptr, + options, + outError); + return NSFileWrapper._(_ret, _lib, retain: true, release: true); + } + + NSFileWrapper initDirectoryWithFileWrappers_( + NSDictionary? childrenByPreferredName) { + final _ret = _lib._objc_msgSend_141( + _id, + _lib._sel_initDirectoryWithFileWrappers_1, + childrenByPreferredName?._id ?? ffi.nullptr); + return NSFileWrapper._(_ret, _lib, retain: true, release: true); + } + + NSFileWrapper initRegularFileWithContents_(NSData? contents) { + final _ret = _lib._objc_msgSend_211(_id, + _lib._sel_initRegularFileWithContents_1, contents?._id ?? ffi.nullptr); + return NSFileWrapper._(_ret, _lib, retain: true, release: true); + } + + NSFileWrapper initSymbolicLinkWithDestinationURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_209( + _id, + _lib._sel_initSymbolicLinkWithDestinationURL_1, + url?._id ?? ffi.nullptr); + return NSFileWrapper._(_ret, _lib, retain: true, release: true); + } + + NSFileWrapper initWithSerializedRepresentation_( + NSData? serializeRepresentation) { + final _ret = _lib._objc_msgSend_211( + _id, + _lib._sel_initWithSerializedRepresentation_1, + serializeRepresentation?._id ?? ffi.nullptr); + return NSFileWrapper._(_ret, _lib, retain: true, release: true); + } + + NSFileWrapper initWithCoder_(NSCoder? inCoder) { + final _ret = _lib._objc_msgSend_42( + _id, _lib._sel_initWithCoder_1, inCoder?._id ?? ffi.nullptr); + return NSFileWrapper._(_ret, _lib, retain: true, release: true); + } + + bool get directory { + return _lib._objc_msgSend_12(_id, _lib._sel_isDirectory1); + } + + bool get regularFile { + return _lib._objc_msgSend_12(_id, _lib._sel_isRegularFile1); + } + + bool get symbolicLink { + return _lib._objc_msgSend_12(_id, _lib._sel_isSymbolicLink1); + } + + NSString? get preferredFilename { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_preferredFilename1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set preferredFilename(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setPreferredFilename_1, value?._id ?? ffi.nullptr); + } + + NSString? get filename { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_filename1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set filename(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setFilename_1, value?._id ?? ffi.nullptr); + } + + NSDictionary? get fileAttributes { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_fileAttributes1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set fileAttributes(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, _lib._sel_setFileAttributes_1, value?._id ?? ffi.nullptr); + } + + bool matchesContentsOfURL_(NSURL? url) { + return _lib._objc_msgSend_395( + _id, _lib._sel_matchesContentsOfURL_1, url?._id ?? ffi.nullptr); + } + + bool readFromURL_options_error_( + NSURL? url, int options, ffi.Pointer> outError) { + return _lib._objc_msgSend_834(_id, _lib._sel_readFromURL_options_error_1, + url?._id ?? ffi.nullptr, options, outError); + } + + bool writeToURL_options_originalContentsURL_error_( + NSURL? url, + int options, + NSURL? originalContentsURL, + ffi.Pointer> outError) { + return _lib._objc_msgSend_835( + _id, + _lib._sel_writeToURL_options_originalContentsURL_error_1, + url?._id ?? ffi.nullptr, + options, + originalContentsURL?._id ?? ffi.nullptr, + outError); + } + + NSData? get serializedRepresentation { + final _ret = + _lib._objc_msgSend_39(_id, _lib._sel_serializedRepresentation1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSString addFileWrapper_(NSFileWrapper? child) { + final _ret = _lib._objc_msgSend_836( + _id, _lib._sel_addFileWrapper_1, child?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString addRegularFileWithContents_preferredFilename_( + NSData? data, NSString? fileName) { + final _ret = _lib._objc_msgSend_837( + _id, + _lib._sel_addRegularFileWithContents_preferredFilename_1, + data?._id ?? ffi.nullptr, + fileName?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + void removeFileWrapper_(NSFileWrapper? child) { + return _lib._objc_msgSend_838( + _id, _lib._sel_removeFileWrapper_1, child?._id ?? ffi.nullptr); + } + + NSDictionary? get fileWrappers { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_fileWrappers1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + NSString keyForFileWrapper_(NSFileWrapper? child) { + final _ret = _lib._objc_msgSend_836( + _id, _lib._sel_keyForFileWrapper_1, child?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSData? get regularFileContents { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_regularFileContents1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSURL? get symbolicLinkDestinationURL { + final _ret = + _lib._objc_msgSend_40(_id, _lib._sel_symbolicLinkDestinationURL1); + return _ret.address == 0 + ? null + : NSURL._(_ret, _lib, retain: true, release: true); + } + + NSObject initWithPath_(NSString? path) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithPath_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + NSObject initSymbolicLinkWithDestination_(NSString? path) { + final _ret = _lib._objc_msgSend_30(_id, + _lib._sel_initSymbolicLinkWithDestination_1, path?._id ?? ffi.nullptr); + return NSObject._(_ret, _lib, retain: true, release: true); + } + + bool needsToBeUpdatedFromPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_needsToBeUpdatedFromPath_1, path?._id ?? ffi.nullptr); + } + + bool updateFromPath_(NSString? path) { + return _lib._objc_msgSend_51( + _id, _lib._sel_updateFromPath_1, path?._id ?? ffi.nullptr); + } + + bool writeToFile_atomically_updateFilenames_( + NSString? path, bool atomicFlag, bool updateFilenamesFlag) { + return _lib._objc_msgSend_839( + _id, + _lib._sel_writeToFile_atomically_updateFilenames_1, + path?._id ?? ffi.nullptr, + atomicFlag, + updateFilenamesFlag); + } + + NSString addFileWithPath_(NSString? path) { + final _ret = _lib._objc_msgSend_56( + _id, _lib._sel_addFileWithPath_1, path?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString addSymbolicLinkWithDestination_preferredFilename_( + NSString? path, NSString? filename) { + final _ret = _lib._objc_msgSend_298( + _id, + _lib._sel_addSymbolicLinkWithDestination_preferredFilename_1, + path?._id ?? ffi.nullptr, + filename?._id ?? ffi.nullptr); + return NSString._(_ret, _lib, retain: true, release: true); + } + + NSString symbolicLinkDestination() { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_symbolicLinkDestination1); + return NSString._(_ret, _lib, retain: true, release: true); + } + + static NSFileWrapper new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFileWrapper1, _lib._sel_new1); + return NSFileWrapper._(_ret, _lib, retain: false, release: true); + } + + static NSFileWrapper alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSFileWrapper1, _lib._sel_alloc1); + return NSFileWrapper._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSFileWrapper1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSFileWrapper1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFileWrapper1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSFileWrapper1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSFileWrapper1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSFileWrapper1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSFileWrapper1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSFileWrapper1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSFileWrapper1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSFileWrapperReadingOptions { + static const int NSFileWrapperReadingImmediate = 1; + static const int NSFileWrapperReadingWithoutMapping = 2; +} + +abstract class NSFileWrapperWritingOptions { + static const int NSFileWrapperWritingAtomic = 1; + static const int NSFileWrapperWritingWithNameUpdating = 2; +} + +class NSURLSession extends NSObject { + NSURLSession._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSession] that points to the same underlying object as [other]. + static NSURLSession castFrom(T other) { + return NSURLSession._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSURLSession] that wraps the given raw object pointer. + static NSURLSession castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSession._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSession]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSURLSession1); + } + + static NSURLSession? getSharedSession(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_840( + _lib._class_NSURLSession1, _lib._sel_sharedSession1); + return _ret.address == 0 + ? null + : NSURLSession._(_ret, _lib, retain: true, release: true); + } + + static NSURLSession sessionWithConfiguration_( + PedometerBindings _lib, NSURLSessionConfiguration? configuration) { + final _ret = _lib._objc_msgSend_851( + _lib._class_NSURLSession1, + _lib._sel_sessionWithConfiguration_1, + configuration?._id ?? ffi.nullptr); + return NSURLSession._(_ret, _lib, retain: true, release: true); + } + + static NSURLSession sessionWithConfiguration_delegate_delegateQueue_( + PedometerBindings _lib, + NSURLSessionConfiguration? configuration, + NSObject? delegate, + NSOperationQueue? queue) { + final _ret = _lib._objc_msgSend_852( + _lib._class_NSURLSession1, + _lib._sel_sessionWithConfiguration_delegate_delegateQueue_1, + configuration?._id ?? ffi.nullptr, + delegate?._id ?? ffi.nullptr, + queue?._id ?? ffi.nullptr); + return NSURLSession._(_ret, _lib, retain: true, release: true); + } + + NSOperationQueue? get delegateQueue { + final _ret = _lib._objc_msgSend_721(_id, _lib._sel_delegateQueue1); + return _ret.address == 0 + ? null + : NSOperationQueue._(_ret, _lib, retain: true, release: true); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionConfiguration? get configuration { + final _ret = _lib._objc_msgSend_841(_id, _lib._sel_configuration1); + return _ret.address == 0 + ? null + : NSURLSessionConfiguration._(_ret, _lib, retain: true, release: true); + } + + NSString? get sessionDescription { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_sessionDescription1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set sessionDescription(NSString? value) { + _lib._objc_msgSend_470( + _id, _lib._sel_setSessionDescription_1, value?._id ?? ffi.nullptr); + } + + void finishTasksAndInvalidate() { + return _lib._objc_msgSend_1(_id, _lib._sel_finishTasksAndInvalidate1); + } + + void invalidateAndCancel() { + return _lib._objc_msgSend_1(_id, _lib._sel_invalidateAndCancel1); + } + + void resetWithCompletionHandler_(ObjCBlock21 completionHandler) { + return _lib._objc_msgSend_458( + _id, _lib._sel_resetWithCompletionHandler_1, completionHandler._id); + } + + void flushWithCompletionHandler_(ObjCBlock21 completionHandler) { + return _lib._objc_msgSend_458( + _id, _lib._sel_flushWithCompletionHandler_1, completionHandler._id); + } + + void getTasksWithCompletionHandler_(ObjCBlock43 completionHandler) { + return _lib._objc_msgSend_853( + _id, _lib._sel_getTasksWithCompletionHandler_1, completionHandler._id); + } + + void getAllTasksWithCompletionHandler_(ObjCBlock36 completionHandler) { + return _lib._objc_msgSend_854(_id, + _lib._sel_getAllTasksWithCompletionHandler_1, completionHandler._id); + } + + NSURLSessionDataTask dataTaskWithRequest_(NSURLRequest? request) { + final _ret = _lib._objc_msgSend_855( + _id, _lib._sel_dataTaskWithRequest_1, request?._id ?? ffi.nullptr); + return NSURLSessionDataTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDataTask dataTaskWithURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_856( + _id, _lib._sel_dataTaskWithURL_1, url?._id ?? ffi.nullptr); + return NSURLSessionDataTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionUploadTask uploadTaskWithRequest_fromFile_( + NSURLRequest? request, NSURL? fileURL) { + final _ret = _lib._objc_msgSend_857( + _id, + _lib._sel_uploadTaskWithRequest_fromFile_1, + request?._id ?? ffi.nullptr, + fileURL?._id ?? ffi.nullptr); + return NSURLSessionUploadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionUploadTask uploadTaskWithRequest_fromData_( + NSURLRequest? request, NSData? bodyData) { + final _ret = _lib._objc_msgSend_858( + _id, + _lib._sel_uploadTaskWithRequest_fromData_1, + request?._id ?? ffi.nullptr, + bodyData?._id ?? ffi.nullptr); + return NSURLSessionUploadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionUploadTask uploadTaskWithStreamedRequest_(NSURLRequest? request) { + final _ret = _lib._objc_msgSend_859(_id, + _lib._sel_uploadTaskWithStreamedRequest_1, request?._id ?? ffi.nullptr); + return NSURLSessionUploadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDownloadTask downloadTaskWithRequest_(NSURLRequest? request) { + final _ret = _lib._objc_msgSend_861( + _id, _lib._sel_downloadTaskWithRequest_1, request?._id ?? ffi.nullptr); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDownloadTask downloadTaskWithURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_862( + _id, _lib._sel_downloadTaskWithURL_1, url?._id ?? ffi.nullptr); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDownloadTask downloadTaskWithResumeData_(NSData? resumeData) { + final _ret = _lib._objc_msgSend_863(_id, + _lib._sel_downloadTaskWithResumeData_1, resumeData?._id ?? ffi.nullptr); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionStreamTask streamTaskWithHostName_port_( + NSString? hostname, int port) { + final _ret = _lib._objc_msgSend_866( + _id, + _lib._sel_streamTaskWithHostName_port_1, + hostname?._id ?? ffi.nullptr, + port); + return NSURLSessionStreamTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionStreamTask streamTaskWithNetService_(NSNetService? service) { + final _ret = _lib._objc_msgSend_872( + _id, _lib._sel_streamTaskWithNetService_1, service?._id ?? ffi.nullptr); + return NSURLSessionStreamTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionWebSocketTask webSocketTaskWithURL_(NSURL? url) { + final _ret = _lib._objc_msgSend_879( + _id, _lib._sel_webSocketTaskWithURL_1, url?._id ?? ffi.nullptr); + return NSURLSessionWebSocketTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionWebSocketTask webSocketTaskWithURL_protocols_( + NSURL? url, NSArray? protocols) { + final _ret = _lib._objc_msgSend_880( + _id, + _lib._sel_webSocketTaskWithURL_protocols_1, + url?._id ?? ffi.nullptr, + protocols?._id ?? ffi.nullptr); + return NSURLSessionWebSocketTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionWebSocketTask webSocketTaskWithRequest_(NSURLRequest? request) { + final _ret = _lib._objc_msgSend_881( + _id, _lib._sel_webSocketTaskWithRequest_1, request?._id ?? ffi.nullptr); + return NSURLSessionWebSocketTask._(_ret, _lib, retain: true, release: true); + } + + @override + NSURLSession init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSession._(_ret, _lib, retain: true, release: true); + } + + static NSURLSession new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLSession1, _lib._sel_new1); + return NSURLSession._(_ret, _lib, retain: false, release: true); + } + + NSURLSessionDataTask dataTaskWithRequest_completionHandler_( + NSURLRequest? request, ObjCBlock47 completionHandler) { + final _ret = _lib._objc_msgSend_882( + _id, + _lib._sel_dataTaskWithRequest_completionHandler_1, + request?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionDataTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDataTask dataTaskWithURL_completionHandler_( + NSURL? url, ObjCBlock47 completionHandler) { + final _ret = _lib._objc_msgSend_883( + _id, + _lib._sel_dataTaskWithURL_completionHandler_1, + url?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionDataTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionUploadTask uploadTaskWithRequest_fromFile_completionHandler_( + NSURLRequest? request, NSURL? fileURL, ObjCBlock47 completionHandler) { + final _ret = _lib._objc_msgSend_884( + _id, + _lib._sel_uploadTaskWithRequest_fromFile_completionHandler_1, + request?._id ?? ffi.nullptr, + fileURL?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionUploadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionUploadTask uploadTaskWithRequest_fromData_completionHandler_( + NSURLRequest? request, NSData? bodyData, ObjCBlock47 completionHandler) { + final _ret = _lib._objc_msgSend_885( + _id, + _lib._sel_uploadTaskWithRequest_fromData_completionHandler_1, + request?._id ?? ffi.nullptr, + bodyData?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionUploadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDownloadTask downloadTaskWithRequest_completionHandler_( + NSURLRequest? request, ObjCBlock48 completionHandler) { + final _ret = _lib._objc_msgSend_886( + _id, + _lib._sel_downloadTaskWithRequest_completionHandler_1, + request?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDownloadTask downloadTaskWithURL_completionHandler_( + NSURL? url, ObjCBlock48 completionHandler) { + final _ret = _lib._objc_msgSend_887( + _id, + _lib._sel_downloadTaskWithURL_completionHandler_1, + url?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + NSURLSessionDownloadTask downloadTaskWithResumeData_completionHandler_( + NSData? resumeData, ObjCBlock48 completionHandler) { + final _ret = _lib._objc_msgSend_888( + _id, + _lib._sel_downloadTaskWithResumeData_completionHandler_1, + resumeData?._id ?? ffi.nullptr, + completionHandler._id); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSession alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSURLSession1, _lib._sel_alloc1); + return NSURLSession._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSession1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSession1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSession1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSession1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSession1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSession1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSession1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURLSession1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSession1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSURLSessionConfiguration extends NSObject { + NSURLSessionConfiguration._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionConfiguration] that points to the same underlying object as [other]. + static NSURLSessionConfiguration castFrom(T other) { + return NSURLSessionConfiguration._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionConfiguration] that wraps the given raw object pointer. + static NSURLSessionConfiguration castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionConfiguration._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionConfiguration]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionConfiguration1); + } + + static NSURLSessionConfiguration? getDefaultSessionConfiguration( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_841(_lib._class_NSURLSessionConfiguration1, + _lib._sel_defaultSessionConfiguration1); + return _ret.address == 0 + ? null + : NSURLSessionConfiguration._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionConfiguration? getEphemeralSessionConfiguration( + PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_841(_lib._class_NSURLSessionConfiguration1, + _lib._sel_ephemeralSessionConfiguration1); + return _ret.address == 0 + ? null + : NSURLSessionConfiguration._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionConfiguration + backgroundSessionConfigurationWithIdentifier_( + PedometerBindings _lib, NSString? identifier) { + final _ret = _lib._objc_msgSend_842( + _lib._class_NSURLSessionConfiguration1, + _lib._sel_backgroundSessionConfigurationWithIdentifier_1, + identifier?._id ?? ffi.nullptr); + return NSURLSessionConfiguration._(_ret, _lib, retain: true, release: true); + } + + NSString? get identifier { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_identifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + int get requestCachePolicy { + return _lib._objc_msgSend_680(_id, _lib._sel_requestCachePolicy1); + } + + set requestCachePolicy(int value) { + _lib._objc_msgSend_819(_id, _lib._sel_setRequestCachePolicy_1, value); + } + + double get timeoutIntervalForRequest { + return _lib._objc_msgSend_147(_id, _lib._sel_timeoutIntervalForRequest1); + } + + set timeoutIntervalForRequest(double value) { + _lib._objc_msgSend_467( + _id, _lib._sel_setTimeoutIntervalForRequest_1, value); + } + + double get timeoutIntervalForResource { + return _lib._objc_msgSend_147(_id, _lib._sel_timeoutIntervalForResource1); + } + + set timeoutIntervalForResource(double value) { + _lib._objc_msgSend_467( + _id, _lib._sel_setTimeoutIntervalForResource_1, value); + } + + int get networkServiceType { + return _lib._objc_msgSend_681(_id, _lib._sel_networkServiceType1); + } + + set networkServiceType(int value) { + _lib._objc_msgSend_820(_id, _lib._sel_setNetworkServiceType_1, value); + } + + bool get allowsCellularAccess { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsCellularAccess1); + } + + set allowsCellularAccess(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setAllowsCellularAccess_1, value); + } + + bool get allowsExpensiveNetworkAccess { + return _lib._objc_msgSend_12(_id, _lib._sel_allowsExpensiveNetworkAccess1); + } + + set allowsExpensiveNetworkAccess(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAllowsExpensiveNetworkAccess_1, value); + } + + bool get allowsConstrainedNetworkAccess { + return _lib._objc_msgSend_12( + _id, _lib._sel_allowsConstrainedNetworkAccess1); + } + + set allowsConstrainedNetworkAccess(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setAllowsConstrainedNetworkAccess_1, value); + } + + bool get requiresDNSSECValidation { + return _lib._objc_msgSend_12(_id, _lib._sel_requiresDNSSECValidation1); + } + + set requiresDNSSECValidation(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setRequiresDNSSECValidation_1, value); + } + + bool get waitsForConnectivity { + return _lib._objc_msgSend_12(_id, _lib._sel_waitsForConnectivity1); + } + + set waitsForConnectivity(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setWaitsForConnectivity_1, value); + } + + bool get discretionary { + return _lib._objc_msgSend_12(_id, _lib._sel_isDiscretionary1); + } + + set discretionary(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setDiscretionary_1, value); + } + + NSString? get sharedContainerIdentifier { + final _ret = + _lib._objc_msgSend_20(_id, _lib._sel_sharedContainerIdentifier1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + set sharedContainerIdentifier(NSString? value) { + _lib._objc_msgSend_470(_id, _lib._sel_setSharedContainerIdentifier_1, + value?._id ?? ffi.nullptr); + } + + bool get sessionSendsLaunchEvents { + return _lib._objc_msgSend_12(_id, _lib._sel_sessionSendsLaunchEvents1); + } + + set sessionSendsLaunchEvents(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setSessionSendsLaunchEvents_1, value); + } + + NSDictionary? get connectionProxyDictionary { + final _ret = + _lib._objc_msgSend_324(_id, _lib._sel_connectionProxyDictionary1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set connectionProxyDictionary(NSDictionary? value) { + _lib._objc_msgSend_571(_id, _lib._sel_setConnectionProxyDictionary_1, + value?._id ?? ffi.nullptr); + } + + int get TLSMinimumSupportedProtocol { + return _lib._objc_msgSend_843(_id, _lib._sel_TLSMinimumSupportedProtocol1); + } + + set TLSMinimumSupportedProtocol(int value) { + _lib._objc_msgSend_844( + _id, _lib._sel_setTLSMinimumSupportedProtocol_1, value); + } + + int get TLSMaximumSupportedProtocol { + return _lib._objc_msgSend_843(_id, _lib._sel_TLSMaximumSupportedProtocol1); + } + + set TLSMaximumSupportedProtocol(int value) { + _lib._objc_msgSend_844( + _id, _lib._sel_setTLSMaximumSupportedProtocol_1, value); + } + + int get TLSMinimumSupportedProtocolVersion { + return _lib._objc_msgSend_845( + _id, _lib._sel_TLSMinimumSupportedProtocolVersion1); + } + + set TLSMinimumSupportedProtocolVersion(int value) { + _lib._objc_msgSend_846( + _id, _lib._sel_setTLSMinimumSupportedProtocolVersion_1, value); + } + + int get TLSMaximumSupportedProtocolVersion { + return _lib._objc_msgSend_845( + _id, _lib._sel_TLSMaximumSupportedProtocolVersion1); + } + + set TLSMaximumSupportedProtocolVersion(int value) { + _lib._objc_msgSend_846( + _id, _lib._sel_setTLSMaximumSupportedProtocolVersion_1, value); + } + + bool get HTTPShouldUsePipelining { + return _lib._objc_msgSend_12(_id, _lib._sel_HTTPShouldUsePipelining1); + } + + set HTTPShouldUsePipelining(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setHTTPShouldUsePipelining_1, value); + } + + bool get HTTPShouldSetCookies { + return _lib._objc_msgSend_12(_id, _lib._sel_HTTPShouldSetCookies1); + } + + set HTTPShouldSetCookies(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setHTTPShouldSetCookies_1, value); + } + + int get HTTPCookieAcceptPolicy { + return _lib._objc_msgSend_677(_id, _lib._sel_HTTPCookieAcceptPolicy1); + } + + set HTTPCookieAcceptPolicy(int value) { + _lib._objc_msgSend_678(_id, _lib._sel_setHTTPCookieAcceptPolicy_1, value); + } + + NSDictionary? get HTTPAdditionalHeaders { + final _ret = _lib._objc_msgSend_324(_id, _lib._sel_HTTPAdditionalHeaders1); + return _ret.address == 0 + ? null + : NSDictionary._(_ret, _lib, retain: true, release: true); + } + + set HTTPAdditionalHeaders(NSDictionary? value) { + _lib._objc_msgSend_571( + _id, _lib._sel_setHTTPAdditionalHeaders_1, value?._id ?? ffi.nullptr); + } + + int get HTTPMaximumConnectionsPerHost { + return _lib._objc_msgSend_70(_id, _lib._sel_HTTPMaximumConnectionsPerHost1); + } + + set HTTPMaximumConnectionsPerHost(int value) { + _lib._objc_msgSend_583( + _id, _lib._sel_setHTTPMaximumConnectionsPerHost_1, value); + } + + NSHTTPCookieStorage? get HTTPCookieStorage { + final _ret = _lib._objc_msgSend_671(_id, _lib._sel_HTTPCookieStorage1); + return _ret.address == 0 + ? null + : NSHTTPCookieStorage._(_ret, _lib, retain: true, release: true); + } + + set HTTPCookieStorage(NSHTTPCookieStorage? value) { + _lib._objc_msgSend_847( + _id, _lib._sel_setHTTPCookieStorage_1, value?._id ?? ffi.nullptr); + } + + NSURLCredentialStorage? get URLCredentialStorage { + final _ret = _lib._objc_msgSend_805(_id, _lib._sel_URLCredentialStorage1); + return _ret.address == 0 + ? null + : NSURLCredentialStorage._(_ret, _lib, retain: true, release: true); + } + + set URLCredentialStorage(NSURLCredentialStorage? value) { + _lib._objc_msgSend_848( + _id, _lib._sel_setURLCredentialStorage_1, value?._id ?? ffi.nullptr); + } + + NSURLCache? get URLCache { + final _ret = _lib._objc_msgSend_775(_id, _lib._sel_URLCache1); + return _ret.address == 0 + ? null + : NSURLCache._(_ret, _lib, retain: true, release: true); + } + + set URLCache(NSURLCache? value) { + _lib._objc_msgSend_776( + _id, _lib._sel_setURLCache_1, value?._id ?? ffi.nullptr); + } + + bool get shouldUseExtendedBackgroundIdleMode { + return _lib._objc_msgSend_12( + _id, _lib._sel_shouldUseExtendedBackgroundIdleMode1); + } + + set shouldUseExtendedBackgroundIdleMode(bool value) { + _lib._objc_msgSend_453( + _id, _lib._sel_setShouldUseExtendedBackgroundIdleMode_1, value); + } + + NSArray? get protocolClasses { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_protocolClasses1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + set protocolClasses(NSArray? value) { + _lib._objc_msgSend_609( + _id, _lib._sel_setProtocolClasses_1, value?._id ?? ffi.nullptr); + } + + int get multipathServiceType { + return _lib._objc_msgSend_849(_id, _lib._sel_multipathServiceType1); + } + + set multipathServiceType(int value) { + _lib._objc_msgSend_850(_id, _lib._sel_setMultipathServiceType_1, value); + } + + @override + NSURLSessionConfiguration init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionConfiguration._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionConfiguration new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionConfiguration1, _lib._sel_new1); + return NSURLSessionConfiguration._(_ret, _lib, + retain: false, release: true); + } + + static NSURLSessionConfiguration backgroundSessionConfiguration_( + PedometerBindings _lib, NSString? identifier) { + final _ret = _lib._objc_msgSend_842( + _lib._class_NSURLSessionConfiguration1, + _lib._sel_backgroundSessionConfiguration_1, + identifier?._id ?? ffi.nullptr); + return NSURLSessionConfiguration._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionConfiguration alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionConfiguration1, _lib._sel_alloc1); + return NSURLSessionConfiguration._(_ret, _lib, + retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionConfiguration1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionConfiguration1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionConfiguration1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionConfiguration1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionConfiguration1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionConfiguration1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionConfiguration1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionConfiguration1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLSessionConfiguration1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +/// ! +/// @enum SSLProtocol enumeration +/// @abstract Enumerations for the set of supported TLS and DTLS protocol versions. +/// +/// @note This enumeration is deprecated. Use `tls_protocol_version_t` instead. +abstract class SSLProtocol { + static const int kSSLProtocolUnknown = 0; + static const int kTLSProtocol1 = 4; + static const int kTLSProtocol11 = 7; + static const int kTLSProtocol12 = 8; + static const int kDTLSProtocol1 = 9; + static const int kTLSProtocol13 = 10; + static const int kDTLSProtocol12 = 11; + static const int kTLSProtocolMaxSupported = 999; + static const int kSSLProtocol2 = 1; + static const int kSSLProtocol3 = 2; + static const int kSSLProtocol3Only = 3; + static const int kTLSProtocol1Only = 5; + static const int kSSLProtocolAll = 6; +} + +/// ! +/// @enum tls_protocol_version_t enumeration +/// @abstract Enumerations for the set of supported TLS and DTLS protocol versions. +/// +/// @constant tls_protocol_version_TLSv10 TLS 1.0 [https://tools.ietf.org/html/rfc4346] +/// @constant tls_protocol_version_TLSv11 TLS 1.1 [https://tools.ietf.org/html/rfc2246] +/// @constant tls_protocol_version_TLSv12 TLS 1.2 [https://tools.ietf.org/html/rfc5246] +/// @constant tls_protocol_version_TLSv13 TLS 1.3 [https://tools.ietf.org/html/rfc8446] +/// @constant tls_protocol_version_DTLSv10 DTLS 1.0 [https://tools.ietf.org/html/rfc4347] +/// @constant tls_protocol_version_DTLSv12 DTLS 1.2 [https://tools.ietf.org/html/rfc6347] +abstract class tls_protocol_version_t { + static const int tls_protocol_version_TLSv10 = 769; + static const int tls_protocol_version_TLSv11 = 770; + static const int tls_protocol_version_TLSv12 = 771; + static const int tls_protocol_version_TLSv13 = 772; + static const int tls_protocol_version_DTLSv10 = -257; + static const int tls_protocol_version_DTLSv12 = -259; +} + +/// ! +/// @enum NSURLSessionMultipathServiceType +/// +/// @discussion The NSURLSessionMultipathServiceType enum defines constants that +/// can be used to specify the multipath service type to associate an NSURLSession. The +/// multipath service type determines whether multipath TCP should be attempted and the conditions +/// for creating and switching between subflows. Using these service types requires the appropriate entitlement. Any connection attempt will fail if the process does not have the required entitlement. +/// A primary interface is a generally less expensive interface in terms of both cost and power (such as WiFi or ethernet). A secondary interface is more expensive (such as 3G or LTE). +/// +/// @constant NSURLSessionMultipathServiceTypeNone Specifies that multipath tcp should not be used. Connections will use a single flow. +/// This is the default value. No entitlement is required to set this value. +/// +/// @constant NSURLSessionMultipathServiceTypeHandover Specifies that a secondary subflow should only be used +/// when the primary subflow is not performing adequately. Requires the com.apple.developer.networking.multipath entitlement. +/// +/// @constant NSURLSessionMultipathServiceTypeInteractive Specifies that a secondary subflow should be used if the +/// primary subflow is not performing adequately (packet loss, high round trip times, bandwidth issues). The secondary +/// subflow will be created more aggressively than with NSURLSessionMultipathServiceTypeHandover. Requires the com.apple.developer.networking.multipath entitlement. +/// +/// @constant NSURLSessionMultipathServiceTypeAggregate Specifies that multiple subflows across multiple interfaces should be +/// used for better bandwidth. This mode is only available for experimentation on devices configured for development use. +/// It can be enabled in the Developer section of the Settings app. +abstract class NSURLSessionMultipathServiceType { + static const int NSURLSessionMultipathServiceTypeNone = 0; + static const int NSURLSessionMultipathServiceTypeHandover = 1; + static const int NSURLSessionMultipathServiceTypeInteractive = 2; + static const int NSURLSessionMultipathServiceTypeAggregate = 3; +} + +void _ObjCBlock43_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock43_closureRegistry = {}; +int _ObjCBlock43_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock43_registerClosure(Function fn) { + final id = ++_ObjCBlock43_closureRegistryIndex; + _ObjCBlock43_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock43_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock43_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock43 extends _ObjCBlockBase { + ObjCBlock43._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock43.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock43_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock43.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock43_closureTrampoline) + .cast(), + _ObjCBlock43_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSURLSessionUploadTask extends NSURLSessionDataTask { + NSURLSessionUploadTask._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionUploadTask] that points to the same underlying object as [other]. + static NSURLSessionUploadTask castFrom(T other) { + return NSURLSessionUploadTask._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionUploadTask] that wraps the given raw object pointer. + static NSURLSessionUploadTask castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionUploadTask._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionUploadTask]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionUploadTask1); + } + + @override + NSURLSessionUploadTask init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionUploadTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionUploadTask new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionUploadTask1, _lib._sel_new1); + return NSURLSessionUploadTask._(_ret, _lib, retain: false, release: true); + } + + static NSURLSessionUploadTask alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionUploadTask1, _lib._sel_alloc1); + return NSURLSessionUploadTask._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionUploadTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionUploadTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionUploadTask1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionUploadTask1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionUploadTask1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionUploadTask1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionUploadTask1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionUploadTask1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLSessionUploadTask1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSURLSessionDownloadTask extends NSURLSessionTask { + NSURLSessionDownloadTask._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionDownloadTask] that points to the same underlying object as [other]. + static NSURLSessionDownloadTask castFrom(T other) { + return NSURLSessionDownloadTask._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionDownloadTask] that wraps the given raw object pointer. + static NSURLSessionDownloadTask castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionDownloadTask._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionDownloadTask]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionDownloadTask1); + } + + void cancelByProducingResumeData_(ObjCBlock44 completionHandler) { + return _lib._objc_msgSend_860( + _id, _lib._sel_cancelByProducingResumeData_1, completionHandler._id); + } + + @override + NSURLSessionDownloadTask init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionDownloadTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionDownloadTask new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionDownloadTask1, _lib._sel_new1); + return NSURLSessionDownloadTask._(_ret, _lib, retain: false, release: true); + } + + static NSURLSessionDownloadTask alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionDownloadTask1, _lib._sel_alloc1); + return NSURLSessionDownloadTask._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionDownloadTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionDownloadTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionDownloadTask1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionDownloadTask1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionDownloadTask1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionDownloadTask1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionDownloadTask1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionDownloadTask1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLSessionDownloadTask1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock44_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return block.ref.target + .cast< + ffi.NativeFunction arg0)>>() + .asFunction arg0)>()(arg0); +} + +final _ObjCBlock44_closureRegistry = {}; +int _ObjCBlock44_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock44_registerClosure(Function fn) { + final id = ++_ObjCBlock44_closureRegistryIndex; + _ObjCBlock44_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock44_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, ffi.Pointer arg0) { + return _ObjCBlock44_closureRegistry[block.ref.target.address]!(arg0); +} + +class ObjCBlock44 extends _ObjCBlockBase { + ObjCBlock44._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock44.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock44_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock44.fromFunction( + PedometerBindings lib, void Function(ffi.Pointer arg0) fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>( + _ObjCBlock44_closureTrampoline) + .cast(), + _ObjCBlock44_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>>() + .asFunction< + void Function(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0)>()(_id, arg0); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSURLSessionStreamTask extends NSURLSessionTask { + NSURLSessionStreamTask._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionStreamTask] that points to the same underlying object as [other]. + static NSURLSessionStreamTask castFrom(T other) { + return NSURLSessionStreamTask._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionStreamTask] that wraps the given raw object pointer. + static NSURLSessionStreamTask castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionStreamTask._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionStreamTask]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionStreamTask1); + } + + void readDataOfMinLength_maxLength_timeout_completionHandler_(int minBytes, + int maxBytes, double timeout, ObjCBlock45 completionHandler) { + return _lib._objc_msgSend_864( + _id, + _lib._sel_readDataOfMinLength_maxLength_timeout_completionHandler_1, + minBytes, + maxBytes, + timeout, + completionHandler._id); + } + + void writeData_timeout_completionHandler_( + NSData? data, double timeout, ObjCBlock18 completionHandler) { + return _lib._objc_msgSend_865( + _id, + _lib._sel_writeData_timeout_completionHandler_1, + data?._id ?? ffi.nullptr, + timeout, + completionHandler._id); + } + + void captureStreams() { + return _lib._objc_msgSend_1(_id, _lib._sel_captureStreams1); + } + + void closeWrite() { + return _lib._objc_msgSend_1(_id, _lib._sel_closeWrite1); + } + + void closeRead() { + return _lib._objc_msgSend_1(_id, _lib._sel_closeRead1); + } + + void startSecureConnection() { + return _lib._objc_msgSend_1(_id, _lib._sel_startSecureConnection1); + } + + void stopSecureConnection() { + return _lib._objc_msgSend_1(_id, _lib._sel_stopSecureConnection1); + } + + @override + NSURLSessionStreamTask init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionStreamTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionStreamTask new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionStreamTask1, _lib._sel_new1); + return NSURLSessionStreamTask._(_ret, _lib, retain: false, release: true); + } + + static NSURLSessionStreamTask alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionStreamTask1, _lib._sel_alloc1); + return NSURLSessionStreamTask._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionStreamTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionStreamTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionStreamTask1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionStreamTask1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionStreamTask1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionStreamTask1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionStreamTask1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionStreamTask1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLSessionStreamTask1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock45_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Bool arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function(ffi.Pointer arg0, bool arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock45_closureRegistry = {}; +int _ObjCBlock45_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock45_registerClosure(Function fn) { + final id = ++_ObjCBlock45_closureRegistryIndex; + _ObjCBlock45_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock45_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return _ObjCBlock45_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock45 extends _ObjCBlockBase { + ObjCBlock45._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock45.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, ffi.Bool arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>( + _ObjCBlock45_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock45.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, bool arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>( + _ObjCBlock45_closureTrampoline) + .cast(), + _ObjCBlock45_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call( + ffi.Pointer arg0, bool arg1, ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Bool arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + bool arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class NSNetService extends NSObject { + NSNetService._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSNetService] that points to the same underlying object as [other]. + static NSNetService castFrom(T other) { + return NSNetService._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [NSNetService] that wraps the given raw object pointer. + static NSNetService castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSNetService._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSNetService]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_NSNetService1); + } + + NSNetService initWithDomain_type_name_port_( + NSString? domain, NSString? type, NSString? name, int port) { + final _ret = _lib._objc_msgSend_867( + _id, + _lib._sel_initWithDomain_type_name_port_1, + domain?._id ?? ffi.nullptr, + type?._id ?? ffi.nullptr, + name?._id ?? ffi.nullptr, + port); + return NSNetService._(_ret, _lib, retain: true, release: true); + } + + NSNetService initWithDomain_type_name_( + NSString? domain, NSString? type, NSString? name) { + final _ret = _lib._objc_msgSend_26( + _id, + _lib._sel_initWithDomain_type_name_1, + domain?._id ?? ffi.nullptr, + type?._id ?? ffi.nullptr, + name?._id ?? ffi.nullptr); + return NSNetService._(_ret, _lib, retain: true, release: true); + } + + void scheduleInRunLoop_forMode_(NSRunLoop? aRunLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_scheduleInRunLoop_forMode_1, + aRunLoop?._id ?? ffi.nullptr, mode._id); + } + + void removeFromRunLoop_forMode_(NSRunLoop? aRunLoop, NSString mode) { + return _lib._objc_msgSend_650(_id, _lib._sel_removeFromRunLoop_forMode_1, + aRunLoop?._id ?? ffi.nullptr, mode._id); + } + + NSObject? get delegate { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_delegate1); + return _ret.address == 0 + ? null + : NSObject._(_ret, _lib, retain: true, release: true); + } + + set delegate(NSObject? value) { + _lib._objc_msgSend_348( + _id, _lib._sel_setDelegate_1, value?._id ?? ffi.nullptr); + } + + bool get includesPeerToPeer { + return _lib._objc_msgSend_12(_id, _lib._sel_includesPeerToPeer1); + } + + set includesPeerToPeer(bool value) { + _lib._objc_msgSend_453(_id, _lib._sel_setIncludesPeerToPeer_1, value); + } + + NSString? get name { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_name1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get type { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_type1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get domain { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_domain1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSString? get hostName { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_hostName1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + NSArray? get addresses { + final _ret = _lib._objc_msgSend_71(_id, _lib._sel_addresses1); + return _ret.address == 0 + ? null + : NSArray._(_ret, _lib, retain: true, release: true); + } + + int get port { + return _lib._objc_msgSend_70(_id, _lib._sel_port1); + } + + void publish() { + return _lib._objc_msgSend_1(_id, _lib._sel_publish1); + } + + void publishWithOptions_(int options) { + return _lib._objc_msgSend_868(_id, _lib._sel_publishWithOptions_1, options); + } + + void resolve() { + return _lib._objc_msgSend_1(_id, _lib._sel_resolve1); + } + + void stop() { + return _lib._objc_msgSend_1(_id, _lib._sel_stop1); + } + + static NSDictionary dictionaryFromTXTRecordData_( + PedometerBindings _lib, NSData? txtData) { + final _ret = _lib._objc_msgSend_869(_lib._class_NSNetService1, + _lib._sel_dictionaryFromTXTRecordData_1, txtData?._id ?? ffi.nullptr); + return NSDictionary._(_ret, _lib, retain: true, release: true); + } + + static NSData dataFromTXTRecordDictionary_( + PedometerBindings _lib, NSDictionary? txtDictionary) { + final _ret = _lib._objc_msgSend_870( + _lib._class_NSNetService1, + _lib._sel_dataFromTXTRecordDictionary_1, + txtDictionary?._id ?? ffi.nullptr); + return NSData._(_ret, _lib, retain: true, release: true); + } + + void resolveWithTimeout_(double timeout) { + return _lib._objc_msgSend_466(_id, _lib._sel_resolveWithTimeout_1, timeout); + } + + bool getInputStream_outputStream_( + ffi.Pointer> inputStream, + ffi.Pointer> outputStream) { + return _lib._objc_msgSend_871(_id, _lib._sel_getInputStream_outputStream_1, + inputStream, outputStream); + } + + bool setTXTRecordData_(NSData? recordData) { + return _lib._objc_msgSend_23( + _id, _lib._sel_setTXTRecordData_1, recordData?._id ?? ffi.nullptr); + } + + NSData TXTRecordData() { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_TXTRecordData1); + return NSData._(_ret, _lib, retain: true, release: true); + } + + void startMonitoring() { + return _lib._objc_msgSend_1(_id, _lib._sel_startMonitoring1); + } + + void stopMonitoring() { + return _lib._objc_msgSend_1(_id, _lib._sel_stopMonitoring1); + } + + static NSNetService new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSNetService1, _lib._sel_new1); + return NSNetService._(_ret, _lib, retain: false, release: true); + } + + static NSNetService alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_NSNetService1, _lib._sel_alloc1); + return NSNetService._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSNetService1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSNetService1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSNetService1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSNetService1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSNetService1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSNetService1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSNetService1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSNetService1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSNetService1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSNetServiceOptions { + static const int NSNetServiceNoAutoRename = 1; + static const int NSNetServiceListenForConnections = 2; +} + +class NSURLSessionWebSocketTask extends NSURLSessionTask { + NSURLSessionWebSocketTask._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionWebSocketTask] that points to the same underlying object as [other]. + static NSURLSessionWebSocketTask castFrom(T other) { + return NSURLSessionWebSocketTask._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionWebSocketTask] that wraps the given raw object pointer. + static NSURLSessionWebSocketTask castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionWebSocketTask._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionWebSocketTask]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionWebSocketTask1); + } + + void sendMessage_completionHandler_( + NSURLSessionWebSocketMessage? message, ObjCBlock18 completionHandler) { + return _lib._objc_msgSend_874( + _id, + _lib._sel_sendMessage_completionHandler_1, + message?._id ?? ffi.nullptr, + completionHandler._id); + } + + void receiveMessageWithCompletionHandler_(ObjCBlock46 completionHandler) { + return _lib._objc_msgSend_875(_id, + _lib._sel_receiveMessageWithCompletionHandler_1, completionHandler._id); + } + + void sendPingWithPongReceiveHandler_(ObjCBlock18 pongReceiveHandler) { + return _lib._objc_msgSend_876(_id, + _lib._sel_sendPingWithPongReceiveHandler_1, pongReceiveHandler._id); + } + + void cancelWithCloseCode_reason_(int closeCode, NSData? reason) { + return _lib._objc_msgSend_877(_id, _lib._sel_cancelWithCloseCode_reason_1, + closeCode, reason?._id ?? ffi.nullptr); + } + + int get maximumMessageSize { + return _lib._objc_msgSend_70(_id, _lib._sel_maximumMessageSize1); + } + + set maximumMessageSize(int value) { + _lib._objc_msgSend_583(_id, _lib._sel_setMaximumMessageSize_1, value); + } + + int get closeCode { + return _lib._objc_msgSend_878(_id, _lib._sel_closeCode1); + } + + NSData? get closeReason { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_closeReason1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + @override + NSURLSessionWebSocketTask init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionWebSocketTask._(_ret, _lib, retain: true, release: true); + } + + static NSURLSessionWebSocketTask new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionWebSocketTask1, _lib._sel_new1); + return NSURLSessionWebSocketTask._(_ret, _lib, + retain: false, release: true); + } + + static NSURLSessionWebSocketTask alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionWebSocketTask1, _lib._sel_alloc1); + return NSURLSessionWebSocketTask._(_ret, _lib, + retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionWebSocketTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionWebSocketTask1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionWebSocketTask1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_NSURLSessionWebSocketTask1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionWebSocketTask1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionWebSocketTask1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionWebSocketTask1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_NSURLSessionWebSocketTask1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLSessionWebSocketTask1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +class NSURLSessionWebSocketMessage extends NSObject { + NSURLSessionWebSocketMessage._( + ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [NSURLSessionWebSocketMessage] that points to the same underlying object as [other]. + static NSURLSessionWebSocketMessage castFrom( + T other) { + return NSURLSessionWebSocketMessage._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [NSURLSessionWebSocketMessage] that wraps the given raw object pointer. + static NSURLSessionWebSocketMessage castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return NSURLSessionWebSocketMessage._(other, lib, + retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [NSURLSessionWebSocketMessage]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_NSURLSessionWebSocketMessage1); + } + + NSURLSessionWebSocketMessage initWithData_(NSData? data) { + final _ret = _lib._objc_msgSend_211( + _id, _lib._sel_initWithData_1, data?._id ?? ffi.nullptr); + return NSURLSessionWebSocketMessage._(_ret, _lib, + retain: true, release: true); + } + + NSURLSessionWebSocketMessage initWithString_(NSString? string) { + final _ret = _lib._objc_msgSend_30( + _id, _lib._sel_initWithString_1, string?._id ?? ffi.nullptr); + return NSURLSessionWebSocketMessage._(_ret, _lib, + retain: true, release: true); + } + + int get type { + return _lib._objc_msgSend_873(_id, _lib._sel_type1); + } + + NSData? get data { + final _ret = _lib._objc_msgSend_39(_id, _lib._sel_data1); + return _ret.address == 0 + ? null + : NSData._(_ret, _lib, retain: true, release: true); + } + + NSString? get string { + final _ret = _lib._objc_msgSend_20(_id, _lib._sel_string1); + return _ret.address == 0 + ? null + : NSString._(_ret, _lib, retain: true, release: true); + } + + @override + NSURLSessionWebSocketMessage init() { + final _ret = _lib._objc_msgSend_2(_id, _lib._sel_init1); + return NSURLSessionWebSocketMessage._(_ret, _lib, + retain: true, release: true); + } + + static NSURLSessionWebSocketMessage new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionWebSocketMessage1, _lib._sel_new1); + return NSURLSessionWebSocketMessage._(_ret, _lib, + retain: false, release: true); + } + + static NSURLSessionWebSocketMessage alloc(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_NSURLSessionWebSocketMessage1, _lib._sel_alloc1); + return NSURLSessionWebSocketMessage._(_ret, _lib, + retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_NSURLSessionWebSocketMessage1, + _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class NSURLSessionWebSocketMessageType { + static const int NSURLSessionWebSocketMessageTypeData = 0; + static const int NSURLSessionWebSocketMessageTypeString = 1; +} + +void _ObjCBlock46_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock46_closureRegistry = {}; +int _ObjCBlock46_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock46_registerClosure(Function fn) { + final id = ++_ObjCBlock46_closureRegistryIndex; + _ObjCBlock46_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock46_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock46_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock46 extends _ObjCBlockBase { + ObjCBlock46._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock46.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock46_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock46.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock46_closureTrampoline) + .cast(), + _ObjCBlock46_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +abstract class NSURLSessionWebSocketCloseCode { + static const int NSURLSessionWebSocketCloseCodeInvalid = 0; + static const int NSURLSessionWebSocketCloseCodeNormalClosure = 1000; + static const int NSURLSessionWebSocketCloseCodeGoingAway = 1001; + static const int NSURLSessionWebSocketCloseCodeProtocolError = 1002; + static const int NSURLSessionWebSocketCloseCodeUnsupportedData = 1003; + static const int NSURLSessionWebSocketCloseCodeNoStatusReceived = 1005; + static const int NSURLSessionWebSocketCloseCodeAbnormalClosure = 1006; + static const int NSURLSessionWebSocketCloseCodeInvalidFramePayloadData = 1007; + static const int NSURLSessionWebSocketCloseCodePolicyViolation = 1008; + static const int NSURLSessionWebSocketCloseCodeMessageTooBig = 1009; + static const int NSURLSessionWebSocketCloseCodeMandatoryExtensionMissing = + 1010; + static const int NSURLSessionWebSocketCloseCodeInternalServerError = 1011; + static const int NSURLSessionWebSocketCloseCodeTLSHandshakeFailure = 1015; +} + +void _ObjCBlock47_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock47_closureRegistry = {}; +int _ObjCBlock47_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock47_registerClosure(Function fn) { + final id = ++_ObjCBlock47_closureRegistryIndex; + _ObjCBlock47_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock47_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock47_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock47 extends _ObjCBlockBase { + ObjCBlock47._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock47.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock47_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock47.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock47_closureTrampoline) + .cast(), + _ObjCBlock47_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +void _ObjCBlock48_fnPtrTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(arg0, arg1, arg2); +} + +final _ObjCBlock48_closureRegistry = {}; +int _ObjCBlock48_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock48_registerClosure(Function fn) { + final id = ++_ObjCBlock48_closureRegistryIndex; + _ObjCBlock48_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock48_closureTrampoline( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2) { + return _ObjCBlock48_closureRegistry[block.ref.target.address]!( + arg0, arg1, arg2); +} + +class ObjCBlock48 extends _ObjCBlockBase { + ObjCBlock48._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock48.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock48_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock48.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock48_closureTrampoline) + .cast(), + _ObjCBlock48_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1, + ffi.Pointer arg2) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>()(_id, arg0, arg1, arg2); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class CMPedometer extends NSObject { + CMPedometer._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [CMPedometer] that points to the same underlying object as [other]. + static CMPedometer castFrom(T other) { + return CMPedometer._(other._id, other._lib, retain: true, release: true); + } + + /// Returns a [CMPedometer] that wraps the given raw object pointer. + static CMPedometer castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return CMPedometer._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [CMPedometer]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0( + obj._id, obj._lib._sel_isKindOfClass_1, obj._lib._class_CMPedometer1); + } + + static bool isStepCountingAvailable(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_isStepCountingAvailable1); + } + + static bool isDistanceAvailable(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_isDistanceAvailable1); + } + + static bool isFloorCountingAvailable(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_isFloorCountingAvailable1); + } + + static bool isPaceAvailable(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_isPaceAvailable1); + } + + static bool isCadenceAvailable(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_isCadenceAvailable1); + } + + static bool isPedometerEventTrackingAvailable(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_isPedometerEventTrackingAvailable1); + } + + static int authorizationStatus(PedometerBindings _lib) { + return _lib._objc_msgSend_889( + _lib._class_CMPedometer1, _lib._sel_authorizationStatus1); + } + + void queryPedometerDataFromDate_toDate_withHandler_( + NSDate? start, NSDate? end, ObjCBlock49 handler) { + return _lib._objc_msgSend_890( + _id, + _lib._sel_queryPedometerDataFromDate_toDate_withHandler_1, + start?._id ?? ffi.nullptr, + end?._id ?? ffi.nullptr, + handler._id); + } + + void startPedometerUpdatesFromDate_withHandler_( + NSDate? start, ObjCBlock49 handler) { + return _lib._objc_msgSend_891( + _id, + _lib._sel_startPedometerUpdatesFromDate_withHandler_1, + start?._id ?? ffi.nullptr, + handler._id); + } + + void stopPedometerUpdates() { + return _lib._objc_msgSend_1(_id, _lib._sel_stopPedometerUpdates1); + } + + void startPedometerEventUpdatesWithHandler_(ObjCBlock50 handler) { + return _lib._objc_msgSend_893( + _id, _lib._sel_startPedometerEventUpdatesWithHandler_1, handler._id); + } + + void stopPedometerEventUpdates() { + return _lib._objc_msgSend_1(_id, _lib._sel_stopPedometerEventUpdates1); + } + + static CMPedometer new1(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2(_lib._class_CMPedometer1, _lib._sel_new1); + return CMPedometer._(_ret, _lib, retain: false, release: true); + } + + static CMPedometer alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_CMPedometer1, _lib._sel_alloc1); + return CMPedometer._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_CMPedometer1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_CMPedometer1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometer1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_CMPedometer1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_CMPedometer1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_CMPedometer1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71( + _lib._class_CMPedometer1, _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_CMPedometer1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class CMAuthorizationStatus { + static const int CMAuthorizationStatusNotDetermined = 0; + static const int CMAuthorizationStatusRestricted = 1; + static const int CMAuthorizationStatusDenied = 2; + static const int CMAuthorizationStatusAuthorized = 3; +} + +void _ObjCBlock49_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock49_closureRegistry = {}; +int _ObjCBlock49_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock49_registerClosure(Function fn) { + final id = ++_ObjCBlock49_closureRegistryIndex; + _ObjCBlock49_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock49_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock49_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock49 extends _ObjCBlockBase { + ObjCBlock49._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock49.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock49_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock49.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock49_closureTrampoline) + .cast(), + _ObjCBlock49_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class CMPedometerData extends NSObject { + CMPedometerData._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [CMPedometerData] that points to the same underlying object as [other]. + static CMPedometerData castFrom(T other) { + return CMPedometerData._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [CMPedometerData] that wraps the given raw object pointer. + static CMPedometerData castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return CMPedometerData._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [CMPedometerData]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_CMPedometerData1); + } + + NSDate? get startDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_startDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + NSDate? get endDate { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_endDate1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get numberOfSteps { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_numberOfSteps1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get distance { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_distance1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get floorsAscended { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_floorsAscended1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get floorsDescended { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_floorsDescended1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get currentPace { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_currentPace1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get currentCadence { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_currentCadence1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + NSNumber? get averageActivePace { + final _ret = _lib._objc_msgSend_156(_id, _lib._sel_averageActivePace1); + return _ret.address == 0 + ? null + : NSNumber._(_ret, _lib, retain: true, release: true); + } + + static CMPedometerData new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_CMPedometerData1, _lib._sel_new1); + return CMPedometerData._(_ret, _lib, retain: false, release: true); + } + + static CMPedometerData alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_CMPedometerData1, _lib._sel_alloc1); + return CMPedometerData._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_CMPedometerData1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_CMPedometerData1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_CMPedometerData1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometerData1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_CMPedometerData1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_CMPedometerData1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_CMPedometerData1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_CMPedometerData1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_CMPedometerData1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +void _ObjCBlock50_fnPtrTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return block.ref.target + .cast< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>()(arg0, arg1); +} + +final _ObjCBlock50_closureRegistry = {}; +int _ObjCBlock50_closureRegistryIndex = 0; +ffi.Pointer _ObjCBlock50_registerClosure(Function fn) { + final id = ++_ObjCBlock50_closureRegistryIndex; + _ObjCBlock50_closureRegistry[id] = fn; + return ffi.Pointer.fromAddress(id); +} + +void _ObjCBlock50_closureTrampoline(ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, ffi.Pointer arg1) { + return _ObjCBlock50_closureRegistry[block.ref.target.address]!(arg0, arg1); +} + +class ObjCBlock50 extends _ObjCBlockBase { + ObjCBlock50._(ffi.Pointer<_ObjCBlock> id, PedometerBindings lib) + : super._(id, lib, retain: false, release: true); + + /// Creates a block from a C function pointer. + ObjCBlock50.fromFunctionPointer( + PedometerBindings lib, + ffi.Pointer< + ffi.NativeFunction< + ffi.Void Function(ffi.Pointer arg0, + ffi.Pointer arg1)>> + ptr) + : this._( + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock50_fnPtrTrampoline) + .cast(), + ptr.cast()), + lib); + static ffi.Pointer? _cFuncTrampoline; + + /// Creates a block from a Dart function. + ObjCBlock50.fromFunction( + PedometerBindings lib, + void Function(ffi.Pointer arg0, ffi.Pointer arg1) + fn) + : this._( + lib._newBlock1( + _dartFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock50_closureTrampoline) + .cast(), + _ObjCBlock50_registerClosure(fn)), + lib); + static ffi.Pointer? _dartFuncTrampoline; + void call(ffi.Pointer arg0, ffi.Pointer arg1) { + return _id.ref.invoke + .cast< + ffi.NativeFunction< + ffi.Void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>>() + .asFunction< + void Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>()(_id, arg0, arg1); + } + + ffi.Pointer<_ObjCBlock> get pointer => _id; +} + +class CMPedometerEvent extends NSObject { + CMPedometerEvent._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [CMPedometerEvent] that points to the same underlying object as [other]. + static CMPedometerEvent castFrom(T other) { + return CMPedometerEvent._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [CMPedometerEvent] that wraps the given raw object pointer. + static CMPedometerEvent castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return CMPedometerEvent._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [CMPedometerEvent]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_CMPedometerEvent1); + } + + NSDate? get date { + final _ret = _lib._objc_msgSend_154(_id, _lib._sel_date1); + return _ret.address == 0 + ? null + : NSDate._(_ret, _lib, retain: true, release: true); + } + + int get type { + return _lib._objc_msgSend_892(_id, _lib._sel_type1); + } + + static CMPedometerEvent new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_CMPedometerEvent1, _lib._sel_new1); + return CMPedometerEvent._(_ret, _lib, retain: false, release: true); + } + + static CMPedometerEvent alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_CMPedometerEvent1, _lib._sel_alloc1); + return CMPedometerEvent._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_CMPedometerEvent1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_CMPedometerEvent1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_CMPedometerEvent1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_CMPedometerEvent1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_CMPedometerEvent1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_CMPedometerEvent1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_CMPedometerEvent1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_CMPedometerEvent1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_CMPedometerEvent1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} + +abstract class CMPedometerEventType { + static const int CMPedometerEventTypePause = 0; + static const int CMPedometerEventTypeResume = 1; +} + +class PedometerHelper extends NSObject { + PedometerHelper._(ffi.Pointer id, PedometerBindings lib, + {bool retain = false, bool release = false}) + : super._(id, lib, retain: retain, release: release); + + /// Returns a [PedometerHelper] that points to the same underlying object as [other]. + static PedometerHelper castFrom(T other) { + return PedometerHelper._(other._id, other._lib, + retain: true, release: true); + } + + /// Returns a [PedometerHelper] that wraps the given raw object pointer. + static PedometerHelper castFromPointer( + PedometerBindings lib, ffi.Pointer other, + {bool retain = false, bool release = false}) { + return PedometerHelper._(other, lib, retain: retain, release: release); + } + + /// Returns whether [obj] is an instance of [PedometerHelper]. + static bool isInstance(_ObjCWrapper obj) { + return obj._lib._objc_msgSend_0(obj._id, obj._lib._sel_isKindOfClass_1, + obj._lib._class_PedometerHelper1); + } + + static void startPedometerWithPort_pedometer_start_end_( + PedometerBindings _lib, + int sendPort, + CMPedometer? pedometer, + NSDate? start, + NSDate? end) { + return _lib._objc_msgSend_894( + _lib._class_PedometerHelper1, + _lib._sel_startPedometerWithPort_pedometer_start_end_1, + sendPort, + pedometer?._id ?? ffi.nullptr, + start?._id ?? ffi.nullptr, + end?._id ?? ffi.nullptr); + } + + static PedometerHelper new1(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_PedometerHelper1, _lib._sel_new1); + return PedometerHelper._(_ret, _lib, retain: false, release: true); + } + + static PedometerHelper alloc(PedometerBindings _lib) { + final _ret = + _lib._objc_msgSend_2(_lib._class_PedometerHelper1, _lib._sel_alloc1); + return PedometerHelper._(_ret, _lib, retain: false, release: true); + } + + static void cancelPreviousPerformRequestsWithTarget_selector_object_( + PedometerBindings _lib, + NSObject aTarget, + ffi.Pointer aSelector, + NSObject anArgument) { + return _lib._objc_msgSend_14( + _lib._class_PedometerHelper1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_selector_object_1, + aTarget._id, + aSelector, + anArgument._id); + } + + static void cancelPreviousPerformRequestsWithTarget_( + PedometerBindings _lib, NSObject aTarget) { + return _lib._objc_msgSend_15(_lib._class_PedometerHelper1, + _lib._sel_cancelPreviousPerformRequestsWithTarget_1, aTarget._id); + } + + static bool getAccessInstanceVariablesDirectly(PedometerBindings _lib) { + return _lib._objc_msgSend_12(_lib._class_PedometerHelper1, + _lib._sel_accessInstanceVariablesDirectly1); + } + + static bool useStoredAccessor(PedometerBindings _lib) { + return _lib._objc_msgSend_12( + _lib._class_PedometerHelper1, _lib._sel_useStoredAccessor1); + } + + static NSSet keyPathsForValuesAffectingValueForKey_( + PedometerBindings _lib, NSString? key) { + final _ret = _lib._objc_msgSend_50( + _lib._class_PedometerHelper1, + _lib._sel_keyPathsForValuesAffectingValueForKey_1, + key?._id ?? ffi.nullptr); + return NSSet._(_ret, _lib, retain: true, release: true); + } + + static bool automaticallyNotifiesObserversForKey_( + PedometerBindings _lib, NSString? key) { + return _lib._objc_msgSend_51( + _lib._class_PedometerHelper1, + _lib._sel_automaticallyNotifiesObserversForKey_1, + key?._id ?? ffi.nullptr); + } + + static void setKeys_triggerChangeNotificationsForDependentKey_( + PedometerBindings _lib, NSArray? keys, NSString? dependentKey) { + return _lib._objc_msgSend_74( + _lib._class_PedometerHelper1, + _lib._sel_setKeys_triggerChangeNotificationsForDependentKey_1, + keys?._id ?? ffi.nullptr, + dependentKey?._id ?? ffi.nullptr); + } + + static NSArray classFallbacksForKeyedArchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_71(_lib._class_PedometerHelper1, + _lib._sel_classFallbacksForKeyedArchiver1); + return NSArray._(_ret, _lib, retain: true, release: true); + } + + static NSObject classForKeyedUnarchiver(PedometerBindings _lib) { + final _ret = _lib._objc_msgSend_2( + _lib._class_PedometerHelper1, _lib._sel_classForKeyedUnarchiver1); + return NSObject._(_ret, _lib, retain: true, release: true); + } +} diff --git a/experimental/pedometer/pubspec.yaml b/experimental/pedometer/pubspec.yaml new file mode 100644 index 000000000..bff084378 --- /dev/null +++ b/experimental/pedometer/pubspec.yaml @@ -0,0 +1,83 @@ +name: pedometer +description: A new Flutter FFI plugin project. +version: 0.0.1 +publish_to: "none" + +environment: + sdk: '>=2.19.0-389.0.dev <3.0.0' + flutter: ">=2.11.0" + +dependencies: + flutter: + sdk: flutter + plugin_platform_interface: ^2.0.2 + jni: + git: + url: https://github.com/dart-lang/jnigen + ref: suspend-fun + path: ./jni + ffi: ^2.0.1 + +dev_dependencies: + ffigen: ^7.2.1 + jnigen: + git: + url: https://github.com/dart-lang/jnigen + ref: suspend-fun + path: ./jnigen + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + # This section identifies this Flutter project as a plugin project. + # The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.) + # which should be registered in the plugin registry. This is required for + # using method channels. + # The Android 'package' specifies package in which the registered class is. + # This is required for using method channels on Android. + # The 'ffiPlugin' specifies that native code should be built and bundled. + # This is required for using `dart:ffi`. + # All these are used by the tooling to maintain consistency when + # adding or updating assets for this project. + # + # Please refer to README.md for a detailed explanation. + plugin: + platforms: + ios: + ffiPlugin: true + + # To add assets to your plugin package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # To add custom fonts to your plugin package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/experimental/pedometer/src/dart-sdk/include/dart_api.h b/experimental/pedometer/src/dart-sdk/include/dart_api.h new file mode 100644 index 000000000..abc029183 --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/dart_api.h @@ -0,0 +1,3909 @@ +/* + * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNTIME_INCLUDE_DART_API_H_ +#define RUNTIME_INCLUDE_DART_API_H_ + +/** \mainpage Dart Embedding API Reference + * + * This reference describes the Dart Embedding API, which is used to embed the + * Dart Virtual Machine within C/C++ applications. + * + * This reference is generated from the header include/dart_api.h. + */ + +/* __STDC_FORMAT_MACROS has to be defined before including to + * enable platform independent printf format specifiers. */ +#ifndef __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS +#endif + +#include +#include +#include + +#ifdef __cplusplus +#define DART_EXTERN_C extern "C" +#else +#define DART_EXTERN_C extern +#endif + +#if defined(__CYGWIN__) +#error Tool chain and platform not supported. +#elif defined(_WIN32) +#if defined(DART_SHARED_LIB) +#define DART_EXPORT DART_EXTERN_C __declspec(dllexport) +#else +#define DART_EXPORT DART_EXTERN_C +#endif +#else +#if __GNUC__ >= 4 +#if defined(DART_SHARED_LIB) +#define DART_EXPORT \ + DART_EXTERN_C __attribute__((visibility("default"))) __attribute((used)) +#else +#define DART_EXPORT DART_EXTERN_C +#endif +#else +#error Tool chain not supported. +#endif +#endif + +#if __GNUC__ +#define DART_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#elif _MSC_VER +#define DART_WARN_UNUSED_RESULT _Check_return_ +#else +#define DART_WARN_UNUSED_RESULT +#endif + +/* + * ======= + * Handles + * ======= + */ + +/** + * An isolate is the unit of concurrency in Dart. Each isolate has + * its own memory and thread of control. No state is shared between + * isolates. Instead, isolates communicate by message passing. + * + * Each thread keeps track of its current isolate, which is the + * isolate which is ready to execute on the current thread. The + * current isolate may be NULL, in which case no isolate is ready to + * execute. Most of the Dart apis require there to be a current + * isolate in order to function without error. The current isolate is + * set by any call to Dart_CreateIsolateGroup or Dart_EnterIsolate. + */ +typedef struct _Dart_Isolate* Dart_Isolate; +typedef struct _Dart_IsolateGroup* Dart_IsolateGroup; + +/** + * An object reference managed by the Dart VM garbage collector. + * + * Because the garbage collector may move objects, it is unsafe to + * refer to objects directly. Instead, we refer to objects through + * handles, which are known to the garbage collector and updated + * automatically when the object is moved. Handles should be passed + * by value (except in cases like out-parameters) and should never be + * allocated on the heap. + * + * Most functions in the Dart Embedding API return a handle. When a + * function completes normally, this will be a valid handle to an + * object in the Dart VM heap. This handle may represent the result of + * the operation or it may be a special valid handle used merely to + * indicate successful completion. Note that a valid handle may in + * some cases refer to the null object. + * + * --- Error handles --- + * + * When a function encounters a problem that prevents it from + * completing normally, it returns an error handle (See Dart_IsError). + * An error handle has an associated error message that gives more + * details about the problem (See Dart_GetError). + * + * There are four kinds of error handles that can be produced, + * depending on what goes wrong: + * + * - Api error handles are produced when an api function is misused. + * This happens when a Dart embedding api function is called with + * invalid arguments or in an invalid context. + * + * - Unhandled exception error handles are produced when, during the + * execution of Dart code, an exception is thrown but not caught. + * Prototypically this would occur during a call to Dart_Invoke, but + * it can occur in any function which triggers the execution of Dart + * code (for example, Dart_ToString). + * + * An unhandled exception error provides access to an exception and + * stacktrace via the functions Dart_ErrorGetException and + * Dart_ErrorGetStackTrace. + * + * - Compilation error handles are produced when, during the execution + * of Dart code, a compile-time error occurs. As above, this can + * occur in any function which triggers the execution of Dart code. + * + * - Fatal error handles are produced when the system wants to shut + * down the current isolate. + * + * --- Propagating errors --- + * + * When an error handle is returned from the top level invocation of + * Dart code in a program, the embedder must handle the error as they + * see fit. Often, the embedder will print the error message produced + * by Dart_Error and exit the program. + * + * When an error is returned while in the body of a native function, + * it can be propagated up the call stack by calling + * Dart_PropagateError, Dart_SetReturnValue, or Dart_ThrowException. + * Errors should be propagated unless there is a specific reason not + * to. If an error is not propagated then it is ignored. For + * example, if an unhandled exception error is ignored, that + * effectively "catches" the unhandled exception. Fatal errors must + * always be propagated. + * + * When an error is propagated, any current scopes created by + * Dart_EnterScope will be exited. + * + * Using Dart_SetReturnValue to propagate an exception is somewhat + * more convenient than using Dart_PropagateError, and should be + * preferred for reasons discussed below. + * + * Dart_PropagateError and Dart_ThrowException do not return. Instead + * they transfer control non-locally using a setjmp-like mechanism. + * This can be inconvenient if you have resources that you need to + * clean up before propagating the error. + * + * When relying on Dart_PropagateError, we often return error handles + * rather than propagating them from helper functions. Consider the + * following contrived example: + * + * 1 Dart_Handle isLongStringHelper(Dart_Handle arg) { + * 2 intptr_t* length = 0; + * 3 result = Dart_StringLength(arg, &length); + * 4 if (Dart_IsError(result)) { + * 5 return result; + * 6 } + * 7 return Dart_NewBoolean(length > 100); + * 8 } + * 9 + * 10 void NativeFunction_isLongString(Dart_NativeArguments args) { + * 11 Dart_EnterScope(); + * 12 AllocateMyResource(); + * 13 Dart_Handle arg = Dart_GetNativeArgument(args, 0); + * 14 Dart_Handle result = isLongStringHelper(arg); + * 15 if (Dart_IsError(result)) { + * 16 FreeMyResource(); + * 17 Dart_PropagateError(result); + * 18 abort(); // will not reach here + * 19 } + * 20 Dart_SetReturnValue(result); + * 21 FreeMyResource(); + * 22 Dart_ExitScope(); + * 23 } + * + * In this example, we have a native function which calls a helper + * function to do its work. On line 5, the helper function could call + * Dart_PropagateError, but that would not give the native function a + * chance to call FreeMyResource(), causing a leak. Instead, the + * helper function returns the error handle to the caller, giving the + * caller a chance to clean up before propagating the error handle. + * + * When an error is propagated by calling Dart_SetReturnValue, the + * native function will be allowed to complete normally and then the + * exception will be propagated only once the native call + * returns. This can be convenient, as it allows the C code to clean + * up normally. + * + * The example can be written more simply using Dart_SetReturnValue to + * propagate the error. + * + * 1 Dart_Handle isLongStringHelper(Dart_Handle arg) { + * 2 intptr_t* length = 0; + * 3 result = Dart_StringLength(arg, &length); + * 4 if (Dart_IsError(result)) { + * 5 return result + * 6 } + * 7 return Dart_NewBoolean(length > 100); + * 8 } + * 9 + * 10 void NativeFunction_isLongString(Dart_NativeArguments args) { + * 11 Dart_EnterScope(); + * 12 AllocateMyResource(); + * 13 Dart_Handle arg = Dart_GetNativeArgument(args, 0); + * 14 Dart_SetReturnValue(isLongStringHelper(arg)); + * 15 FreeMyResource(); + * 16 Dart_ExitScope(); + * 17 } + * + * In this example, the call to Dart_SetReturnValue on line 14 will + * either return the normal return value or the error (potentially + * generated on line 3). The call to FreeMyResource on line 15 will + * execute in either case. + * + * --- Local and persistent handles --- + * + * Local handles are allocated within the current scope (see + * Dart_EnterScope) and go away when the current scope exits. Unless + * otherwise indicated, callers should assume that all functions in + * the Dart embedding api return local handles. + * + * Persistent handles are allocated within the current isolate. They + * can be used to store objects across scopes. Persistent handles have + * the lifetime of the current isolate unless they are explicitly + * deallocated (see Dart_DeletePersistentHandle). + * The type Dart_Handle represents a handle (both local and persistent). + * The type Dart_PersistentHandle is a Dart_Handle and it is used to + * document that a persistent handle is expected as a parameter to a call + * or the return value from a call is a persistent handle. + * + * FinalizableHandles are persistent handles which are auto deleted when + * the object is garbage collected. It is never safe to use these handles + * unless you know the object is still reachable. + * + * WeakPersistentHandles are persistent handles which are automatically set + * to point Dart_Null when the object is garbage collected. They are not auto + * deleted, so it is safe to use them after the object has become unreachable. + */ +typedef struct _Dart_Handle* Dart_Handle; +typedef Dart_Handle Dart_PersistentHandle; +typedef struct _Dart_WeakPersistentHandle* Dart_WeakPersistentHandle; +typedef struct _Dart_FinalizableHandle* Dart_FinalizableHandle; +// These structs are versioned by DART_API_DL_MAJOR_VERSION, bump the +// version when changing this struct. + +typedef void (*Dart_HandleFinalizer)(void* isolate_callback_data, void* peer); + +/** + * Is this an error handle? + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsError(Dart_Handle handle); + +/** + * Is this an api error handle? + * + * Api error handles are produced when an api function is misused. + * This happens when a Dart embedding api function is called with + * invalid arguments or in an invalid context. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsApiError(Dart_Handle handle); + +/** + * Is this an unhandled exception error handle? + * + * Unhandled exception error handles are produced when, during the + * execution of Dart code, an exception is thrown but not caught. + * This can occur in any function which triggers the execution of Dart + * code. + * + * See Dart_ErrorGetException and Dart_ErrorGetStackTrace. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsUnhandledExceptionError(Dart_Handle handle); + +/** + * Is this a compilation error handle? + * + * Compilation error handles are produced when, during the execution + * of Dart code, a compile-time error occurs. This can occur in any + * function which triggers the execution of Dart code. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsCompilationError(Dart_Handle handle); + +/** + * Is this a fatal error handle? + * + * Fatal error handles are produced when the system wants to shut down + * the current isolate. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsFatalError(Dart_Handle handle); + +/** + * Gets the error message from an error handle. + * + * Requires there to be a current isolate. + * + * \return A C string containing an error message if the handle is + * error. An empty C string ("") if the handle is valid. This C + * String is scope allocated and is only valid until the next call + * to Dart_ExitScope. +*/ +DART_EXPORT const char* Dart_GetError(Dart_Handle handle); + +/** + * Is this an error handle for an unhandled exception? + */ +DART_EXPORT bool Dart_ErrorHasException(Dart_Handle handle); + +/** + * Gets the exception Object from an unhandled exception error handle. + */ +DART_EXPORT Dart_Handle Dart_ErrorGetException(Dart_Handle handle); + +/** + * Gets the stack trace Object from an unhandled exception error handle. + */ +DART_EXPORT Dart_Handle Dart_ErrorGetStackTrace(Dart_Handle handle); + +/** + * Produces an api error handle with the provided error message. + * + * Requires there to be a current isolate. + * + * \param error the error message. + */ +DART_EXPORT Dart_Handle Dart_NewApiError(const char* error); +DART_EXPORT Dart_Handle Dart_NewCompilationError(const char* error); + +/** + * Produces a new unhandled exception error handle. + * + * Requires there to be a current isolate. + * + * \param exception An instance of a Dart object to be thrown or + * an ApiError or CompilationError handle. + * When an ApiError or CompilationError handle is passed in + * a string object of the error message is created and it becomes + * the Dart object to be thrown. + */ +DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception); + +/** + * Propagates an error. + * + * If the provided handle is an unhandled exception error, this + * function will cause the unhandled exception to be rethrown. This + * will proceed in the standard way, walking up Dart frames until an + * appropriate 'catch' block is found, executing 'finally' blocks, + * etc. + * + * If the error is not an unhandled exception error, we will unwind + * the stack to the next C frame. Intervening Dart frames will be + * discarded; specifically, 'finally' blocks will not execute. This + * is the standard way that compilation errors (and the like) are + * handled by the Dart runtime. + * + * In either case, when an error is propagated any current scopes + * created by Dart_EnterScope will be exited. + * + * See the additional discussion under "Propagating Errors" at the + * beginning of this file. + * + * \param An error handle (See Dart_IsError) + * + * \return On success, this function does not return. On failure, the + * process is terminated. + */ +DART_EXPORT void Dart_PropagateError(Dart_Handle handle); + +/** + * Converts an object to a string. + * + * May generate an unhandled exception error. + * + * \return The converted string if no error occurs during + * the conversion. If an error does occur, an error handle is + * returned. + */ +DART_EXPORT Dart_Handle Dart_ToString(Dart_Handle object); + +/** + * Checks to see if two handles refer to identically equal objects. + * + * If both handles refer to instances, this is equivalent to using the top-level + * function identical() from dart:core. Otherwise, returns whether the two + * argument handles refer to the same object. + * + * \param obj1 An object to be compared. + * \param obj2 An object to be compared. + * + * \return True if the objects are identically equal. False otherwise. + */ +DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2); + +/** + * Allocates a handle in the current scope from a persistent handle. + */ +DART_EXPORT Dart_Handle Dart_HandleFromPersistent(Dart_PersistentHandle object); + +/** + * Allocates a handle in the current scope from a weak persistent handle. + * + * This will be a handle to Dart_Null if the object has been garbage collected. + */ +DART_EXPORT Dart_Handle +Dart_HandleFromWeakPersistent(Dart_WeakPersistentHandle object); + +/** + * Allocates a persistent handle for an object. + * + * This handle has the lifetime of the current isolate unless it is + * explicitly deallocated by calling Dart_DeletePersistentHandle. + * + * Requires there to be a current isolate. + */ +DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object); + +/** + * Assign value of local handle to a persistent handle. + * + * Requires there to be a current isolate. + * + * \param obj1 A persistent handle whose value needs to be set. + * \param obj2 An object whose value needs to be set to the persistent handle. + * + * \return Success if the persistent handle was set + * Otherwise, returns an error. + */ +DART_EXPORT void Dart_SetPersistentHandle(Dart_PersistentHandle obj1, + Dart_Handle obj2); + +/** + * Deallocates a persistent handle. + * + * Requires there to be a current isolate group. + */ +DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object); + +/** + * Allocates a weak persistent handle for an object. + * + * This handle has the lifetime of the current isolate. The handle can also be + * explicitly deallocated by calling Dart_DeleteWeakPersistentHandle. + * + * If the object becomes unreachable the callback is invoked with the peer as + * argument. The callback can be executed on any thread, will have a current + * isolate group, but will not have a current isolate. The callback can only + * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. This + * gives the embedder the ability to cleanup data associated with the object. + * The handle will point to the Dart_Null object after the finalizer has been + * run. It is illegal to call into the VM with any other Dart_* functions from + * the callback. If the handle is deleted before the object becomes + * unreachable, the callback is never invoked. + * + * Requires there to be a current isolate. + * + * \param object An object with identity. + * \param peer A pointer to a native object or NULL. This value is + * provided to callback when it is invoked. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A function pointer that will be invoked sometime + * after the object is garbage collected, unless the handle has been deleted. + * A valid callback needs to be specified it cannot be NULL. + * + * \return The weak persistent handle or NULL. NULL is returned in case of bad + * parameters. + */ +DART_EXPORT Dart_WeakPersistentHandle +Dart_NewWeakPersistentHandle(Dart_Handle object, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Deletes the given weak persistent [object] handle. + * + * Requires there to be a current isolate group. + */ +DART_EXPORT void Dart_DeleteWeakPersistentHandle( + Dart_WeakPersistentHandle object); + +/** + * Updates the external memory size for the given weak persistent handle. + * + * May trigger garbage collection. + */ +DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object, + intptr_t external_allocation_size); + +/** + * Allocates a finalizable handle for an object. + * + * This handle has the lifetime of the current isolate group unless the object + * pointed to by the handle is garbage collected, in this case the VM + * automatically deletes the handle after invoking the callback associated + * with the handle. The handle can also be explicitly deallocated by + * calling Dart_DeleteFinalizableHandle. + * + * If the object becomes unreachable the callback is invoked with the + * the peer as argument. The callback can be executed on any thread, will have + * an isolate group, but will not have a current isolate. The callback can only + * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. + * This gives the embedder the ability to cleanup data associated with the + * object and clear out any cached references to the handle. All references to + * this handle after the callback will be invalid. It is illegal to call into + * the VM with any other Dart_* functions from the callback. If the handle is + * deleted before the object becomes unreachable, the callback is never + * invoked. + * + * Requires there to be a current isolate. + * + * \param object An object with identity. + * \param peer A pointer to a native object or NULL. This value is + * provided to callback when it is invoked. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A function pointer that will be invoked sometime + * after the object is garbage collected, unless the handle has been deleted. + * A valid callback needs to be specified it cannot be NULL. + * + * \return The finalizable handle or NULL. NULL is returned in case of bad + * parameters. + */ +DART_EXPORT Dart_FinalizableHandle +Dart_NewFinalizableHandle(Dart_Handle object, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Deletes the given finalizable [object] handle. + * + * The caller has to provide the actual Dart object the handle was created from + * to prove the object (and therefore the finalizable handle) is still alive. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_DeleteFinalizableHandle(Dart_FinalizableHandle object, + Dart_Handle strong_ref_to_object); + +/** + * Updates the external memory size for the given finalizable handle. + * + * The caller has to provide the actual Dart object the handle was created from + * to prove the object (and therefore the finalizable handle) is still alive. + * + * May trigger garbage collection. + */ +DART_EXPORT void Dart_UpdateFinalizableExternalSize( + Dart_FinalizableHandle object, + Dart_Handle strong_ref_to_object, + intptr_t external_allocation_size); + +/* + * ========================== + * Initialization and Globals + * ========================== + */ + +/** + * Gets the version string for the Dart VM. + * + * The version of the Dart VM can be accessed without initializing the VM. + * + * \return The version string for the embedded Dart VM. + */ +DART_EXPORT const char* Dart_VersionString(); + +/** + * Isolate specific flags are set when creating a new isolate using the + * Dart_IsolateFlags structure. + * + * Current version of flags is encoded in a 32-bit integer with 16 bits used + * for each part. + */ + +#define DART_FLAGS_CURRENT_VERSION (0x0000000c) + +typedef struct { + int32_t version; + bool enable_asserts; + bool use_field_guards; + bool use_osr; + bool obfuscate; + bool load_vmservice_library; + bool copy_parent_code; + bool null_safety; + bool is_system_isolate; +} Dart_IsolateFlags; + +/** + * Initialize Dart_IsolateFlags with correct version and default values. + */ +DART_EXPORT void Dart_IsolateFlagsInitialize(Dart_IsolateFlags* flags); + +/** + * An isolate creation and initialization callback function. + * + * This callback, provided by the embedder, is called when the VM + * needs to create an isolate. The callback should create an isolate + * by calling Dart_CreateIsolateGroup and load any scripts required for + * execution. + * + * This callback may be called on a different thread than the one + * running the parent isolate. + * + * When the function returns NULL, it is the responsibility of this + * function to ensure that Dart_ShutdownIsolate has been called if + * required (for example, if the isolate was created successfully by + * Dart_CreateIsolateGroup() but the root library fails to load + * successfully, then the function should call Dart_ShutdownIsolate + * before returning). + * + * When the function returns NULL, the function should set *error to + * a malloc-allocated buffer containing a useful error message. The + * caller of this function (the VM) will make sure that the buffer is + * freed. + * + * \param script_uri The uri of the main source file or snapshot to load. + * Either the URI of the parent isolate set in Dart_CreateIsolateGroup for + * Isolate.spawn, or the argument to Isolate.spawnUri canonicalized by the + * library tag handler of the parent isolate. + * The callback is responsible for loading the program by a call to + * Dart_LoadScriptFromKernel. + * \param main The name of the main entry point this isolate will + * eventually run. This is provided for advisory purposes only to + * improve debugging messages. The main function is not invoked by + * this function. + * \param package_root Ignored. + * \param package_config Uri of the package configuration file (either in format + * of .packages or .dart_tool/package_config.json) for this isolate + * to resolve package imports against. If this parameter is not passed the + * package resolution of the parent isolate should be used. + * \param flags Default flags for this isolate being spawned. Either inherited + * from the spawning isolate or passed as parameters when spawning the + * isolate from Dart code. + * \param isolate_data The isolate data which was passed to the + * parent isolate when it was created by calling Dart_CreateIsolateGroup(). + * \param error A structure into which the embedder can place a + * C string containing an error message in the case of failures. + * + * \return The embedder returns NULL if the creation and + * initialization was not successful and the isolate if successful. + */ +typedef Dart_Isolate (*Dart_IsolateGroupCreateCallback)( + const char* script_uri, + const char* main, + const char* package_root, + const char* package_config, + Dart_IsolateFlags* flags, + void* isolate_data, + char** error); + +/** + * An isolate initialization callback function. + * + * This callback, provided by the embedder, is called when the VM has created an + * isolate within an existing isolate group (i.e. from the same source as an + * existing isolate). + * + * The callback should setup native resolvers and might want to set a custom + * message handler via [Dart_SetMessageNotifyCallback] and mark the isolate as + * runnable. + * + * This callback may be called on a different thread than the one + * running the parent isolate. + * + * When the function returns `false`, it is the responsibility of this + * function to ensure that `Dart_ShutdownIsolate` has been called. + * + * When the function returns `false`, the function should set *error to + * a malloc-allocated buffer containing a useful error message. The + * caller of this function (the VM) will make sure that the buffer is + * freed. + * + * \param child_isolate_data The callback data to associate with the new + * child isolate. + * \param error A structure into which the embedder can place a + * C string containing an error message in the case the initialization fails. + * + * \return The embedder returns true if the initialization was successful and + * false otherwise (in which case the VM will terminate the isolate). + */ +typedef bool (*Dart_InitializeIsolateCallback)(void** child_isolate_data, + char** error); + +/** + * An isolate unhandled exception callback function. + * + * This callback has been DEPRECATED. + */ +typedef void (*Dart_IsolateUnhandledExceptionCallback)(Dart_Handle error); + +/** + * An isolate shutdown callback function. + * + * This callback, provided by the embedder, is called before the vm + * shuts down an isolate. The isolate being shutdown will be the current + * isolate. It is safe to run Dart code. + * + * This function should be used to dispose of native resources that + * are allocated to an isolate in order to avoid leaks. + * + * \param isolate_group_data The same callback data which was passed to the + * isolate group when it was created. + * \param isolate_data The same callback data which was passed to the isolate + * when it was created. + */ +typedef void (*Dart_IsolateShutdownCallback)(void* isolate_group_data, + void* isolate_data); + +/** + * An isolate cleanup callback function. + * + * This callback, provided by the embedder, is called after the vm + * shuts down an isolate. There will be no current isolate and it is *not* + * safe to run Dart code. + * + * This function should be used to dispose of native resources that + * are allocated to an isolate in order to avoid leaks. + * + * \param isolate_group_data The same callback data which was passed to the + * isolate group when it was created. + * \param isolate_data The same callback data which was passed to the isolate + * when it was created. + */ +typedef void (*Dart_IsolateCleanupCallback)(void* isolate_group_data, + void* isolate_data); + +/** + * An isolate group cleanup callback function. + * + * This callback, provided by the embedder, is called after the vm + * shuts down an isolate group. + * + * This function should be used to dispose of native resources that + * are allocated to an isolate in order to avoid leaks. + * + * \param isolate_group_data The same callback data which was passed to the + * isolate group when it was created. + * + */ +typedef void (*Dart_IsolateGroupCleanupCallback)(void* isolate_group_data); + +/** + * A thread death callback function. + * This callback, provided by the embedder, is called before a thread in the + * vm thread pool exits. + * This function could be used to dispose of native resources that + * are associated and attached to the thread, in order to avoid leaks. + */ +typedef void (*Dart_ThreadExitCallback)(); + +/** + * Callbacks provided by the embedder for file operations. If the + * embedder does not allow file operations these callbacks can be + * NULL. + * + * Dart_FileOpenCallback - opens a file for reading or writing. + * \param name The name of the file to open. + * \param write A boolean variable which indicates if the file is to + * opened for writing. If there is an existing file it needs to truncated. + * + * Dart_FileReadCallback - Read contents of file. + * \param data Buffer allocated in the callback into which the contents + * of the file are read into. It is the responsibility of the caller to + * free this buffer. + * \param file_length A variable into which the length of the file is returned. + * In the case of an error this value would be -1. + * \param stream Handle to the opened file. + * + * Dart_FileWriteCallback - Write data into file. + * \param data Buffer which needs to be written into the file. + * \param length Length of the buffer. + * \param stream Handle to the opened file. + * + * Dart_FileCloseCallback - Closes the opened file. + * \param stream Handle to the opened file. + * + */ +typedef void* (*Dart_FileOpenCallback)(const char* name, bool write); + +typedef void (*Dart_FileReadCallback)(uint8_t** data, + intptr_t* file_length, + void* stream); + +typedef void (*Dart_FileWriteCallback)(const void* data, + intptr_t length, + void* stream); + +typedef void (*Dart_FileCloseCallback)(void* stream); + +typedef bool (*Dart_EntropySource)(uint8_t* buffer, intptr_t length); + +/** + * Callback provided by the embedder that is used by the vmservice isolate + * to request the asset archive. The asset archive must be an uncompressed tar + * archive that is stored in a Uint8List. + * + * If the embedder has no vmservice isolate assets, the callback can be NULL. + * + * \return The embedder must return a handle to a Uint8List containing an + * uncompressed tar archive or null. + */ +typedef Dart_Handle (*Dart_GetVMServiceAssetsArchive)(); + +/** + * The current version of the Dart_InitializeFlags. Should be incremented every + * time Dart_InitializeFlags changes in a binary incompatible way. + */ +#define DART_INITIALIZE_PARAMS_CURRENT_VERSION (0x00000004) + +/** Forward declaration */ +struct Dart_CodeObserver; + +/** + * Callback provided by the embedder that is used by the VM to notify on code + * object creation, *before* it is invoked the first time. + * This is useful for embedders wanting to e.g. keep track of PCs beyond + * the lifetime of the garbage collected code objects. + * Note that an address range may be used by more than one code object over the + * lifecycle of a process. Clients of this function should record timestamps for + * these compilation events and when collecting PCs to disambiguate reused + * address ranges. + */ +typedef void (*Dart_OnNewCodeCallback)(struct Dart_CodeObserver* observer, + const char* name, + uintptr_t base, + uintptr_t size); + +typedef struct Dart_CodeObserver { + void* data; + + Dart_OnNewCodeCallback on_new_code; +} Dart_CodeObserver; + +/** + * Describes how to initialize the VM. Used with Dart_Initialize. + * + * \param version Identifies the version of the struct used by the client. + * should be initialized to DART_INITIALIZE_PARAMS_CURRENT_VERSION. + * \param vm_isolate_snapshot A buffer containing a snapshot of the VM isolate + * or NULL if no snapshot is provided. If provided, the buffer must remain + * valid until Dart_Cleanup returns. + * \param instructions_snapshot A buffer containing a snapshot of precompiled + * instructions, or NULL if no snapshot is provided. If provided, the buffer + * must remain valid until Dart_Cleanup returns. + * \param initialize_isolate A function to be called during isolate + * initialization inside an existing isolate group. + * See Dart_InitializeIsolateCallback. + * \param create_group A function to be called during isolate group creation. + * See Dart_IsolateGroupCreateCallback. + * \param shutdown A function to be called right before an isolate is shutdown. + * See Dart_IsolateShutdownCallback. + * \param cleanup A function to be called after an isolate was shutdown. + * See Dart_IsolateCleanupCallback. + * \param cleanup_group A function to be called after an isolate group is shutdown. + * See Dart_IsolateGroupCleanupCallback. + * \param get_service_assets A function to be called by the service isolate when + * it requires the vmservice assets archive. + * See Dart_GetVMServiceAssetsArchive. + * \param code_observer An external code observer callback function. + * The observer can be invoked as early as during the Dart_Initialize() call. + */ +typedef struct { + int32_t version; + const uint8_t* vm_snapshot_data; + const uint8_t* vm_snapshot_instructions; + Dart_IsolateGroupCreateCallback create_group; + Dart_InitializeIsolateCallback initialize_isolate; + Dart_IsolateShutdownCallback shutdown_isolate; + Dart_IsolateCleanupCallback cleanup_isolate; + Dart_IsolateGroupCleanupCallback cleanup_group; + Dart_ThreadExitCallback thread_exit; + Dart_FileOpenCallback file_open; + Dart_FileReadCallback file_read; + Dart_FileWriteCallback file_write; + Dart_FileCloseCallback file_close; + Dart_EntropySource entropy_source; + Dart_GetVMServiceAssetsArchive get_service_assets; + bool start_kernel_isolate; + Dart_CodeObserver* code_observer; +} Dart_InitializeParams; + +/** + * Initializes the VM. + * + * \param params A struct containing initialization information. The version + * field of the struct must be DART_INITIALIZE_PARAMS_CURRENT_VERSION. + * + * \return NULL if initialization is successful. Returns an error message + * otherwise. The caller is responsible for freeing the error message. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_Initialize( + Dart_InitializeParams* params); + +/** + * Cleanup state in the VM before process termination. + * + * \return NULL if cleanup is successful. Returns an error message otherwise. + * The caller is responsible for freeing the error message. + * + * NOTE: This function must not be called on a thread that was created by the VM + * itself. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_Cleanup(); + +/** + * Sets command line flags. Should be called before Dart_Initialize. + * + * \param argc The length of the arguments array. + * \param argv An array of arguments. + * + * \return NULL if successful. Returns an error message otherwise. + * The caller is responsible for freeing the error message. + * + * NOTE: This call does not store references to the passed in c-strings. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_SetVMFlags(int argc, + const char** argv); + +/** + * Returns true if the named VM flag is of boolean type, specified, and set to + * true. + * + * \param flag_name The name of the flag without leading punctuation + * (example: "enable_asserts"). + */ +DART_EXPORT bool Dart_IsVMFlagSet(const char* flag_name); + +/* + * ======== + * Isolates + * ======== + */ + +/** + * Creates a new isolate. The new isolate becomes the current isolate. + * + * A snapshot can be used to restore the VM quickly to a saved state + * and is useful for fast startup. If snapshot data is provided, the + * isolate will be started using that snapshot data. Requires a core snapshot or + * an app snapshot created by Dart_CreateSnapshot or + * Dart_CreatePrecompiledSnapshot* from a VM with the same version. + * + * Requires there to be no current isolate. + * + * \param script_uri The main source file or snapshot this isolate will load. + * The VM will provide this URI to the Dart_IsolateGroupCreateCallback when a child + * isolate is created by Isolate.spawn. The embedder should use a URI that + * allows it to load the same program into such a child isolate. + * \param name A short name for the isolate to improve debugging messages. + * Typically of the format 'foo.dart:main()'. + * \param isolate_snapshot_data + * \param isolate_snapshot_instructions Buffers containing a snapshot of the + * isolate or NULL if no snapshot is provided. If provided, the buffers must + * remain valid until the isolate shuts down. + * \param flags Pointer to VM specific flags or NULL for default flags. + * \param isolate_group_data Embedder group data. This data can be obtained + * by calling Dart_IsolateGroupData and will be passed to the + * Dart_IsolateShutdownCallback, Dart_IsolateCleanupCallback, and + * Dart_IsolateGroupCleanupCallback. + * \param isolate_data Embedder data. This data will be passed to + * the Dart_IsolateGroupCreateCallback when new isolates are spawned from + * this parent isolate. + * \param error Returns NULL if creation is successful, an error message + * otherwise. The caller is responsible for calling free() on the error + * message. + * + * \return The new isolate on success, or NULL if isolate creation failed. + */ +DART_EXPORT Dart_Isolate +Dart_CreateIsolateGroup(const char* script_uri, + const char* name, + const uint8_t* isolate_snapshot_data, + const uint8_t* isolate_snapshot_instructions, + Dart_IsolateFlags* flags, + void* isolate_group_data, + void* isolate_data, + char** error); +/** + * Creates a new isolate inside the isolate group of [group_member]. + * + * Requires there to be no current isolate. + * + * \param group_member An isolate from the same group into which the newly created + * isolate should be born into. Other threads may not have entered / enter this + * member isolate. + * \param name A short name for the isolate for debugging purposes. + * \param shutdown_callback A callback to be called when the isolate is being + * shutdown (may be NULL). + * \param cleanup_callback A callback to be called when the isolate is being + * cleaned up (may be NULL). + * \param isolate_data The embedder-specific data associated with this isolate. + * \param error Set to NULL if creation is successful, set to an error + * message otherwise. The caller is responsible for calling free() on the + * error message. + * + * \return The newly created isolate on success, or NULL if isolate creation + * failed. + * + * If successful, the newly created isolate will become the current isolate. + */ +DART_EXPORT Dart_Isolate +Dart_CreateIsolateInGroup(Dart_Isolate group_member, + const char* name, + Dart_IsolateShutdownCallback shutdown_callback, + Dart_IsolateCleanupCallback cleanup_callback, + void* child_isolate_data, + char** error); + +/* TODO(turnidge): Document behavior when there is already a current + * isolate. */ + +/** + * Creates a new isolate from a Dart Kernel file. The new isolate + * becomes the current isolate. + * + * Requires there to be no current isolate. + * + * \param script_uri The main source file or snapshot this isolate will load. + * The VM will provide this URI to the Dart_IsolateGroupCreateCallback when a child + * isolate is created by Isolate.spawn. The embedder should use a URI that + * allows it to load the same program into such a child isolate. + * \param name A short name for the isolate to improve debugging messages. + * Typically of the format 'foo.dart:main()'. + * \param kernel_buffer + * \param kernel_buffer_size A buffer which contains a kernel/DIL program. Must + * remain valid until isolate shutdown. + * \param flags Pointer to VM specific flags or NULL for default flags. + * \param isolate_group_data Embedder group data. This data can be obtained + * by calling Dart_IsolateGroupData and will be passed to the + * Dart_IsolateShutdownCallback, Dart_IsolateCleanupCallback, and + * Dart_IsolateGroupCleanupCallback. + * \param isolate_data Embedder data. This data will be passed to + * the Dart_IsolateGroupCreateCallback when new isolates are spawned from + * this parent isolate. + * \param error Returns NULL if creation is successful, an error message + * otherwise. The caller is responsible for calling free() on the error + * message. + * + * \return The new isolate on success, or NULL if isolate creation failed. + */ +DART_EXPORT Dart_Isolate +Dart_CreateIsolateGroupFromKernel(const char* script_uri, + const char* name, + const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size, + Dart_IsolateFlags* flags, + void* isolate_group_data, + void* isolate_data, + char** error); +/** + * Shuts down the current isolate. After this call, the current isolate is NULL. + * Any current scopes created by Dart_EnterScope will be exited. Invokes the + * shutdown callback and any callbacks of remaining weak persistent handles. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_ShutdownIsolate(); +/* TODO(turnidge): Document behavior when there is no current isolate. */ + +/** + * Returns the current isolate. Will return NULL if there is no + * current isolate. + */ +DART_EXPORT Dart_Isolate Dart_CurrentIsolate(); + +/** + * Returns the callback data associated with the current isolate. This + * data was set when the isolate got created or initialized. + */ +DART_EXPORT void* Dart_CurrentIsolateData(); + +/** + * Returns the callback data associated with the given isolate. This + * data was set when the isolate got created or initialized. + */ +DART_EXPORT void* Dart_IsolateData(Dart_Isolate isolate); + +/** + * Returns the current isolate group. Will return NULL if there is no + * current isolate group. + */ +DART_EXPORT Dart_IsolateGroup Dart_CurrentIsolateGroup(); + +/** + * Returns the callback data associated with the current isolate group. This + * data was passed to the isolate group when it was created. + */ +DART_EXPORT void* Dart_CurrentIsolateGroupData(); + +/** + * Returns the callback data associated with the specified isolate group. This + * data was passed to the isolate when it was created. + * The embedder is responsible for ensuring the consistency of this data + * with respect to the lifecycle of an isolate group. + */ +DART_EXPORT void* Dart_IsolateGroupData(Dart_Isolate isolate); + +/** + * Returns the debugging name for the current isolate. + * + * This name is unique to each isolate and should only be used to make + * debugging messages more comprehensible. + */ +DART_EXPORT Dart_Handle Dart_DebugName(); + +/** + * Returns the ID for an isolate which is used to query the service protocol. + * + * It is the responsibility of the caller to free the returned ID. + */ +DART_EXPORT const char* Dart_IsolateServiceId(Dart_Isolate isolate); + +/** + * Enters an isolate. After calling this function, + * the current isolate will be set to the provided isolate. + * + * Requires there to be no current isolate. Multiple threads may not be in + * the same isolate at once. + */ +DART_EXPORT void Dart_EnterIsolate(Dart_Isolate isolate); + +/** + * Kills the given isolate. + * + * This function has the same effect as dart:isolate's + * Isolate.kill(priority:immediate). + * It can interrupt ordinary Dart code but not native code. If the isolate is + * in the middle of a long running native function, the isolate will not be + * killed until control returns to Dart. + * + * Does not require a current isolate. It is safe to kill the current isolate if + * there is one. + */ +DART_EXPORT void Dart_KillIsolate(Dart_Isolate isolate); + +/** + * Notifies the VM that the embedder expects |size| bytes of memory have become + * unreachable. The VM may use this hint to adjust the garbage collector's + * growth policy. + * + * Multiple calls are interpreted as increasing, not replacing, the estimate of + * unreachable memory. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_HintFreed(intptr_t size); + +/** + * Notifies the VM that the embedder expects to be idle until |deadline|. The VM + * may use this time to perform garbage collection or other tasks to avoid + * delays during execution of Dart code in the future. + * + * |deadline| is measured in microseconds against the system's monotonic time. + * This clock can be accessed via Dart_TimelineGetMicros(). + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_NotifyIdle(int64_t deadline); + +/** + * Notifies the VM that the system is running low on memory. + * + * Does not require a current isolate. Only valid after calling Dart_Initialize. + */ +DART_EXPORT void Dart_NotifyLowMemory(); + +/** + * Starts the CPU sampling profiler. + */ +DART_EXPORT void Dart_StartProfiling(); + +/** + * Stops the CPU sampling profiler. + * + * Note that some profile samples might still be taken after this fucntion + * returns due to the asynchronous nature of the implementation on some + * platforms. + */ +DART_EXPORT void Dart_StopProfiling(); + +/** + * Notifies the VM that the current thread should not be profiled until a + * matching call to Dart_ThreadEnableProfiling is made. + * + * NOTE: By default, if a thread has entered an isolate it will be profiled. + * This function should be used when an embedder knows a thread is about + * to make a blocking call and wants to avoid unnecessary interrupts by + * the profiler. + */ +DART_EXPORT void Dart_ThreadDisableProfiling(); + +/** + * Notifies the VM that the current thread should be profiled. + * + * NOTE: It is only legal to call this function *after* calling + * Dart_ThreadDisableProfiling. + * + * NOTE: By default, if a thread has entered an isolate it will be profiled. + */ +DART_EXPORT void Dart_ThreadEnableProfiling(); + +/** + * Register symbol information for the Dart VM's profiler and crash dumps. + * + * This consumes the output of //topaz/runtime/dart/profiler_symbols, which + * should be treated as opaque. + */ +DART_EXPORT void Dart_AddSymbols(const char* dso_name, + void* buffer, + intptr_t buffer_size); + +/** + * Exits an isolate. After this call, Dart_CurrentIsolate will + * return NULL. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_ExitIsolate(); +/* TODO(turnidge): We don't want users of the api to be able to exit a + * "pure" dart isolate. Implement and document. */ + +/** + * Creates a full snapshot of the current isolate heap. + * + * A full snapshot is a compact representation of the dart vm isolate heap + * and dart isolate heap states. These snapshots are used to initialize + * the vm isolate on startup and fast initialization of an isolate. + * A Snapshot of the heap is created before any dart code has executed. + * + * Requires there to be a current isolate. Not available in the precompiled + * runtime (check Dart_IsPrecompiledRuntime). + * + * \param buffer Returns a pointer to a buffer containing the + * snapshot. This buffer is scope allocated and is only valid + * until the next call to Dart_ExitScope. + * \param size Returns the size of the buffer. + * \param is_core Create a snapshot containing core libraries. + * Such snapshot should be agnostic to null safety mode. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateSnapshot(uint8_t** vm_snapshot_data_buffer, + intptr_t* vm_snapshot_data_size, + uint8_t** isolate_snapshot_data_buffer, + intptr_t* isolate_snapshot_data_size, + bool is_core); + +/** + * Returns whether the buffer contains a kernel file. + * + * \param buffer Pointer to a buffer that might contain a kernel binary. + * \param buffer_size Size of the buffer. + * + * \return Whether the buffer contains a kernel binary (full or partial). + */ +DART_EXPORT bool Dart_IsKernel(const uint8_t* buffer, intptr_t buffer_size); + +/** + * Make isolate runnable. + * + * When isolates are spawned, this function is used to indicate that + * the creation and initialization (including script loading) of the + * isolate is complete and the isolate can start. + * This function expects there to be no current isolate. + * + * \param isolate The isolate to be made runnable. + * + * \return NULL if successful. Returns an error message otherwise. The caller + * is responsible for freeing the error message. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_IsolateMakeRunnable( + Dart_Isolate isolate); + +/* + * ================== + * Messages and Ports + * ================== + */ + +/** + * A port is used to send or receive inter-isolate messages + */ +typedef int64_t Dart_Port; + +/** + * ILLEGAL_PORT is a port number guaranteed never to be associated with a valid + * port. + */ +#define ILLEGAL_PORT ((Dart_Port)0) + +/** + * A message notification callback. + * + * This callback allows the embedder to provide an alternate wakeup + * mechanism for the delivery of inter-isolate messages. It is the + * responsibility of the embedder to call Dart_HandleMessage to + * process the message. + */ +typedef void (*Dart_MessageNotifyCallback)(Dart_Isolate dest_isolate); + +/** + * Allows embedders to provide an alternative wakeup mechanism for the + * delivery of inter-isolate messages. This setting only applies to + * the current isolate. + * + * Most embedders will only call this function once, before isolate + * execution begins. If this function is called after isolate + * execution begins, the embedder is responsible for threading issues. + */ +DART_EXPORT void Dart_SetMessageNotifyCallback( + Dart_MessageNotifyCallback message_notify_callback); +/* TODO(turnidge): Consider moving this to isolate creation so that it + * is impossible to mess up. */ + +/** + * Query the current message notify callback for the isolate. + * + * \return The current message notify callback for the isolate. + */ +DART_EXPORT Dart_MessageNotifyCallback Dart_GetMessageNotifyCallback(); + +/** + * The VM's default message handler supports pausing an isolate before it + * processes the first message and right after the it processes the isolate's + * final message. This can be controlled for all isolates by two VM flags: + * + * `--pause-isolates-on-start` + * `--pause-isolates-on-exit` + * + * Additionally, Dart_SetShouldPauseOnStart and Dart_SetShouldPauseOnExit can be + * used to control this behaviour on a per-isolate basis. + * + * When an embedder is using a Dart_MessageNotifyCallback the embedder + * needs to cooperate with the VM so that the service protocol can report + * accurate information about isolates and so that tools such as debuggers + * work reliably. + * + * The following functions can be used to implement pausing on start and exit. + */ + +/** + * If the VM flag `--pause-isolates-on-start` was passed this will be true. + * + * \return A boolean value indicating if pause on start was requested. + */ +DART_EXPORT bool Dart_ShouldPauseOnStart(); + +/** + * Override the VM flag `--pause-isolates-on-start` for the current isolate. + * + * \param should_pause Should the isolate be paused on start? + * + * NOTE: This must be called before Dart_IsolateMakeRunnable. + */ +DART_EXPORT void Dart_SetShouldPauseOnStart(bool should_pause); + +/** + * Is the current isolate paused on start? + * + * \return A boolean value indicating if the isolate is paused on start. + */ +DART_EXPORT bool Dart_IsPausedOnStart(); + +/** + * Called when the embedder has paused the current isolate on start and when + * the embedder has resumed the isolate. + * + * \param paused Is the isolate paused on start? + */ +DART_EXPORT void Dart_SetPausedOnStart(bool paused); + +/** + * If the VM flag `--pause-isolates-on-exit` was passed this will be true. + * + * \return A boolean value indicating if pause on exit was requested. + */ +DART_EXPORT bool Dart_ShouldPauseOnExit(); + +/** + * Override the VM flag `--pause-isolates-on-exit` for the current isolate. + * + * \param should_pause Should the isolate be paused on exit? + * + */ +DART_EXPORT void Dart_SetShouldPauseOnExit(bool should_pause); + +/** + * Is the current isolate paused on exit? + * + * \return A boolean value indicating if the isolate is paused on exit. + */ +DART_EXPORT bool Dart_IsPausedOnExit(); + +/** + * Called when the embedder has paused the current isolate on exit and when + * the embedder has resumed the isolate. + * + * \param paused Is the isolate paused on exit? + */ +DART_EXPORT void Dart_SetPausedOnExit(bool paused); + +/** + * Called when the embedder has caught a top level unhandled exception error + * in the current isolate. + * + * NOTE: It is illegal to call this twice on the same isolate without first + * clearing the sticky error to null. + * + * \param error The unhandled exception error. + */ +DART_EXPORT void Dart_SetStickyError(Dart_Handle error); + +/** + * Does the current isolate have a sticky error? + */ +DART_EXPORT bool Dart_HasStickyError(); + +/** + * Gets the sticky error for the current isolate. + * + * \return A handle to the sticky error object or null. + */ +DART_EXPORT Dart_Handle Dart_GetStickyError(); + +/** + * Handles the next pending message for the current isolate. + * + * May generate an unhandled exception error. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_HandleMessage(); + +/** + * Drains the microtask queue, then blocks the calling thread until the current + * isolate recieves a message, then handles all messages. + * + * \param timeout_millis When non-zero, the call returns after the indicated + number of milliseconds even if no message was received. + * \return A valid handle if no error occurs, otherwise an error handle. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_WaitForEvent(int64_t timeout_millis); + +/** + * Handles any pending messages for the vm service for the current + * isolate. + * + * This function may be used by an embedder at a breakpoint to avoid + * pausing the vm service. + * + * This function can indirectly cause the message notify callback to + * be called. + * + * \return true if the vm service requests the program resume + * execution, false otherwise + */ +DART_EXPORT bool Dart_HandleServiceMessages(); + +/** + * Does the current isolate have pending service messages? + * + * \return true if the isolate has pending service messages, false otherwise. + */ +DART_EXPORT bool Dart_HasServiceMessages(); + +/** + * Processes any incoming messages for the current isolate. + * + * This function may only be used when the embedder has not provided + * an alternate message delivery mechanism with + * Dart_SetMessageCallbacks. It is provided for convenience. + * + * This function waits for incoming messages for the current + * isolate. As new messages arrive, they are handled using + * Dart_HandleMessage. The routine exits when all ports to the + * current isolate are closed. + * + * \return A valid handle if the run loop exited successfully. If an + * exception or other error occurs while processing messages, an + * error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_RunLoop(); + +/** + * Lets the VM run message processing for the isolate. + * + * This function expects there to a current isolate and the current isolate + * must not have an active api scope. The VM will take care of making the + * isolate runnable (if not already), handles its message loop and will take + * care of shutting the isolate down once it's done. + * + * \param errors_are_fatal Whether uncaught errors should be fatal. + * \param on_error_port A port to notify on uncaught errors (or ILLEGAL_PORT). + * \param on_exit_port A port to notify on exit (or ILLEGAL_PORT). + * \param error A non-NULL pointer which will hold an error message if the call + * fails. The error has to be free()ed by the caller. + * + * \return If successfull the VM takes owernship of the isolate and takes care + * of its message loop. If not successful the caller retains owernship of the + * isolate. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT bool Dart_RunLoopAsync( + bool errors_are_fatal, + Dart_Port on_error_port, + Dart_Port on_exit_port, + char** error); + +/* TODO(turnidge): Should this be removed from the public api? */ + +/** + * Gets the main port id for the current isolate. + */ +DART_EXPORT Dart_Port Dart_GetMainPortId(); + +/** + * Does the current isolate have live ReceivePorts? + * + * A ReceivePort is live when it has not been closed. + */ +DART_EXPORT bool Dart_HasLivePorts(); + +/** + * Posts a message for some isolate. The message is a serialized + * object. + * + * Requires there to be a current isolate. + * + * \param port The destination port. + * \param object An object from the current isolate. + * + * \return True if the message was posted. + */ +DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle object); + +/** + * Returns a new SendPort with the provided port id. + * + * \param port_id The destination port. + * + * \return A new SendPort if no errors occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id); + +/** + * Gets the SendPort id for the provided SendPort. + * \param port A SendPort object whose id is desired. + * \param port_id Returns the id of the SendPort. + * \return Success if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_SendPortGetId(Dart_Handle port, + Dart_Port* port_id); + +/* + * ====== + * Scopes + * ====== + */ + +/** + * Enters a new scope. + * + * All new local handles will be created in this scope. Additionally, + * some functions may return "scope allocated" memory which is only + * valid within this scope. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_EnterScope(); + +/** + * Exits a scope. + * + * The previous scope (if any) becomes the current scope. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_ExitScope(); + +/** + * The Dart VM uses "zone allocation" for temporary structures. Zones + * support very fast allocation of small chunks of memory. The chunks + * cannot be deallocated individually, but instead zones support + * deallocating all chunks in one fast operation. + * + * This function makes it possible for the embedder to allocate + * temporary data in the VMs zone allocator. + * + * Zone allocation is possible: + * 1. when inside a scope where local handles can be allocated + * 2. when processing a message from a native port in a native port + * handler + * + * All the memory allocated this way will be reclaimed either on the + * next call to Dart_ExitScope or when the native port handler exits. + * + * \param size Size of the memory to allocate. + * + * \return A pointer to the allocated memory. NULL if allocation + * failed. Failure might due to is no current VM zone. + */ +DART_EXPORT uint8_t* Dart_ScopeAllocate(intptr_t size); + +/* + * ======= + * Objects + * ======= + */ + +/** + * Returns the null object. + * + * \return A handle to the null object. + */ +DART_EXPORT Dart_Handle Dart_Null(); + +/** + * Is this object null? + */ +DART_EXPORT bool Dart_IsNull(Dart_Handle object); + +/** + * Returns the empty string object. + * + * \return A handle to the empty string object. + */ +DART_EXPORT Dart_Handle Dart_EmptyString(); + +/** + * Returns types that are not classes, and which therefore cannot be looked up + * as library members by Dart_GetType. + * + * \return A handle to the dynamic, void or Never type. + */ +DART_EXPORT Dart_Handle Dart_TypeDynamic(); +DART_EXPORT Dart_Handle Dart_TypeVoid(); +DART_EXPORT Dart_Handle Dart_TypeNever(); + +/** + * Checks if the two objects are equal. + * + * The result of the comparison is returned through the 'equal' + * parameter. The return value itself is used to indicate success or + * failure, not equality. + * + * May generate an unhandled exception error. + * + * \param obj1 An object to be compared. + * \param obj2 An object to be compared. + * \param equal Returns the result of the equality comparison. + * + * \return A valid handle if no error occurs during the comparison. + */ +DART_EXPORT Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, + Dart_Handle obj2, + bool* equal); + +/** + * Is this object an instance of some type? + * + * The result of the test is returned through the 'instanceof' parameter. + * The return value itself is used to indicate success or failure. + * + * \param object An object. + * \param type A type. + * \param instanceof Return true if 'object' is an instance of type 'type'. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_ObjectIsType(Dart_Handle object, + Dart_Handle type, + bool* instanceof); + +/** + * Query object type. + * + * \param object Some Object. + * + * \return true if Object is of the specified type. + */ +DART_EXPORT bool Dart_IsInstance(Dart_Handle object); +DART_EXPORT bool Dart_IsNumber(Dart_Handle object); +DART_EXPORT bool Dart_IsInteger(Dart_Handle object); +DART_EXPORT bool Dart_IsDouble(Dart_Handle object); +DART_EXPORT bool Dart_IsBoolean(Dart_Handle object); +DART_EXPORT bool Dart_IsString(Dart_Handle object); +DART_EXPORT bool Dart_IsStringLatin1(Dart_Handle object); /* (ISO-8859-1) */ +DART_EXPORT bool Dart_IsExternalString(Dart_Handle object); +DART_EXPORT bool Dart_IsList(Dart_Handle object); +DART_EXPORT bool Dart_IsMap(Dart_Handle object); +DART_EXPORT bool Dart_IsLibrary(Dart_Handle object); +DART_EXPORT bool Dart_IsType(Dart_Handle handle); +DART_EXPORT bool Dart_IsFunction(Dart_Handle handle); +DART_EXPORT bool Dart_IsVariable(Dart_Handle handle); +DART_EXPORT bool Dart_IsTypeVariable(Dart_Handle handle); +DART_EXPORT bool Dart_IsClosure(Dart_Handle object); +DART_EXPORT bool Dart_IsTypedData(Dart_Handle object); +DART_EXPORT bool Dart_IsByteBuffer(Dart_Handle object); +DART_EXPORT bool Dart_IsFuture(Dart_Handle object); + +/* + * ========= + * Instances + * ========= + */ + +/* + * For the purposes of the embedding api, not all objects returned are + * Dart language objects. Within the api, we use the term 'Instance' + * to indicate handles which refer to true Dart language objects. + * + * TODO(turnidge): Reorganize the "Object" section above, pulling down + * any functions that more properly belong here. */ + +/** + * Gets the type of a Dart language object. + * + * \param instance Some Dart object. + * + * \return If no error occurs, the type is returned. Otherwise an + * error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance); + +/** + * Returns the name for the provided class type. + * + * \return A valid string handle if no error occurs during the + * operation. + */ +DART_EXPORT Dart_Handle Dart_ClassName(Dart_Handle cls_type); + +/** + * Returns the name for the provided function or method. + * + * \return A valid string handle if no error occurs during the + * operation. + */ +DART_EXPORT Dart_Handle Dart_FunctionName(Dart_Handle function); + +/** + * Returns a handle to the owner of a function. + * + * The owner of an instance method or a static method is its defining + * class. The owner of a top-level function is its defining + * library. The owner of the function of a non-implicit closure is the + * function of the method or closure that defines the non-implicit + * closure. + * + * \return A valid handle to the owner of the function, or an error + * handle if the argument is not a valid handle to a function. + */ +DART_EXPORT Dart_Handle Dart_FunctionOwner(Dart_Handle function); + +/** + * Determines whether a function handle referes to a static function + * of method. + * + * For the purposes of the embedding API, a top-level function is + * implicitly declared static. + * + * \param function A handle to a function or method declaration. + * \param is_static Returns whether the function or method is declared static. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_FunctionIsStatic(Dart_Handle function, + bool* is_static); + +/** + * Is this object a closure resulting from a tear-off (closurized method)? + * + * Returns true for closures produced when an ordinary method is accessed + * through a getter call. Returns false otherwise, in particular for closures + * produced from local function declarations. + * + * \param object Some Object. + * + * \return true if Object is a tear-off. + */ +DART_EXPORT bool Dart_IsTearOff(Dart_Handle object); + +/** + * Retrieves the function of a closure. + * + * \return A handle to the function of the closure, or an error handle if the + * argument is not a closure. + */ +DART_EXPORT Dart_Handle Dart_ClosureFunction(Dart_Handle closure); + +/** + * Returns a handle to the library which contains class. + * + * \return A valid handle to the library with owns class, null if the class + * has no library or an error handle if the argument is not a valid handle + * to a class type. + */ +DART_EXPORT Dart_Handle Dart_ClassLibrary(Dart_Handle cls_type); + +/* + * ============================= + * Numbers, Integers and Doubles + * ============================= + */ + +/** + * Does this Integer fit into a 64-bit signed integer? + * + * \param integer An integer. + * \param fits Returns true if the integer fits into a 64-bit signed integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer, + bool* fits); + +/** + * Does this Integer fit into a 64-bit unsigned integer? + * + * \param integer An integer. + * \param fits Returns true if the integer fits into a 64-bit unsigned integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerFitsIntoUint64(Dart_Handle integer, + bool* fits); + +/** + * Returns an Integer with the provided value. + * + * \param value The value of the integer. + * + * \return The Integer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value); + +/** + * Returns an Integer with the provided value. + * + * \param value The unsigned value of the integer. + * + * \return The Integer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value); + +/** + * Returns an Integer with the provided value. + * + * \param value The value of the integer represented as a C string + * containing a hexadecimal number. + * + * \return The Integer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* value); + +/** + * Gets the value of an Integer. + * + * The integer must fit into a 64-bit signed integer, otherwise an error occurs. + * + * \param integer An Integer. + * \param value Returns the value of the Integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer, + int64_t* value); + +/** + * Gets the value of an Integer. + * + * The integer must fit into a 64-bit unsigned integer, otherwise an + * error occurs. + * + * \param integer An Integer. + * \param value Returns the value of the Integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerToUint64(Dart_Handle integer, + uint64_t* value); + +/** + * Gets the value of an integer as a hexadecimal C string. + * + * \param integer An Integer. + * \param value Returns the value of the Integer as a hexadecimal C + * string. This C string is scope allocated and is only valid until + * the next call to Dart_ExitScope. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer, + const char** value); + +/** + * Returns a Double with the provided value. + * + * \param value A double. + * + * \return The Double object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewDouble(double value); + +/** + * Gets the value of a Double + * + * \param double_obj A Double + * \param value Returns the value of the Double. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj, double* value); + +/** + * Returns a closure of static function 'function_name' in the class 'class_name' + * in the exported namespace of specified 'library'. + * + * \param library Library object + * \param cls_type Type object representing a Class + * \param function_name Name of the static function in the class + * + * \return A valid Dart instance if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_GetStaticMethodClosure(Dart_Handle library, + Dart_Handle cls_type, + Dart_Handle function_name); + +/* + * ======== + * Booleans + * ======== + */ + +/** + * Returns the True object. + * + * Requires there to be a current isolate. + * + * \return A handle to the True object. + */ +DART_EXPORT Dart_Handle Dart_True(); + +/** + * Returns the False object. + * + * Requires there to be a current isolate. + * + * \return A handle to the False object. + */ +DART_EXPORT Dart_Handle Dart_False(); + +/** + * Returns a Boolean with the provided value. + * + * \param value true or false. + * + * \return The Boolean object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewBoolean(bool value); + +/** + * Gets the value of a Boolean + * + * \param boolean_obj A Boolean + * \param value Returns the value of the Boolean. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj, bool* value); + +/* + * ======= + * Strings + * ======= + */ + +/** + * Gets the length of a String. + * + * \param str A String. + * \param length Returns the length of the String. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* length); + +/** + * Returns a String built from the provided C string + * (There is an implicit assumption that the C string passed in contains + * UTF-8 encoded characters and '\0' is considered as a termination + * character). + * + * \param value A C String + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str); +/* TODO(turnidge): Document what happens when we run out of memory + * during this call. */ + +/** + * Returns a String built from an array of UTF-8 encoded characters. + * + * \param utf8_array An array of UTF-8 encoded characters. + * \param length The length of the codepoints array. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, + intptr_t length); + +/** + * Returns a String built from an array of UTF-16 encoded characters. + * + * \param utf16_array An array of UTF-16 encoded characters. + * \param length The length of the codepoints array. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array, + intptr_t length); + +/** + * Returns a String built from an array of UTF-32 encoded characters. + * + * \param utf32_array An array of UTF-32 encoded characters. + * \param length The length of the codepoints array. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array, + intptr_t length); + +/** + * Returns a String which references an external array of + * Latin-1 (ISO-8859-1) encoded characters. + * + * \param latin1_array Array of Latin-1 encoded characters. This must not move. + * \param length The length of the characters array. + * \param peer An external pointer to associate with this string. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A callback to be called when this string is finalized. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle +Dart_NewExternalLatin1String(const uint8_t* latin1_array, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Returns a String which references an external array of UTF-16 encoded + * characters. + * + * \param utf16_array An array of UTF-16 encoded characters. This must not move. + * \param length The length of the characters array. + * \param peer An external pointer to associate with this string. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A callback to be called when this string is finalized. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle +Dart_NewExternalUTF16String(const uint16_t* utf16_array, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Gets the C string representation of a String. + * (It is a sequence of UTF-8 encoded values with a '\0' termination.) + * + * \param str A string. + * \param cstr Returns the String represented as a C string. + * This C string is scope allocated and is only valid until + * the next call to Dart_ExitScope. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle str, + const char** cstr); + +/** + * Gets a UTF-8 encoded representation of a String. + * + * Any unpaired surrogate code points in the string will be converted as + * replacement characters (U+FFFD, 0xEF 0xBF 0xBD in UTF-8). If you need + * to preserve unpaired surrogates, use the Dart_StringToUTF16 function. + * + * \param str A string. + * \param utf8_array Returns the String represented as UTF-8 code + * units. This UTF-8 array is scope allocated and is only valid + * until the next call to Dart_ExitScope. + * \param length Used to return the length of the array which was + * actually used. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str, + uint8_t** utf8_array, + intptr_t* length); + +/** + * Gets the data corresponding to the string object. This function returns + * the data only for Latin-1 (ISO-8859-1) string objects. For all other + * string objects it returns an error. + * + * \param str A string. + * \param latin1_array An array allocated by the caller, used to return + * the string data. + * \param length Used to pass in the length of the provided array. + * Used to return the length of the array which was actually used. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToLatin1(Dart_Handle str, + uint8_t* latin1_array, + intptr_t* length); + +/** + * Gets the UTF-16 encoded representation of a string. + * + * \param str A string. + * \param utf16_array An array allocated by the caller, used to return + * the array of UTF-16 encoded characters. + * \param length Used to pass in the length of the provided array. + * Used to return the length of the array which was actually used. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str, + uint16_t* utf16_array, + intptr_t* length); + +/** + * Gets the storage size in bytes of a String. + * + * \param str A String. + * \param length Returns the storage size in bytes of the String. + * This is the size in bytes needed to store the String. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringStorageSize(Dart_Handle str, intptr_t* size); + +/** + * Retrieves some properties associated with a String. + * Properties retrieved are: + * - character size of the string (one or two byte) + * - length of the string + * - peer pointer of string if it is an external string. + * \param str A String. + * \param char_size Returns the character size of the String. + * \param str_len Returns the length of the String. + * \param peer Returns the peer pointer associated with the String or 0 if + * there is no peer pointer for it. + * \return Success if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_StringGetProperties(Dart_Handle str, + intptr_t* char_size, + intptr_t* str_len, + void** peer); + +/* + * ===== + * Lists + * ===== + */ + +/** + * Returns a List of the desired length. + * + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewList(intptr_t length); + +typedef enum { + Dart_CoreType_Dynamic, + Dart_CoreType_Int, + Dart_CoreType_String, +} Dart_CoreType_Id; + +// TODO(bkonyi): convert this to use nullable types once NNBD is enabled. +/** + * Returns a List of the desired length with the desired legacy element type. + * + * \param element_type_id The type of elements of the list. + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns an error + * handle. + */ +DART_EXPORT Dart_Handle Dart_NewListOf(Dart_CoreType_Id element_type_id, + intptr_t length); + +/** + * Returns a List of the desired length with the desired element type. + * + * \param element_type Handle to a nullable type object. E.g., from + * Dart_GetType or Dart_GetNullableType. + * + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewListOfType(Dart_Handle element_type, + intptr_t length); + +/** + * Returns a List of the desired length with the desired element type, filled + * with the provided object. + * + * \param element_type Handle to a type object. E.g., from Dart_GetType. + * + * \param fill_object Handle to an object of type 'element_type' that will be + * used to populate the list. This parameter can only be Dart_Null() if the + * length of the list is 0 or 'element_type' is a nullable type. + * + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewListOfTypeFilled(Dart_Handle element_type, + Dart_Handle fill_object, + intptr_t length); + +/** + * Gets the length of a List. + * + * May generate an unhandled exception error. + * + * \param list A List. + * \param length Returns the length of the List. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_ListLength(Dart_Handle list, intptr_t* length); + +/** + * Gets the Object at some index of a List. + * + * If the index is out of bounds, an error occurs. + * + * May generate an unhandled exception error. + * + * \param list A List. + * \param index A valid index into the List. + * + * \return The Object in the List at the specified index if no error + * occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index); + +/** +* Gets a range of Objects from a List. +* +* If any of the requested index values are out of bounds, an error occurs. +* +* May generate an unhandled exception error. +* +* \param list A List. +* \param offset The offset of the first item to get. +* \param length The number of items to get. +* \param result A pointer to fill with the objects. +* +* \return Success if no error occurs during the operation. +*/ +DART_EXPORT Dart_Handle Dart_ListGetRange(Dart_Handle list, + intptr_t offset, + intptr_t length, + Dart_Handle* result); + +/** + * Sets the Object at some index of a List. + * + * If the index is out of bounds, an error occurs. + * + * May generate an unhandled exception error. + * + * \param array A List. + * \param index A valid index into the List. + * \param value The Object to put in the List. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list, + intptr_t index, + Dart_Handle value); + +/** + * May generate an unhandled exception error. + */ +DART_EXPORT Dart_Handle Dart_ListGetAsBytes(Dart_Handle list, + intptr_t offset, + uint8_t* native_array, + intptr_t length); + +/** + * May generate an unhandled exception error. + */ +DART_EXPORT Dart_Handle Dart_ListSetAsBytes(Dart_Handle list, + intptr_t offset, + const uint8_t* native_array, + intptr_t length); + +/* + * ==== + * Maps + * ==== + */ + +/** + * Gets the Object at some key of a Map. + * + * May generate an unhandled exception error. + * + * \param map A Map. + * \param key An Object. + * + * \return The value in the map at the specified key, null if the map does not + * contain the key, or an error handle. + */ +DART_EXPORT Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key); + +/** + * Returns whether the Map contains a given key. + * + * May generate an unhandled exception error. + * + * \param map A Map. + * + * \return A handle on a boolean indicating whether map contains the key. + * Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key); + +/** + * Gets the list of keys of a Map. + * + * May generate an unhandled exception error. + * + * \param map A Map. + * + * \return The list of key Objects if no error occurs. Otherwise returns an + * error handle. + */ +DART_EXPORT Dart_Handle Dart_MapKeys(Dart_Handle map); + +/* + * ========== + * Typed Data + * ========== + */ + +typedef enum { + Dart_TypedData_kByteData = 0, + Dart_TypedData_kInt8, + Dart_TypedData_kUint8, + Dart_TypedData_kUint8Clamped, + Dart_TypedData_kInt16, + Dart_TypedData_kUint16, + Dart_TypedData_kInt32, + Dart_TypedData_kUint32, + Dart_TypedData_kInt64, + Dart_TypedData_kUint64, + Dart_TypedData_kFloat32, + Dart_TypedData_kFloat64, + Dart_TypedData_kInt32x4, + Dart_TypedData_kFloat32x4, + Dart_TypedData_kFloat64x2, + Dart_TypedData_kInvalid +} Dart_TypedData_Type; + +/** + * Return type if this object is a TypedData object. + * + * \return kInvalid if the object is not a TypedData object or the appropriate + * Dart_TypedData_Type. + */ +DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object); + +/** + * Return type if this object is an external TypedData object. + * + * \return kInvalid if the object is not an external TypedData object or + * the appropriate Dart_TypedData_Type. + */ +DART_EXPORT Dart_TypedData_Type +Dart_GetTypeOfExternalTypedData(Dart_Handle object); + +/** + * Returns a TypedData object of the desired length and type. + * + * \param type The type of the TypedData object. + * \param length The length of the TypedData object (length in type units). + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, + intptr_t length); + +/** + * Returns a TypedData object which references an external data array. + * + * \param type The type of the data array. + * \param data A data array. This array must not move. + * \param length The length of the data array (length in type units). + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewExternalTypedData(Dart_TypedData_Type type, + void* data, + intptr_t length); + +/** + * Returns a TypedData object which references an external data array. + * + * \param type The type of the data array. + * \param data A data array. This array must not move. + * \param length The length of the data array (length in type units). + * \param peer A pointer to a native object or NULL. This value is + * provided to callback when it is invoked. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A function pointer that will be invoked sometime + * after the object is garbage collected, unless the handle has been deleted. + * A valid callback needs to be specified it cannot be NULL. + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle +Dart_NewExternalTypedDataWithFinalizer(Dart_TypedData_Type type, + void* data, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Returns a ByteBuffer object for the typed data. + * + * \param type_data The TypedData object. + * + * \return The ByteBuffer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewByteBuffer(Dart_Handle typed_data); + +/** + * Acquires access to the internal data address of a TypedData object. + * + * \param object The typed data object whose internal data address is to + * be accessed. + * \param type The type of the object is returned here. + * \param data The internal data address is returned here. + * \param len Size of the typed array is returned here. + * + * Notes: + * When the internal address of the object is acquired any calls to a + * Dart API function that could potentially allocate an object or run + * any Dart code will return an error. + * + * Any Dart API functions for accessing the data should not be called + * before the corresponding release. In particular, the object should + * not be acquired again before its release. This leads to undefined + * behavior. + * + * \return Success if the internal data address is acquired successfully. + * Otherwise, returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, + Dart_TypedData_Type* type, + void** data, + intptr_t* len); + +/** + * Releases access to the internal data address that was acquired earlier using + * Dart_TypedDataAcquireData. + * + * \param object The typed data object whose internal data address is to be + * released. + * + * \return Success if the internal data address is released successfully. + * Otherwise, returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object); + +/** + * Returns the TypedData object associated with the ByteBuffer object. + * + * \param byte_buffer The ByteBuffer object. + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetDataFromByteBuffer(Dart_Handle byte_buffer); + +/* + * ============================================================ + * Invoking Constructors, Methods, Closures and Field accessors + * ============================================================ + */ + +/** + * Invokes a constructor, creating a new object. + * + * This function allows hidden constructors (constructors with leading + * underscores) to be called. + * + * \param type Type of object to be constructed. + * \param constructor_name The name of the constructor to invoke. Use + * Dart_Null() or Dart_EmptyString() to invoke the unnamed constructor. + * This name should not include the name of the class. + * \param number_of_arguments Size of the arguments array. + * \param arguments An array of arguments to the constructor. + * + * \return If the constructor is called and completes successfully, + * then the new object. If an error occurs during execution, then an + * error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_New(Dart_Handle type, + Dart_Handle constructor_name, + int number_of_arguments, + Dart_Handle* arguments); + +/** + * Allocate a new object without invoking a constructor. + * + * \param type The type of an object to be allocated. + * + * \return The new object. If an error occurs during execution, then an + * error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_Allocate(Dart_Handle type); + +/** + * Allocate a new object without invoking a constructor, and sets specified + * native fields. + * + * \param type The type of an object to be allocated. + * \param num_native_fields The number of native fields to set. + * \param native_fields An array containing the value of native fields. + * + * \return The new object. If an error occurs during execution, then an + * error handle is returned. + */ +DART_EXPORT Dart_Handle +Dart_AllocateWithNativeFields(Dart_Handle type, + intptr_t num_native_fields, + const intptr_t* native_fields); + +/** + * Invokes a method or function. + * + * The 'target' parameter may be an object, type, or library. If + * 'target' is an object, then this function will invoke an instance + * method. If 'target' is a type, then this function will invoke a + * static method. If 'target' is a library, then this function will + * invoke a top-level function from that library. + * NOTE: This API call cannot be used to invoke methods of a type object. + * + * This function ignores visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param target An object, type, or library. + * \param name The name of the function or method to invoke. + * \param number_of_arguments Size of the arguments array. + * \param arguments An array of arguments to the function. + * + * \return If the function or method is called and completes + * successfully, then the return value is returned. If an error + * occurs during execution, then an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_Invoke(Dart_Handle target, + Dart_Handle name, + int number_of_arguments, + Dart_Handle* arguments); +/* TODO(turnidge): Document how to invoke operators. */ + +/** + * Invokes a Closure with the given arguments. + * + * May generate an unhandled exception error. + * + * \return If no error occurs during execution, then the result of + * invoking the closure is returned. If an error occurs during + * execution, then an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_InvokeClosure(Dart_Handle closure, + int number_of_arguments, + Dart_Handle* arguments); + +/** + * Invokes a Generative Constructor on an object that was previously + * allocated using Dart_Allocate/Dart_AllocateWithNativeFields. + * + * The 'target' parameter must be an object. + * + * This function ignores visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param target An object. + * \param name The name of the constructor to invoke. + * Use Dart_Null() or Dart_EmptyString() to invoke the unnamed constructor. + * \param number_of_arguments Size of the arguments array. + * \param arguments An array of arguments to the function. + * + * \return If the constructor is called and completes + * successfully, then the object is returned. If an error + * occurs during execution, then an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_InvokeConstructor(Dart_Handle object, + Dart_Handle name, + int number_of_arguments, + Dart_Handle* arguments); + +/** + * Gets the value of a field. + * + * The 'container' parameter may be an object, type, or library. If + * 'container' is an object, then this function will access an + * instance field. If 'container' is a type, then this function will + * access a static field. If 'container' is a library, then this + * function will access a top-level variable. + * NOTE: This API call cannot be used to access fields of a type object. + * + * This function ignores field visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param container An object, type, or library. + * \param name A field name. + * + * \return If no error occurs, then the value of the field is + * returned. Otherwise an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_GetField(Dart_Handle container, Dart_Handle name); + +/** + * Sets the value of a field. + * + * The 'container' parameter may actually be an object, type, or + * library. If 'container' is an object, then this function will + * access an instance field. If 'container' is a type, then this + * function will access a static field. If 'container' is a library, + * then this function will access a top-level variable. + * NOTE: This API call cannot be used to access fields of a type object. + * + * This function ignores field visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param container An object, type, or library. + * \param name A field name. + * \param value The new field value. + * + * \return A valid handle if no error occurs. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_SetField(Dart_Handle container, Dart_Handle name, Dart_Handle value); + +/* + * ========== + * Exceptions + * ========== + */ + +/* + * TODO(turnidge): Remove these functions from the api and replace all + * uses with Dart_NewUnhandledExceptionError. */ + +/** + * Throws an exception. + * + * This function causes a Dart language exception to be thrown. This + * will proceed in the standard way, walking up Dart frames until an + * appropriate 'catch' block is found, executing 'finally' blocks, + * etc. + * + * If an error handle is passed into this function, the error is + * propagated immediately. See Dart_PropagateError for a discussion + * of error propagation. + * + * If successful, this function does not return. Note that this means + * that the destructors of any stack-allocated C++ objects will not be + * called. If there are no Dart frames on the stack, an error occurs. + * + * \return An error handle if the exception was not thrown. + * Otherwise the function does not return. + */ +DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception); + +/** + * Rethrows an exception. + * + * Rethrows an exception, unwinding all dart frames on the stack. If + * successful, this function does not return. Note that this means + * that the destructors of any stack-allocated C++ objects will not be + * called. If there are no Dart frames on the stack, an error occurs. + * + * \return An error handle if the exception was not thrown. + * Otherwise the function does not return. + */ +DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, + Dart_Handle stacktrace); + +/* + * =========================== + * Native fields and functions + * =========================== + */ + +/** + * Gets the number of native instance fields in an object. + */ +DART_EXPORT Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj, + int* count); + +/** + * Gets the value of a native field. + * + * TODO(turnidge): Document. + */ +DART_EXPORT Dart_Handle Dart_GetNativeInstanceField(Dart_Handle obj, + int index, + intptr_t* value); + +/** + * Sets the value of a native field. + * + * TODO(turnidge): Document. + */ +DART_EXPORT Dart_Handle Dart_SetNativeInstanceField(Dart_Handle obj, + int index, + intptr_t value); + +/** + * The arguments to a native function. + * + * This object is passed to a native function to represent its + * arguments and return value. It allows access to the arguments to a + * native function by index. It also allows the return value of a + * native function to be set. + */ +typedef struct _Dart_NativeArguments* Dart_NativeArguments; + +/** + * Extracts current isolate group data from the native arguments structure. + */ +DART_EXPORT void* Dart_GetNativeIsolateGroupData(Dart_NativeArguments args); + +typedef enum { + Dart_NativeArgument_kBool = 0, + Dart_NativeArgument_kInt32, + Dart_NativeArgument_kUint32, + Dart_NativeArgument_kInt64, + Dart_NativeArgument_kUint64, + Dart_NativeArgument_kDouble, + Dart_NativeArgument_kString, + Dart_NativeArgument_kInstance, + Dart_NativeArgument_kNativeFields, +} Dart_NativeArgument_Type; + +typedef struct _Dart_NativeArgument_Descriptor { + uint8_t type; + uint8_t index; +} Dart_NativeArgument_Descriptor; + +typedef union _Dart_NativeArgument_Value { + bool as_bool; + int32_t as_int32; + uint32_t as_uint32; + int64_t as_int64; + uint64_t as_uint64; + double as_double; + struct { + Dart_Handle dart_str; + void* peer; + } as_string; + struct { + intptr_t num_fields; + intptr_t* values; + } as_native_fields; + Dart_Handle as_instance; +} Dart_NativeArgument_Value; + +enum { + kNativeArgNumberPos = 0, + kNativeArgNumberSize = 8, + kNativeArgTypePos = kNativeArgNumberPos + kNativeArgNumberSize, + kNativeArgTypeSize = 8, +}; + +#define BITMASK(size) ((1 << size) - 1) +#define DART_NATIVE_ARG_DESCRIPTOR(type, position) \ + (((type & BITMASK(kNativeArgTypeSize)) << kNativeArgTypePos) | \ + (position & BITMASK(kNativeArgNumberSize))) + +/** + * Gets the native arguments based on the types passed in and populates + * the passed arguments buffer with appropriate native values. + * + * \param args the Native arguments block passed into the native call. + * \param num_arguments length of argument descriptor array and argument + * values array passed in. + * \param arg_descriptors an array that describes the arguments that + * need to be retrieved. For each argument to be retrieved the descriptor + * contains the argument number (0, 1 etc.) and the argument type + * described using Dart_NativeArgument_Type, e.g: + * DART_NATIVE_ARG_DESCRIPTOR(Dart_NativeArgument_kBool, 1) indicates + * that the first argument is to be retrieved and it should be a boolean. + * \param arg_values array into which the native arguments need to be + * extracted into, the array is allocated by the caller (it could be + * stack allocated to avoid the malloc/free performance overhead). + * + * \return Success if all the arguments could be extracted correctly, + * returns an error handle if there were any errors while extracting the + * arguments (mismatched number of arguments, incorrect types, etc.). + */ +DART_EXPORT Dart_Handle +Dart_GetNativeArguments(Dart_NativeArguments args, + int num_arguments, + const Dart_NativeArgument_Descriptor* arg_descriptors, + Dart_NativeArgument_Value* arg_values); + +/** + * Gets the native argument at some index. + */ +DART_EXPORT Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, + int index); +/* TODO(turnidge): Specify the behavior of an out-of-bounds access. */ + +/** + * Gets the number of native arguments. + */ +DART_EXPORT int Dart_GetNativeArgumentCount(Dart_NativeArguments args); + +/** + * Gets all the native fields of the native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param num_fields size of the intptr_t array 'field_values' passed in. + * \param field_values intptr_t array in which native field values are returned. + * \return Success if the native fields where copied in successfully. Otherwise + * returns an error handle. On success the native field values are copied + * into the 'field_values' array, if the argument at 'arg_index' is a + * null object then 0 is copied as the native field values into the + * 'field_values' array. + */ +DART_EXPORT Dart_Handle +Dart_GetNativeFieldsOfArgument(Dart_NativeArguments args, + int arg_index, + int num_fields, + intptr_t* field_values); + +/** + * Gets the native field of the receiver. + */ +DART_EXPORT Dart_Handle Dart_GetNativeReceiver(Dart_NativeArguments args, + intptr_t* value); + +/** + * Gets a string native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param peer Returns the peer pointer if the string argument has one. + * \return Success if the string argument has a peer, if it does not + * have a peer then the String object is returned. Otherwise returns + * an error handle (argument is not a String object). + */ +DART_EXPORT Dart_Handle Dart_GetNativeStringArgument(Dart_NativeArguments args, + int arg_index, + void** peer); + +/** + * Gets an integer native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param value Returns the integer value if the argument is an Integer. + * \return Success if no error occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetNativeIntegerArgument(Dart_NativeArguments args, + int index, + int64_t* value); + +/** + * Gets a boolean native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param value Returns the boolean value if the argument is a Boolean. + * \return Success if no error occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetNativeBooleanArgument(Dart_NativeArguments args, + int index, + bool* value); + +/** + * Gets a double native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param value Returns the double value if the argument is a double. + * \return Success if no error occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetNativeDoubleArgument(Dart_NativeArguments args, + int index, + double* value); + +/** + * Sets the return value for a native function. + * + * If retval is an Error handle, then error will be propagated once + * the native functions exits. See Dart_PropagateError for a + * discussion of how different types of errors are propagated. + */ +DART_EXPORT void Dart_SetReturnValue(Dart_NativeArguments args, + Dart_Handle retval); + +DART_EXPORT void Dart_SetWeakHandleReturnValue(Dart_NativeArguments args, + Dart_WeakPersistentHandle rval); + +DART_EXPORT void Dart_SetBooleanReturnValue(Dart_NativeArguments args, + bool retval); + +DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args, + int64_t retval); + +DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args, + double retval); + +/** + * A native function. + */ +typedef void (*Dart_NativeFunction)(Dart_NativeArguments arguments); + +/** + * Native entry resolution callback. + * + * For libraries and scripts which have native functions, the embedder + * can provide a native entry resolver. This callback is used to map a + * name/arity to a Dart_NativeFunction. If no function is found, the + * callback should return NULL. + * + * The parameters to the native resolver function are: + * \param name a Dart string which is the name of the native function. + * \param num_of_arguments is the number of arguments expected by the + * native function. + * \param auto_setup_scope is a boolean flag that can be set by the resolver + * to indicate if this function needs a Dart API scope (see Dart_EnterScope/ + * Dart_ExitScope) to be setup automatically by the VM before calling into + * the native function. By default most native functions would require this + * to be true but some light weight native functions which do not call back + * into the VM through the Dart API may not require a Dart scope to be + * setup automatically. + * + * \return A valid Dart_NativeFunction which resolves to a native entry point + * for the native function. + * + * See Dart_SetNativeResolver. + */ +typedef Dart_NativeFunction (*Dart_NativeEntryResolver)(Dart_Handle name, + int num_of_arguments, + bool* auto_setup_scope); +/* TODO(turnidge): Consider renaming to NativeFunctionResolver or + * NativeResolver. */ + +/** + * Native entry symbol lookup callback. + * + * For libraries and scripts which have native functions, the embedder + * can provide a callback for mapping a native entry to a symbol. This callback + * maps a native function entry PC to the native function name. If no native + * entry symbol can be found, the callback should return NULL. + * + * The parameters to the native reverse resolver function are: + * \param nf A Dart_NativeFunction. + * + * \return A const UTF-8 string containing the symbol name or NULL. + * + * See Dart_SetNativeResolver. + */ +typedef const uint8_t* (*Dart_NativeEntrySymbol)(Dart_NativeFunction nf); + +/** + * FFI Native C function pointer resolver callback. + * + * See Dart_SetFfiNativeResolver. + */ +typedef void* (*Dart_FfiNativeResolver)(const char* name, uintptr_t args_n); + +/* + * =========== + * Environment + * =========== + */ + +/** + * An environment lookup callback function. + * + * \param name The name of the value to lookup in the environment. + * + * \return A valid handle to a string if the name exists in the + * current environment or Dart_Null() if not. + */ +typedef Dart_Handle (*Dart_EnvironmentCallback)(Dart_Handle name); + +/** + * Sets the environment callback for the current isolate. This + * callback is used to lookup environment values by name in the + * current environment. This enables the embedder to supply values for + * the const constructors bool.fromEnvironment, int.fromEnvironment + * and String.fromEnvironment. + */ +DART_EXPORT Dart_Handle +Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback); + +/** + * Sets the callback used to resolve native functions for a library. + * + * \param library A library. + * \param resolver A native entry resolver. + * + * \return A valid handle if the native resolver was set successfully. + */ +DART_EXPORT Dart_Handle +Dart_SetNativeResolver(Dart_Handle library, + Dart_NativeEntryResolver resolver, + Dart_NativeEntrySymbol symbol); +/* TODO(turnidge): Rename to Dart_LibrarySetNativeResolver? */ + +/** + * Returns the callback used to resolve native functions for a library. + * + * \param library A library. + * \param resolver a pointer to a Dart_NativeEntryResolver + * + * \return A valid handle if the library was found. + */ +DART_EXPORT Dart_Handle +Dart_GetNativeResolver(Dart_Handle library, Dart_NativeEntryResolver* resolver); + +/** + * Returns the callback used to resolve native function symbols for a library. + * + * \param library A library. + * \param resolver a pointer to a Dart_NativeEntrySymbol. + * + * \return A valid handle if the library was found. + */ +DART_EXPORT Dart_Handle Dart_GetNativeSymbol(Dart_Handle library, + Dart_NativeEntrySymbol* resolver); + +/** + * Sets the callback used to resolve FFI native functions for a library. + * The resolved functions are expected to be a C function pointer of the + * correct signature (as specified in the `@FfiNative()` function + * annotation in Dart code). + * + * NOTE: This is an experimental feature and might change in the future. + * + * \param library A library. + * \param resolver A native function resolver. + * + * \return A valid handle if the native resolver was set successfully. + */ +DART_EXPORT Dart_Handle +Dart_SetFfiNativeResolver(Dart_Handle library, Dart_FfiNativeResolver resolver); + +/* + * ===================== + * Scripts and Libraries + * ===================== + */ + +typedef enum { + Dart_kCanonicalizeUrl = 0, + Dart_kImportTag, + Dart_kKernelTag, +} Dart_LibraryTag; + +/** + * The library tag handler is a multi-purpose callback provided by the + * embedder to the Dart VM. The embedder implements the tag handler to + * provide the ability to load Dart scripts and imports. + * + * -- TAGS -- + * + * Dart_kCanonicalizeUrl + * + * This tag indicates that the embedder should canonicalize 'url' with + * respect to 'library'. For most embedders, the + * Dart_DefaultCanonicalizeUrl function is a sufficient implementation + * of this tag. The return value should be a string holding the + * canonicalized url. + * + * Dart_kImportTag + * + * This tag is used to load a library from IsolateMirror.loadUri. The embedder + * should call Dart_LoadLibraryFromKernel to provide the library to the VM. The + * return value should be an error or library (the result from + * Dart_LoadLibraryFromKernel). + * + * Dart_kKernelTag + * + * This tag is used to load the intermediate file (kernel) generated by + * the Dart front end. This tag is typically used when a 'hot-reload' + * of an application is needed and the VM is 'use dart front end' mode. + * The dart front end typically compiles all the scripts, imports and part + * files into one intermediate file hence we don't use the source/import or + * script tags. The return value should be an error or a TypedData containing + * the kernel bytes. + * + */ +typedef Dart_Handle (*Dart_LibraryTagHandler)( + Dart_LibraryTag tag, + Dart_Handle library_or_package_map_url, + Dart_Handle url); + +/** + * Sets library tag handler for the current isolate. This handler is + * used to handle the various tags encountered while loading libraries + * or scripts in the isolate. + * + * \param handler Handler code to be used for handling the various tags + * encountered while loading libraries or scripts in the isolate. + * + * \return If no error occurs, the handler is set for the isolate. + * Otherwise an error handle is returned. + * + * TODO(turnidge): Document. + */ +DART_EXPORT Dart_Handle +Dart_SetLibraryTagHandler(Dart_LibraryTagHandler handler); + +/** + * Handles deferred loading requests. When this handler is invoked, it should + * eventually load the deferred loading unit with the given id and call + * Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError. It is + * recommended that the loading occur asynchronously, but it is permitted to + * call Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError before the + * handler returns. + * + * If an error is returned, it will be propogated through + * `prefix.loadLibrary()`. This is useful for synchronous + * implementations, which must propogate any unwind errors from + * Dart_DeferredLoadComplete or Dart_DeferredLoadComplete. Otherwise the handler + * should return a non-error such as `Dart_Null()`. + */ +typedef Dart_Handle (*Dart_DeferredLoadHandler)(intptr_t loading_unit_id); + +/** + * Sets the deferred load handler for the current isolate. This handler is + * used to handle loading deferred imports in an AppJIT or AppAOT program. + */ +DART_EXPORT Dart_Handle +Dart_SetDeferredLoadHandler(Dart_DeferredLoadHandler handler); + +/** + * Notifies the VM that a deferred load completed successfully. This function + * will eventually cause the corresponding `prefix.loadLibrary()` futures to + * complete. + * + * Requires the current isolate to be the same current isolate during the + * invocation of the Dart_DeferredLoadHandler. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_DeferredLoadComplete(intptr_t loading_unit_id, + const uint8_t* snapshot_data, + const uint8_t* snapshot_instructions); + +/** + * Notifies the VM that a deferred load failed. This function + * will eventually cause the corresponding `prefix.loadLibrary()` futures to + * complete with an error. + * + * If `transient` is true, future invocations of `prefix.loadLibrary()` will + * trigger new load requests. If false, futures invocation will complete with + * the same error. + * + * Requires the current isolate to be the same current isolate during the + * invocation of the Dart_DeferredLoadHandler. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_DeferredLoadCompleteError(intptr_t loading_unit_id, + const char* error_message, + bool transient); + +/** + * Canonicalizes a url with respect to some library. + * + * The url is resolved with respect to the library's url and some url + * normalizations are performed. + * + * This canonicalization function should be sufficient for most + * embedders to implement the Dart_kCanonicalizeUrl tag. + * + * \param base_url The base url relative to which the url is + * being resolved. + * \param url The url being resolved and canonicalized. This + * parameter is a string handle. + * + * \return If no error occurs, a String object is returned. Otherwise + * an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url, + Dart_Handle url); + +/** + * Loads the root library for the current isolate. + * + * Requires there to be no current root library. + * + * \param buffer A buffer which contains a kernel binary (see + * pkg/kernel/binary.md). Must remain valid until isolate group shutdown. + * \param buffer_size Length of the passed in buffer. + * + * \return A handle to the root library, or an error. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_LoadScriptFromKernel(const uint8_t* kernel_buffer, intptr_t kernel_size); + +/** + * Gets the library for the root script for the current isolate. + * + * If the root script has not yet been set for the current isolate, + * this function returns Dart_Null(). This function never returns an + * error handle. + * + * \return Returns the root Library for the current isolate or Dart_Null(). + */ +DART_EXPORT Dart_Handle Dart_RootLibrary(); + +/** + * Sets the root library for the current isolate. + * + * \return Returns an error handle if `library` is not a library handle. + */ +DART_EXPORT Dart_Handle Dart_SetRootLibrary(Dart_Handle library); + +/** + * Lookup or instantiate a legacy type by name and type arguments from a + * Library. + * + * \param library The library containing the class or interface. + * \param class_name The class name for the type. + * \param number_of_type_arguments Number of type arguments. + * For non parametric types the number of type arguments would be 0. + * \param type_arguments Pointer to an array of type arguments. + * For non parameteric types a NULL would be passed in for this argument. + * + * \return If no error occurs, the type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library, + Dart_Handle class_name, + intptr_t number_of_type_arguments, + Dart_Handle* type_arguments); + +/** + * Lookup or instantiate a nullable type by name and type arguments from + * Library. + * + * \param library The library containing the class or interface. + * \param class_name The class name for the type. + * \param number_of_type_arguments Number of type arguments. + * For non parametric types the number of type arguments would be 0. + * \param type_arguments Pointer to an array of type arguments. + * For non parameteric types a NULL would be passed in for this argument. + * + * \return If no error occurs, the type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_GetNullableType(Dart_Handle library, + Dart_Handle class_name, + intptr_t number_of_type_arguments, + Dart_Handle* type_arguments); + +/** + * Lookup or instantiate a non-nullable type by name and type arguments from + * Library. + * + * \param library The library containing the class or interface. + * \param class_name The class name for the type. + * \param number_of_type_arguments Number of type arguments. + * For non parametric types the number of type arguments would be 0. + * \param type_arguments Pointer to an array of type arguments. + * For non parameteric types a NULL would be passed in for this argument. + * + * \return If no error occurs, the type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle +Dart_GetNonNullableType(Dart_Handle library, + Dart_Handle class_name, + intptr_t number_of_type_arguments, + Dart_Handle* type_arguments); + +/** + * Creates a nullable version of the provided type. + * + * \param type The type to be converted to a nullable type. + * + * \return If no error occurs, a nullable type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_TypeToNullableType(Dart_Handle type); + +/** + * Creates a non-nullable version of the provided type. + * + * \param type The type to be converted to a non-nullable type. + * + * \return If no error occurs, a non-nullable type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_TypeToNonNullableType(Dart_Handle type); + +/** + * A type's nullability. + * + * \param type A Dart type. + * \param result An out parameter containing the result of the check. True if + * the type is of the specified nullability, false otherwise. + * + * \return Returns an error handle if type is not of type Type. + */ +DART_EXPORT Dart_Handle Dart_IsNullableType(Dart_Handle type, bool* result); +DART_EXPORT Dart_Handle Dart_IsNonNullableType(Dart_Handle type, bool* result); +DART_EXPORT Dart_Handle Dart_IsLegacyType(Dart_Handle type, bool* result); + +/** + * Lookup a class or interface by name from a Library. + * + * \param library The library containing the class or interface. + * \param class_name The name of the class or interface. + * + * \return If no error occurs, the class or interface is + * returned. Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library, + Dart_Handle class_name); +/* TODO(asiva): The above method needs to be removed once all uses + * of it are removed from the embedder code. */ + +/** + * Returns an import path to a Library, such as "file:///test.dart" or + * "dart:core". + */ +DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library); + +/** + * Returns a URL from which a Library was loaded. + */ +DART_EXPORT Dart_Handle Dart_LibraryResolvedUrl(Dart_Handle library); + +/** + * \return An array of libraries. + */ +DART_EXPORT Dart_Handle Dart_GetLoadedLibraries(); + +DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url); +/* TODO(turnidge): Consider returning Dart_Null() when the library is + * not found to distinguish that from a true error case. */ + +/** + * Report an loading error for the library. + * + * \param library The library that failed to load. + * \param error The Dart error instance containing the load error. + * + * \return If the VM handles the error, the return value is + * a null handle. If it doesn't handle the error, the error + * object is returned. + */ +DART_EXPORT Dart_Handle Dart_LibraryHandleError(Dart_Handle library, + Dart_Handle error); + +/** + * Called by the embedder to load a partial program. Does not set the root + * library. + * + * \param buffer A buffer which contains a kernel binary (see + * pkg/kernel/binary.md). Must remain valid until isolate shutdown. + * \param buffer_size Length of the passed in buffer. + * + * \return A handle to the main library of the compilation unit, or an error. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_LoadLibraryFromKernel(const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size); + +/** + * Indicates that all outstanding load requests have been satisfied. + * This finalizes all the new classes loaded and optionally completes + * deferred library futures. + * + * Requires there to be a current isolate. + * + * \param complete_futures Specify true if all deferred library + * futures should be completed, false otherwise. + * + * \return Success if all classes have been finalized and deferred library + * futures are completed. Otherwise, returns an error. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_FinalizeLoading(bool complete_futures); + +/* + * ===== + * Peers + * ===== + */ + +/** + * The peer field is a lazily allocated field intended for storage of + * an uncommonly used values. Most instances types can have a peer + * field allocated. The exceptions are subtypes of Null, num, and + * bool. + */ + +/** + * Returns the value of peer field of 'object' in 'peer'. + * + * \param object An object. + * \param peer An out parameter that returns the value of the peer + * field. + * + * \return Returns an error if 'object' is a subtype of Null, num, or + * bool. + */ +DART_EXPORT Dart_Handle Dart_GetPeer(Dart_Handle object, void** peer); + +/** + * Sets the value of the peer field of 'object' to the value of + * 'peer'. + * + * \param object An object. + * \param peer A value to store in the peer field. + * + * \return Returns an error if 'object' is a subtype of Null, num, or + * bool. + */ +DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer); + +/* + * ====== + * Kernel + * ====== + */ + +/** + * Experimental support for Dart to Kernel parser isolate. + * + * TODO(hausner): Document finalized interface. + * + */ + +// TODO(33433): Remove kernel service from the embedding API. + +typedef enum { + Dart_KernelCompilationStatus_Unknown = -1, + Dart_KernelCompilationStatus_Ok = 0, + Dart_KernelCompilationStatus_Error = 1, + Dart_KernelCompilationStatus_Crash = 2, + Dart_KernelCompilationStatus_MsgFailed = 3, +} Dart_KernelCompilationStatus; + +typedef struct { + Dart_KernelCompilationStatus status; + bool null_safety; + char* error; + uint8_t* kernel; + intptr_t kernel_size; +} Dart_KernelCompilationResult; + +typedef enum { + Dart_KernelCompilationVerbosityLevel_Error = 0, + Dart_KernelCompilationVerbosityLevel_Warning, + Dart_KernelCompilationVerbosityLevel_Info, + Dart_KernelCompilationVerbosityLevel_All, +} Dart_KernelCompilationVerbosityLevel; + +DART_EXPORT bool Dart_IsKernelIsolate(Dart_Isolate isolate); +DART_EXPORT bool Dart_KernelIsolateIsRunning(); +DART_EXPORT Dart_Port Dart_KernelPort(); + +/** + * Compiles the given `script_uri` to a kernel file. + * + * \param platform_kernel A buffer containing the kernel of the platform (e.g. + * `vm_platform_strong.dill`). The VM does not take ownership of this memory. + * + * \param platform_kernel_size The length of the platform_kernel buffer. + * + * \param snapshot_compile Set to `true` when the compilation is for a snapshot. + * This is used by the frontend to determine if compilation related information + * should be printed to console (e.g., null safety mode). + * + * \param verbosity Specifies the logging behavior of the kernel compilation + * service. + * + * \return Returns the result of the compilation. + * + * On a successful compilation the returned [Dart_KernelCompilationResult] has + * a status of [Dart_KernelCompilationStatus_Ok] and the `kernel`/`kernel_size` + * fields are set. The caller takes ownership of the malloc()ed buffer. + * + * On a failed compilation the `error` might be set describing the reason for + * the failed compilation. The caller takes ownership of the malloc()ed + * error. + * + * Requires there to be a current isolate. + */ +DART_EXPORT Dart_KernelCompilationResult +Dart_CompileToKernel(const char* script_uri, + const uint8_t* platform_kernel, + const intptr_t platform_kernel_size, + bool incremental_compile, + bool snapshot_compile, + const char* package_config, + Dart_KernelCompilationVerbosityLevel verbosity); + +typedef struct { + const char* uri; + const char* source; +} Dart_SourceFile; + +DART_EXPORT Dart_KernelCompilationResult Dart_KernelListDependencies(); + +/** + * Sets the kernel buffer which will be used to load Dart SDK sources + * dynamically at runtime. + * + * \param platform_kernel A buffer containing kernel which has sources for the + * Dart SDK populated. Note: The VM does not take ownership of this memory. + * + * \param platform_kernel_size The length of the platform_kernel buffer. + */ +DART_EXPORT void Dart_SetDartLibrarySourcesKernel( + const uint8_t* platform_kernel, + const intptr_t platform_kernel_size); + +/** + * Detect the null safety opt-in status. + * + * When running from source, it is based on the opt-in status of `script_uri`. + * When running from a kernel buffer, it is based on the mode used when + * generating `kernel_buffer`. + * When running from an appJIT or AOT snapshot, it is based on the mode used + * when generating `snapshot_data`. + * + * \param script_uri Uri of the script that contains the source code + * + * \param package_config Uri of the package configuration file (either in format + * of .packages or .dart_tool/package_config.json) for the null safety + * detection to resolve package imports against. If this parameter is not + * passed the package resolution of the parent isolate should be used. + * + * \param original_working_directory current working directory when the VM + * process was launched, this is used to correctly resolve the path specified + * for package_config. + * + * \param snapshot_data + * + * \param snapshot_instructions Buffers containing a snapshot of the + * isolate or NULL if no snapshot is provided. If provided, the buffers must + * remain valid until the isolate shuts down. + * + * \param kernel_buffer + * + * \param kernel_buffer_size A buffer which contains a kernel/DIL program. Must + * remain valid until isolate shutdown. + * + * \return Returns true if the null safety is opted in by the input being + * run `script_uri`, `snapshot_data` or `kernel_buffer`. + * + */ +DART_EXPORT bool Dart_DetectNullSafety(const char* script_uri, + const char* package_config, + const char* original_working_directory, + const uint8_t* snapshot_data, + const uint8_t* snapshot_instructions, + const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size); + +#define DART_KERNEL_ISOLATE_NAME "kernel-service" + +/* + * ======= + * Service + * ======= + */ + +#define DART_VM_SERVICE_ISOLATE_NAME "vm-service" + +/** + * Returns true if isolate is the service isolate. + * + * \param isolate An isolate + * + * \return Returns true if 'isolate' is the service isolate. + */ +DART_EXPORT bool Dart_IsServiceIsolate(Dart_Isolate isolate); + +/** + * Writes the CPU profile to the timeline as a series of 'instant' events. + * + * Note that this is an expensive operation. + * + * \param main_port The main port of the Isolate whose profile samples to write. + * \param error An optional error, must be free()ed by caller. + * + * \return Returns true if the profile is successfully written and false + * otherwise. + */ +DART_EXPORT bool Dart_WriteProfileToTimeline(Dart_Port main_port, char** error); + +/* + * ============== + * Precompilation + * ============== + */ + +/** + * Compiles all functions reachable from entry points and marks + * the isolate to disallow future compilation. + * + * Entry points should be specified using `@pragma("vm:entry-point")` + * annotation. + * + * \return An error handle if a compilation error or runtime error running const + * constructors was encountered. + */ +DART_EXPORT Dart_Handle Dart_Precompile(); + +typedef void (*Dart_CreateLoadingUnitCallback)( + void* callback_data, + intptr_t loading_unit_id, + void** write_callback_data, + void** write_debug_callback_data); +typedef void (*Dart_StreamingWriteCallback)(void* callback_data, + const uint8_t* buffer, + intptr_t size); +typedef void (*Dart_StreamingCloseCallback)(void* callback_data); + +DART_EXPORT Dart_Handle Dart_LoadingUnitLibraryUris(intptr_t loading_unit_id); + +// On Darwin systems, 'dlsym' adds an '_' to the beginning of the symbol name. +// Use the '...CSymbol' definitions for resolving through 'dlsym'. The actual +// symbol names in the objects are given by the '...AsmSymbol' definitions. +#if defined(__APPLE__) +#define kSnapshotBuildIdCSymbol "kDartSnapshotBuildId" +#define kVmSnapshotDataCSymbol "kDartVmSnapshotData" +#define kVmSnapshotInstructionsCSymbol "kDartVmSnapshotInstructions" +#define kVmSnapshotBssCSymbol "kDartVmSnapshotBss" +#define kIsolateSnapshotDataCSymbol "kDartIsolateSnapshotData" +#define kIsolateSnapshotInstructionsCSymbol "kDartIsolateSnapshotInstructions" +#define kIsolateSnapshotBssCSymbol "kDartIsolateSnapshotBss" +#else +#define kSnapshotBuildIdCSymbol "_kDartSnapshotBuildId" +#define kVmSnapshotDataCSymbol "_kDartVmSnapshotData" +#define kVmSnapshotInstructionsCSymbol "_kDartVmSnapshotInstructions" +#define kVmSnapshotBssCSymbol "_kDartVmSnapshotBss" +#define kIsolateSnapshotDataCSymbol "_kDartIsolateSnapshotData" +#define kIsolateSnapshotInstructionsCSymbol "_kDartIsolateSnapshotInstructions" +#define kIsolateSnapshotBssCSymbol "_kDartIsolateSnapshotBss" +#endif + +#define kSnapshotBuildIdAsmSymbol "_kDartSnapshotBuildId" +#define kVmSnapshotDataAsmSymbol "_kDartVmSnapshotData" +#define kVmSnapshotInstructionsAsmSymbol "_kDartVmSnapshotInstructions" +#define kVmSnapshotBssAsmSymbol "_kDartVmSnapshotBss" +#define kIsolateSnapshotDataAsmSymbol "_kDartIsolateSnapshotData" +#define kIsolateSnapshotInstructionsAsmSymbol \ + "_kDartIsolateSnapshotInstructions" +#define kIsolateSnapshotBssAsmSymbol "_kDartIsolateSnapshotBss" + +/** + * Creates a precompiled snapshot. + * - A root library must have been loaded. + * - Dart_Precompile must have been called. + * + * Outputs an assembly file defining the symbols listed in the definitions + * above. + * + * The assembly should be compiled as a static or shared library and linked or + * loaded by the embedder. Running this snapshot requires a VM compiled with + * DART_PRECOMPILED_SNAPSHOT. The kDartVmSnapshotData and + * kDartVmSnapshotInstructions should be passed to Dart_Initialize. The + * kDartIsolateSnapshotData and kDartIsolateSnapshotInstructions should be + * passed to Dart_CreateIsolateGroup. + * + * The callback will be invoked one or more times to provide the assembly code. + * + * If stripped is true, then the assembly code will not include DWARF + * debugging sections. + * + * If debug_callback_data is provided, debug_callback_data will be used with + * the callback to provide separate debugging information. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsAssembly(Dart_StreamingWriteCallback callback, + void* callback_data, + bool stripped, + void* debug_callback_data); +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsAssemblies( + Dart_CreateLoadingUnitCallback next_callback, + void* next_callback_data, + bool stripped, + Dart_StreamingWriteCallback write_callback, + Dart_StreamingCloseCallback close_callback); + +/** + * Creates a precompiled snapshot. + * - A root library must have been loaded. + * - Dart_Precompile must have been called. + * + * Outputs an ELF shared library defining the symbols + * - _kDartVmSnapshotData + * - _kDartVmSnapshotInstructions + * - _kDartIsolateSnapshotData + * - _kDartIsolateSnapshotInstructions + * + * The shared library should be dynamically loaded by the embedder. + * Running this snapshot requires a VM compiled with DART_PRECOMPILED_SNAPSHOT. + * The kDartVmSnapshotData and kDartVmSnapshotInstructions should be passed to + * Dart_Initialize. The kDartIsolateSnapshotData and + * kDartIsolateSnapshotInstructions should be passed to Dart_CreateIsolate. + * + * The callback will be invoked one or more times to provide the binary output. + * + * If stripped is true, then the binary output will not include DWARF + * debugging sections. + * + * If debug_callback_data is provided, debug_callback_data will be used with + * the callback to provide separate debugging information. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsElf(Dart_StreamingWriteCallback callback, + void* callback_data, + bool stripped, + void* debug_callback_data); +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsElfs(Dart_CreateLoadingUnitCallback next_callback, + void* next_callback_data, + bool stripped, + Dart_StreamingWriteCallback write_callback, + Dart_StreamingCloseCallback close_callback); + +/** + * Like Dart_CreateAppAOTSnapshotAsAssembly, but only includes + * kDartVmSnapshotData and kDartVmSnapshotInstructions. It also does + * not strip DWARF information from the generated assembly or allow for + * separate debug information. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateVMAOTSnapshotAsAssembly(Dart_StreamingWriteCallback callback, + void* callback_data); + +/** + * Sorts the class-ids in depth first traversal order of the inheritance + * tree. This is a costly operation, but it can make method dispatch + * more efficient and is done before writing snapshots. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_SortClasses(); + +/** + * Creates a snapshot that caches compiled code and type feedback for faster + * startup and quicker warmup in a subsequent process. + * + * Outputs a snapshot in two pieces. The pieces should be passed to + * Dart_CreateIsolateGroup in a VM using the same VM snapshot pieces used in the + * current VM. The instructions piece must be loaded with read and execute + * permissions; the data piece may be loaded as read-only. + * + * - Requires the VM to have not been started with --precompilation. + * - Not supported when targeting IA32. + * - The VM writing the snapshot and the VM reading the snapshot must be the + * same version, must be built in the same DEBUG/RELEASE/PRODUCT mode, must + * be targeting the same architecture, and must both be in checked mode or + * both in unchecked mode. + * + * The buffers are scope allocated and are only valid until the next call to + * Dart_ExitScope. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_data_buffer, + intptr_t* isolate_snapshot_data_size, + uint8_t** isolate_snapshot_instructions_buffer, + intptr_t* isolate_snapshot_instructions_size); + +/** + * Like Dart_CreateAppJITSnapshotAsBlobs, but also creates a new VM snapshot. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateCoreJITSnapshotAsBlobs( + uint8_t** vm_snapshot_data_buffer, + intptr_t* vm_snapshot_data_size, + uint8_t** vm_snapshot_instructions_buffer, + intptr_t* vm_snapshot_instructions_size, + uint8_t** isolate_snapshot_data_buffer, + intptr_t* isolate_snapshot_data_size, + uint8_t** isolate_snapshot_instructions_buffer, + intptr_t* isolate_snapshot_instructions_size); + +/** + * Get obfuscation map for precompiled code. + * + * Obfuscation map is encoded as a JSON array of pairs (original name, + * obfuscated name). + * + * \return Returns an error handler if the VM was built in a mode that does not + * support obfuscation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_GetObfuscationMap(uint8_t** buffer, intptr_t* buffer_length); + +/** + * Returns whether the VM only supports running from precompiled snapshots and + * not from any other kind of snapshot or from source (that is, the VM was + * compiled with DART_PRECOMPILED_RUNTIME). + */ +DART_EXPORT bool Dart_IsPrecompiledRuntime(); + +/** + * Print a native stack trace. Used for crash handling. + * + * If context is NULL, prints the current stack trace. Otherwise, context + * should be a CONTEXT* (Windows) or ucontext_t* (POSIX) from a signal handler + * running on the current thread. + */ +DART_EXPORT void Dart_DumpNativeStackTrace(void* context); + +/** + * Indicate that the process is about to abort, and the Dart VM should not + * attempt to cleanup resources. + */ +DART_EXPORT void Dart_PrepareToAbort(); + +#endif /* INCLUDE_DART_API_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/dart-sdk/include/dart_api_dl.c b/experimental/pedometer/src/dart-sdk/include/dart_api_dl.c new file mode 100644 index 000000000..c4a68f444 --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/dart_api_dl.c @@ -0,0 +1,59 @@ +/* + * 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. + */ + +#include "dart_api_dl.h" /* NOLINT */ +#include "dart_version.h" /* NOLINT */ +#include "internal/dart_api_dl_impl.h" /* NOLINT */ + +#include + +#define DART_API_DL_DEFINITIONS(name, R, A) name##_Type name##_DL = NULL; + +DART_API_ALL_DL_SYMBOLS(DART_API_DL_DEFINITIONS) + +#undef DART_API_DL_DEFINITIONS + +typedef void* DartApiEntry_function; + +DartApiEntry_function FindFunctionPointer(const DartApiEntry* entries, + const char* name) { + while (entries->name != NULL) { + if (strcmp(entries->name, name) == 0) return entries->function; + entries++; + } + return NULL; +} + +intptr_t Dart_InitializeApiDL(void* data) { + DartApi* dart_api_data = (DartApi*)data; + + if (dart_api_data->major != DART_API_DL_MAJOR_VERSION) { + // If the DartVM we're running on does not have the same version as this + // file was compiled against, refuse to initialize. The symbols are not + // compatible. + return -1; + } + // Minor versions are allowed to be different. + // If the DartVM has a higher minor version, it will provide more symbols + // than we initialize here. + // If the DartVM has a lower minor version, it will not provide all symbols. + // In that case, we leave the missing symbols un-initialized. Those symbols + // should not be used by the Dart and native code. The client is responsible + // for checking the minor version number himself based on which symbols it + // is using. + // (If we would error out on this case, recompiling native code against a + // newer SDK would break all uses on older SDKs, which is too strict.) + + const DartApiEntry* dart_api_function_pointers = dart_api_data->functions; + +#define DART_API_DL_INIT(name, R, A) \ + name##_DL = \ + (name##_Type)(FindFunctionPointer(dart_api_function_pointers, #name)); + DART_API_ALL_DL_SYMBOLS(DART_API_DL_INIT) +#undef DART_API_DL_INIT + + return 0; +} diff --git a/experimental/pedometer/src/dart-sdk/include/dart_api_dl.h b/experimental/pedometer/src/dart-sdk/include/dart_api_dl.h new file mode 100644 index 000000000..62f48b63f --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/dart_api_dl.h @@ -0,0 +1,150 @@ +/* + * 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. + */ + +#ifndef RUNTIME_INCLUDE_DART_API_DL_H_ +#define RUNTIME_INCLUDE_DART_API_DL_H_ + +#include "dart_api.h" /* NOLINT */ +#include "dart_native_api.h" /* NOLINT */ + +/** \mainpage Dynamically Linked Dart API + * + * This exposes a subset of symbols from dart_api.h and dart_native_api.h + * available in every Dart embedder through dynamic linking. + * + * All symbols are postfixed with _DL to indicate that they are dynamically + * linked and to prevent conflicts with the original symbol. + * + * Link `dart_api_dl.c` file into your library and invoke + * `Dart_InitializeApiDL` with `NativeApi.initializeApiDLData`. + */ + +DART_EXPORT intptr_t Dart_InitializeApiDL(void* data); + +// ============================================================================ +// IMPORTANT! Never update these signatures without properly updating +// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION. +// +// Verbatim copy of `dart_native_api.h` and `dart_api.h` symbol names and types +// to trigger compile-time errors if the sybols in those files are updated +// without updating these. +// +// Function return and argument types, and typedefs are carbon copied. Structs +// are typechecked nominally in C/C++, so they are not copied, instead a +// comment is added to their definition. +typedef int64_t Dart_Port_DL; + +typedef void (*Dart_NativeMessageHandler_DL)(Dart_Port_DL dest_port_id, + Dart_CObject* message); + +// dart_native_api.h symbols can be called on any thread. +#define DART_NATIVE_API_DL_SYMBOLS(F) \ + /***** dart_native_api.h *****/ \ + /* Dart_Port */ \ + F(Dart_PostCObject, bool, (Dart_Port_DL port_id, Dart_CObject * message)) \ + F(Dart_PostInteger, bool, (Dart_Port_DL port_id, int64_t message)) \ + F(Dart_NewNativePort, Dart_Port_DL, \ + (const char* name, Dart_NativeMessageHandler_DL handler, \ + bool handle_concurrently)) \ + F(Dart_CloseNativePort, bool, (Dart_Port_DL native_port_id)) + +// dart_api.h symbols can only be called on Dart threads. +#define DART_API_DL_SYMBOLS(F) \ + /***** dart_api.h *****/ \ + /* Errors */ \ + F(Dart_IsError, bool, (Dart_Handle handle)) \ + F(Dart_IsApiError, bool, (Dart_Handle handle)) \ + F(Dart_IsUnhandledExceptionError, bool, (Dart_Handle handle)) \ + F(Dart_IsCompilationError, bool, (Dart_Handle handle)) \ + F(Dart_IsFatalError, bool, (Dart_Handle handle)) \ + F(Dart_GetError, const char*, (Dart_Handle handle)) \ + F(Dart_ErrorHasException, bool, (Dart_Handle handle)) \ + F(Dart_ErrorGetException, Dart_Handle, (Dart_Handle handle)) \ + F(Dart_ErrorGetStackTrace, Dart_Handle, (Dart_Handle handle)) \ + F(Dart_NewApiError, Dart_Handle, (const char* error)) \ + F(Dart_NewCompilationError, Dart_Handle, (const char* error)) \ + F(Dart_NewUnhandledExceptionError, Dart_Handle, (Dart_Handle exception)) \ + F(Dart_PropagateError, void, (Dart_Handle handle)) \ + /* Dart_Handle, Dart_PersistentHandle, Dart_WeakPersistentHandle */ \ + F(Dart_HandleFromPersistent, Dart_Handle, (Dart_PersistentHandle object)) \ + F(Dart_HandleFromWeakPersistent, Dart_Handle, \ + (Dart_WeakPersistentHandle object)) \ + F(Dart_NewPersistentHandle, Dart_PersistentHandle, (Dart_Handle object)) \ + F(Dart_SetPersistentHandle, void, \ + (Dart_PersistentHandle obj1, Dart_Handle obj2)) \ + F(Dart_DeletePersistentHandle, void, (Dart_PersistentHandle object)) \ + F(Dart_NewWeakPersistentHandle, Dart_WeakPersistentHandle, \ + (Dart_Handle object, void* peer, intptr_t external_allocation_size, \ + Dart_HandleFinalizer callback)) \ + F(Dart_DeleteWeakPersistentHandle, void, (Dart_WeakPersistentHandle object)) \ + F(Dart_UpdateExternalSize, void, \ + (Dart_WeakPersistentHandle object, intptr_t external_allocation_size)) \ + F(Dart_NewFinalizableHandle, Dart_FinalizableHandle, \ + (Dart_Handle object, void* peer, intptr_t external_allocation_size, \ + Dart_HandleFinalizer callback)) \ + F(Dart_DeleteFinalizableHandle, void, \ + (Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object)) \ + F(Dart_UpdateFinalizableExternalSize, void, \ + (Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object, \ + intptr_t external_allocation_size)) \ + /* Dart_Port */ \ + F(Dart_Post, bool, (Dart_Port_DL port_id, Dart_Handle object)) \ + F(Dart_NewSendPort, Dart_Handle, (Dart_Port_DL port_id)) \ + F(Dart_SendPortGetId, Dart_Handle, \ + (Dart_Handle port, Dart_Port_DL * port_id)) \ + /* Scopes */ \ + F(Dart_EnterScope, void, ()) \ + F(Dart_ExitScope, void, ()) + +#define DART_API_ALL_DL_SYMBOLS(F) \ + DART_NATIVE_API_DL_SYMBOLS(F) \ + DART_API_DL_SYMBOLS(F) +// IMPORTANT! Never update these signatures without properly updating +// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION. +// +// End of verbatim copy. +// ============================================================================ + +// Copy of definition of DART_EXPORT without 'used' attribute. +// +// The 'used' attribute cannot be used with DART_API_ALL_DL_SYMBOLS because +// they are not function declarations, but variable declarations with a +// function pointer type. +// +// The function pointer variables are initialized with the addresses of the +// functions in the VM. If we were to use function declarations instead, we +// would need to forward the call to the VM adding indirection. +#if defined(__CYGWIN__) +#error Tool chain and platform not supported. +#elif defined(_WIN32) +#if defined(DART_SHARED_LIB) +#define DART_EXPORT_DL DART_EXTERN_C __declspec(dllexport) +#else +#define DART_EXPORT_DL DART_EXTERN_C +#endif +#else +#if __GNUC__ >= 4 +#if defined(DART_SHARED_LIB) +#define DART_EXPORT_DL DART_EXTERN_C __attribute__((visibility("default"))) +#else +#define DART_EXPORT_DL DART_EXTERN_C +#endif +#else +#error Tool chain not supported. +#endif +#endif + +#define DART_API_DL_DECLARATIONS(name, R, A) \ + typedef R(*name##_Type) A; \ + DART_EXPORT_DL name##_Type name##_DL; + +DART_API_ALL_DL_SYMBOLS(DART_API_DL_DECLARATIONS) + +#undef DART_API_DL_DECLARATIONS + +#undef DART_EXPORT_DL + +#endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */ \ No newline at end of file diff --git a/experimental/pedometer/src/dart-sdk/include/dart_native_api.h b/experimental/pedometer/src/dart-sdk/include/dart_native_api.h new file mode 100644 index 000000000..f99fff115 --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/dart_native_api.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNTIME_INCLUDE_DART_NATIVE_API_H_ +#define RUNTIME_INCLUDE_DART_NATIVE_API_H_ + +#include "dart_api.h" /* NOLINT */ + +/* + * ========================================== + * Message sending/receiving from native code + * ========================================== + */ + +/** + * A Dart_CObject is used for representing Dart objects as native C + * data outside the Dart heap. These objects are totally detached from + * the Dart heap. Only a subset of the Dart objects have a + * representation as a Dart_CObject. + * + * The string encoding in the 'value.as_string' is UTF-8. + * + * All the different types from dart:typed_data are exposed as type + * kTypedData. The specific type from dart:typed_data is in the type + * field of the as_typed_data structure. The length in the + * as_typed_data structure is always in bytes. + * + * The data for kTypedData is copied on message send and ownership remains with + * the caller. The ownership of data for kExternalTyped is passed to the VM on + * message send and returned when the VM invokes the + * Dart_HandleFinalizer callback; a non-NULL callback must be provided. + */ +typedef enum { + Dart_CObject_kNull = 0, + Dart_CObject_kBool, + Dart_CObject_kInt32, + Dart_CObject_kInt64, + Dart_CObject_kDouble, + Dart_CObject_kString, + Dart_CObject_kArray, + Dart_CObject_kTypedData, + Dart_CObject_kExternalTypedData, + Dart_CObject_kSendPort, + Dart_CObject_kCapability, + Dart_CObject_kNativePointer, + Dart_CObject_kUnsupported, + Dart_CObject_kNumberOfTypes +} Dart_CObject_Type; + +typedef struct _Dart_CObject { + Dart_CObject_Type type; + union { + bool as_bool; + int32_t as_int32; + int64_t as_int64; + double as_double; + char* as_string; + struct { + Dart_Port id; + Dart_Port origin_id; + } as_send_port; + struct { + int64_t id; + } as_capability; + struct { + intptr_t length; + struct _Dart_CObject** values; + } as_array; + struct { + Dart_TypedData_Type type; + intptr_t length; /* in elements, not bytes */ + uint8_t* values; + } as_typed_data; + struct { + Dart_TypedData_Type type; + intptr_t length; /* in elements, not bytes */ + uint8_t* data; + void* peer; + Dart_HandleFinalizer callback; + } as_external_typed_data; + struct { + intptr_t ptr; + intptr_t size; + Dart_HandleFinalizer callback; + } as_native_pointer; + } value; +} Dart_CObject; +// This struct is versioned by DART_API_DL_MAJOR_VERSION, bump the version when +// changing this struct. + +/** + * Posts a message on some port. The message will contain the Dart_CObject + * object graph rooted in 'message'. + * + * While the message is being sent the state of the graph of Dart_CObject + * structures rooted in 'message' should not be accessed, as the message + * generation will make temporary modifications to the data. When the message + * has been sent the graph will be fully restored. + * + * If true is returned, the message was enqueued, and finalizers for external + * typed data will eventually run, even if the receiving isolate shuts down + * before processing the message. If false is returned, the message was not + * enqueued and ownership of external typed data in the message remains with the + * caller. + * + * This function may be called on any thread when the VM is running (that is, + * after Dart_Initialize has returned and before Dart_Cleanup has been called). + * + * \param port_id The destination port. + * \param message The message to send. + * + * \return True if the message was posted. + */ +DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message); + +/** + * Posts a message on some port. The message will contain the integer 'message'. + * + * \param port_id The destination port. + * \param message The message to send. + * + * \return True if the message was posted. + */ +DART_EXPORT bool Dart_PostInteger(Dart_Port port_id, int64_t message); + +/** + * A native message handler. + * + * This handler is associated with a native port by calling + * Dart_NewNativePort. + * + * The message received is decoded into the message structure. The + * lifetime of the message data is controlled by the caller. All the + * data references from the message are allocated by the caller and + * will be reclaimed when returning to it. + */ +typedef void (*Dart_NativeMessageHandler)(Dart_Port dest_port_id, + Dart_CObject* message); + +/** + * Creates a new native port. When messages are received on this + * native port, then they will be dispatched to the provided native + * message handler. + * + * \param name The name of this port in debugging messages. + * \param handler The C handler to run when messages arrive on the port. + * \param handle_concurrently Is it okay to process requests on this + * native port concurrently? + * + * \return If successful, returns the port id for the native port. In + * case of error, returns ILLEGAL_PORT. + */ +DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, + Dart_NativeMessageHandler handler, + bool handle_concurrently); +/* TODO(turnidge): Currently handle_concurrently is ignored. */ + +/** + * Closes the native port with the given id. + * + * The port must have been allocated by a call to Dart_NewNativePort. + * + * \param native_port_id The id of the native port to close. + * + * \return Returns true if the port was closed successfully. + */ +DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id); + +/* + * ================== + * Verification Tools + * ================== + */ + +/** + * Forces all loaded classes and functions to be compiled eagerly in + * the current isolate.. + * + * TODO(turnidge): Document. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_CompileAll(); + +/** + * Finalizes all classes. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_FinalizeAllClasses(); + +/* This function is intentionally undocumented. + * + * It should not be used outside internal tests. + */ +DART_EXPORT void* Dart_ExecuteInternalCommand(const char* command, void* arg); + +#endif /* INCLUDE_DART_NATIVE_API_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/dart-sdk/include/dart_tools_api.h b/experimental/pedometer/src/dart-sdk/include/dart_tools_api.h new file mode 100644 index 000000000..f36ec6b56 --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/dart_tools_api.h @@ -0,0 +1,526 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNTIME_INCLUDE_DART_TOOLS_API_H_ +#define RUNTIME_INCLUDE_DART_TOOLS_API_H_ + +#include "dart_api.h" /* NOLINT */ + +/** \mainpage Dart Tools Embedding API Reference + * + * This reference describes the Dart embedding API for tools. Tools include + * a debugger, service protocol, and timeline. + * + * NOTE: The APIs described in this file are unstable and subject to change. + * + * This reference is generated from the header include/dart_tools_api.h. + */ + +/* + * ======== + * Debugger + * ======== + */ + +/** + * ILLEGAL_ISOLATE_ID is a number guaranteed never to be associated with a + * valid isolate. + */ +#define ILLEGAL_ISOLATE_ID ILLEGAL_PORT + + +/* + * ======= + * Service + * ======= + */ + +/** + * A service request callback function. + * + * These callbacks, registered by the embedder, are called when the VM receives + * a service request it can't handle and the service request command name + * matches one of the embedder registered handlers. + * + * The return value of the callback indicates whether the response + * should be used as a regular result or an error result. + * Specifically, if the callback returns true, a regular JSON-RPC + * response is built in the following way: + * + * { + * "jsonrpc": "2.0", + * "result": , + * "id": , + * } + * + * If the callback returns false, a JSON-RPC error is built like this: + * + * { + * "jsonrpc": "2.0", + * "error": , + * "id": , + * } + * + * \param method The rpc method name. + * \param param_keys Service requests can have key-value pair parameters. The + * keys and values are flattened and stored in arrays. + * \param param_values The values associated with the keys. + * \param num_params The length of the param_keys and param_values arrays. + * \param user_data The user_data pointer registered with this handler. + * \param result A C string containing a valid JSON object. The returned + * pointer will be freed by the VM by calling free. + * + * \return True if the result is a regular JSON-RPC response, false if the + * result is a JSON-RPC error. + */ +typedef bool (*Dart_ServiceRequestCallback)(const char* method, + const char** param_keys, + const char** param_values, + intptr_t num_params, + void* user_data, + const char** json_object); + +/** + * Register a Dart_ServiceRequestCallback to be called to handle + * requests for the named rpc on a specific isolate. The callback will + * be invoked with the current isolate set to the request target. + * + * \param method The name of the method that this callback is responsible for. + * \param callback The callback to invoke. + * \param user_data The user data passed to the callback. + * + * NOTE: If multiple callbacks with the same name are registered, only + * the last callback registered will be remembered. + */ +DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( + const char* method, + Dart_ServiceRequestCallback callback, + void* user_data); + +/** + * Register a Dart_ServiceRequestCallback to be called to handle + * requests for the named rpc. The callback will be invoked without a + * current isolate. + * + * \param method The name of the command that this callback is responsible for. + * \param callback The callback to invoke. + * \param user_data The user data passed to the callback. + * + * NOTE: If multiple callbacks with the same name are registered, only + * the last callback registered will be remembered. + */ +DART_EXPORT void Dart_RegisterRootServiceRequestCallback( + const char* method, + Dart_ServiceRequestCallback callback, + void* user_data); + +/** + * Embedder information which can be requested by the VM for internal or + * reporting purposes. + * + * The pointers in this structure are not going to be cached or freed by the VM. + */ + + #define DART_EMBEDDER_INFORMATION_CURRENT_VERSION (0x00000001) + +typedef struct { + int32_t version; + const char* name; // [optional] The name of the embedder + int64_t current_rss; // [optional] the current RSS of the embedder + int64_t max_rss; // [optional] the maximum RSS of the embedder +} Dart_EmbedderInformation; + +/** + * Callback provided by the embedder that is used by the vm to request + * information. + * + * \return Returns a pointer to a Dart_EmbedderInformation structure. + * The embedder keeps the ownership of the structure and any field in it. + * The embedder must ensure that the structure will remain valid until the + * next invokation of the callback. + */ +typedef void (*Dart_EmbedderInformationCallback)( + Dart_EmbedderInformation* info); + +/** + * Register a Dart_ServiceRequestCallback to be called to handle + * requests for the named rpc. The callback will be invoked without a + * current isolate. + * + * \param method The name of the command that this callback is responsible for. + * \param callback The callback to invoke. + * \param user_data The user data passed to the callback. + * + * NOTE: If multiple callbacks with the same name are registered, only + * the last callback registered will be remembered. + */ +DART_EXPORT void Dart_SetEmbedderInformationCallback( + Dart_EmbedderInformationCallback callback); + +/** + * Invoke a vm-service method and wait for its result. + * + * \param request_json The utf8-encoded json-rpc request. + * \param request_json_length The length of the json-rpc request. + * + * \param response_json The returned utf8-encoded json response, must be + * free()ed by caller. + * \param response_json_length The length of the returned json response. + * \param error An optional error, must be free()ed by caller. + * + * \return Whether the call was sucessfully performed. + * + * NOTE: This method does not need a current isolate and must not have the + * vm-isolate being the current isolate. It must be called after + * Dart_Initialize() and before Dart_Cleanup(). + */ +DART_EXPORT bool Dart_InvokeVMServiceMethod(uint8_t* request_json, + intptr_t request_json_length, + uint8_t** response_json, + intptr_t* response_json_length, + char** error); + +/* + * ======== + * Event Streams + * ======== + */ + +/** + * A callback invoked when the VM service gets a request to listen to + * some stream. + * + * \return Returns true iff the embedder supports the named stream id. + */ +typedef bool (*Dart_ServiceStreamListenCallback)(const char* stream_id); + +/** + * A callback invoked when the VM service gets a request to cancel + * some stream. + */ +typedef void (*Dart_ServiceStreamCancelCallback)(const char* stream_id); + +/** + * Adds VM service stream callbacks. + * + * \param listen_callback A function pointer to a listen callback function. + * A listen callback function should not be already set when this function + * is called. A NULL value removes the existing listen callback function + * if any. + * + * \param cancel_callback A function pointer to a cancel callback function. + * A cancel callback function should not be already set when this function + * is called. A NULL value removes the existing cancel callback function + * if any. + * + * \return Success if the callbacks were added. Otherwise, returns an + * error handle. + */ +DART_EXPORT char* Dart_SetServiceStreamCallbacks( + Dart_ServiceStreamListenCallback listen_callback, + Dart_ServiceStreamCancelCallback cancel_callback); + +/** + * A callback invoked when the VM service receives an event. + */ +typedef void (*Dart_NativeStreamConsumer)(const uint8_t* event_json, + intptr_t event_json_length); + +/** + * Sets the native VM service stream callbacks for a particular stream. + * Note: The function may be called on multiple threads concurrently. + * + * \param consumer A function pointer to an event handler callback function. + * A NULL value removes the existing listen callback function if any. + * + * \param stream_id The ID of the stream on which to set the callback. + */ +DART_EXPORT void Dart_SetNativeServiceStreamCallback( + Dart_NativeStreamConsumer consumer, + const char* stream_id); + +/** + * Sends a data event to clients of the VM Service. + * + * A data event is used to pass an array of bytes to subscribed VM + * Service clients. For example, in the standalone embedder, this is + * function used to provide WriteEvents on the Stdout and Stderr + * streams. + * + * If the embedder passes in a stream id for which no client is + * subscribed, then the event is ignored. + * + * \param stream_id The id of the stream on which to post the event. + * + * \param event_kind A string identifying what kind of event this is. + * For example, 'WriteEvent'. + * + * \param bytes A pointer to an array of bytes. + * + * \param bytes_length The length of the byte array. + * + * \return NULL if the arguments are well formed. Otherwise, returns an + * error string. The caller is responsible for freeing the error message. + */ +DART_EXPORT char* Dart_ServiceSendDataEvent(const char* stream_id, + const char* event_kind, + const uint8_t* bytes, + intptr_t bytes_length); + +/** + * Usage statistics for a space/generation at a particular moment in time. + * + * \param used Amount of memory used, in bytes. + * + * \param capacity Memory capacity, in bytes. + * + * \param external External memory, in bytes. + * + * \param collections How many times the garbage collector has run in this + * space. + * + * \param time Cumulative time spent collecting garbage in this space, in + * seconds. + * + * \param avg_collection_period Average time between garbage collector running + * in this space, in milliseconds. + */ +typedef struct { + intptr_t used; + intptr_t capacity; + intptr_t external; + intptr_t collections; + double time; + double avg_collection_period; +} Dart_GCStats; + +/** + * A Garbage Collection event with memory usage statistics. + * + * \param type The event type. Static lifetime. + * + * \param reason The reason for the GC event. Static lifetime. + * + * \param new_space Data for New Space. + * + * \param old_space Data for Old Space. + */ +typedef struct { + const char* type; + const char* reason; + const char* isolate_id; + + Dart_GCStats new_space; + Dart_GCStats old_space; +} Dart_GCEvent; + +/** + * A callback invoked when the VM emits a GC event. + * + * \param event The GC event data. Pointer only valid for the duration of the + * callback. + */ +typedef void (*Dart_GCEventCallback)(Dart_GCEvent* event); + +/** + * Sets the native GC event callback. + * + * \param callback A function pointer to an event handler callback function. + * A NULL value removes the existing listen callback function if any. + */ +DART_EXPORT void Dart_SetGCEventCallback(Dart_GCEventCallback callback); + +/* + * ======== + * Reload support + * ======== + * + * These functions are used to implement reloading in the Dart VM. + * This is an experimental feature, so embedders should be prepared + * for these functions to change. + */ + +/** + * A callback which determines whether the file at some url has been + * modified since some time. If the file cannot be found, true should + * be returned. + */ +typedef bool (*Dart_FileModifiedCallback)(const char* url, int64_t since); + +DART_EXPORT char* Dart_SetFileModifiedCallback( + Dart_FileModifiedCallback file_modified_callback); + +/** + * Returns true if isolate is currently reloading. + */ +DART_EXPORT bool Dart_IsReloading(); + +/* + * ======== + * Timeline + * ======== + */ + +/** + * Returns a timestamp in microseconds. This timestamp is suitable for + * passing into the timeline system, and uses the same monotonic clock + * as dart:developer's Timeline.now. + * + * \return A timestamp that can be passed to the timeline system. + */ +DART_EXPORT int64_t Dart_TimelineGetMicros(); + +/** + * Returns a raw timestamp in from the monotonic clock. + * + * \return A raw timestamp from the monotonic clock. + */ +DART_EXPORT int64_t Dart_TimelineGetTicks(); + +/** + * Returns the frequency of the monotonic clock. + * + * \return The frequency of the monotonic clock. + */ +DART_EXPORT int64_t Dart_TimelineGetTicksFrequency(); + +typedef enum { + Dart_Timeline_Event_Begin, // Phase = 'B'. + Dart_Timeline_Event_End, // Phase = 'E'. + Dart_Timeline_Event_Instant, // Phase = 'i'. + Dart_Timeline_Event_Duration, // Phase = 'X'. + Dart_Timeline_Event_Async_Begin, // Phase = 'b'. + Dart_Timeline_Event_Async_End, // Phase = 'e'. + Dart_Timeline_Event_Async_Instant, // Phase = 'n'. + Dart_Timeline_Event_Counter, // Phase = 'C'. + Dart_Timeline_Event_Flow_Begin, // Phase = 's'. + Dart_Timeline_Event_Flow_Step, // Phase = 't'. + Dart_Timeline_Event_Flow_End, // Phase = 'f'. +} Dart_Timeline_Event_Type; + +/** + * Add a timeline event to the embedder stream. + * + * \param label The name of the event. Its lifetime must extend at least until + * Dart_Cleanup. + * \param timestamp0 The first timestamp of the event. + * \param timestamp1_or_async_id The second timestamp of the event or + * the async id. + * \param argument_count The number of argument names and values. + * \param argument_names An array of names of the arguments. The lifetime of the + * names must extend at least until Dart_Cleanup. The array may be reclaimed + * when this call returns. + * \param argument_values An array of values of the arguments. The values and + * the array may be reclaimed when this call returns. + */ +DART_EXPORT void Dart_TimelineEvent(const char* label, + int64_t timestamp0, + int64_t timestamp1_or_async_id, + Dart_Timeline_Event_Type type, + intptr_t argument_count, + const char** argument_names, + const char** argument_values); + +/** + * Associates a name with the current thread. This name will be used to name + * threads in the timeline. Can only be called after a call to Dart_Initialize. + * + * \param name The name of the thread. + */ +DART_EXPORT void Dart_SetThreadName(const char* name); + +/* + * ======= + * Metrics + * ======= + */ + +/** + * Return metrics gathered for the VM and individual isolates. + * + * NOTE: Non-heap metrics are not available in PRODUCT builds of Dart. + * Calling the non-heap metric functions on a PRODUCT build might return invalid metrics. + */ +DART_EXPORT int64_t Dart_VMIsolateCountMetric(); // Counter +DART_EXPORT int64_t Dart_VMCurrentRSSMetric(); // Byte +DART_EXPORT int64_t Dart_VMPeakRSSMetric(); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapOldUsedMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapOldUsedMaxMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapOldCapacityMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapOldCapacityMaxMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapOldExternalMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapNewUsedMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapNewUsedMaxMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapNewCapacityMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapNewCapacityMaxMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapNewExternalMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapGlobalUsedMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateHeapGlobalUsedMaxMetric(Dart_Isolate isolate); // Byte +DART_EXPORT int64_t +Dart_IsolateRunnableLatencyMetric(Dart_Isolate isolate); // Microsecond +DART_EXPORT int64_t +Dart_IsolateRunnableHeapSizeMetric(Dart_Isolate isolate); // Byte + +/* + * ======== + * UserTags + * ======== + */ + +/* + * Gets the current isolate's currently set UserTag instance. + * + * \return The currently set UserTag instance. + */ +DART_EXPORT Dart_Handle Dart_GetCurrentUserTag(); + +/* + * Gets the current isolate's default UserTag instance. + * + * \return The default UserTag with label 'Default' + */ +DART_EXPORT Dart_Handle Dart_GetDefaultUserTag(); + +/* + * Creates a new UserTag instance. + * + * \param label The name of the new UserTag. + * + * \return The newly created UserTag instance or an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewUserTag(const char* label); + +/* + * Updates the current isolate's UserTag to a new value. + * + * \param user_tag The UserTag to be set as the current UserTag. + * + * \return The previously set UserTag instance or an error handle. + */ +DART_EXPORT Dart_Handle Dart_SetCurrentUserTag(Dart_Handle user_tag); + +/* + * Returns the label of a given UserTag instance. + * + * \param user_tag The UserTag from which the label will be retrieved. + * + * \return The UserTag's label. NULL if the user_tag is invalid. The caller is + * responsible for freeing the returned label. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_GetUserTagLabel( + Dart_Handle user_tag); + +#endif // RUNTIME_INCLUDE_DART_TOOLS_API_H_ diff --git a/experimental/pedometer/src/dart-sdk/include/dart_version.h b/experimental/pedometer/src/dart-sdk/include/dart_version.h new file mode 100644 index 000000000..b3b492439 --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/dart_version.h @@ -0,0 +1,16 @@ +/* + * 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. + */ + +#ifndef RUNTIME_INCLUDE_DART_VERSION_H_ +#define RUNTIME_INCLUDE_DART_VERSION_H_ + +// On breaking changes the major version is increased. +// On backwards compatible changes the minor version is increased. +// The versioning covers the symbols exposed in dart_api_dl.h +#define DART_API_DL_MAJOR_VERSION 2 +#define DART_API_DL_MINOR_VERSION 0 + +#endif /* RUNTIME_INCLUDE_DART_VERSION_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/dart-sdk/include/internal/dart_api_dl_impl.h b/experimental/pedometer/src/dart-sdk/include/internal/dart_api_dl_impl.h new file mode 100644 index 000000000..ad13a4b81 --- /dev/null +++ b/experimental/pedometer/src/dart-sdk/include/internal/dart_api_dl_impl.h @@ -0,0 +1,21 @@ +/* + * 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. + */ + +#ifndef RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ +#define RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ + +typedef struct { + const char* name; + void (*function)(); +} DartApiEntry; + +typedef struct { + const int major; + const int minor; + const DartApiEntry* const functions; +} DartApi; + +#endif /* RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/.clang-format b/experimental/pedometer/src/health_connect/.clang-format new file mode 100644 index 000000000..a256c2f09 --- /dev/null +++ b/experimental/pedometer/src/health_connect/.clang-format @@ -0,0 +1,15 @@ +# From dart SDK: https://github.com/dart-lang/sdk/blob/main/.clang-format + +# Defines the Chromium style for automatic reformatting. +# http://clang.llvm.org/docs/ClangFormatStyleOptions.html +BasedOnStyle: Chromium + +# clang-format doesn't seem to do a good job of this for longer comments. +ReflowComments: 'false' + +# We have lots of these. Though we need to put them all in curly braces, +# clang-format can't do that. +AllowShortIfStatementsOnASingleLine: 'true' + +# Put escaped newlines into the rightmost column. +AlignEscapedNewlinesLeft: false diff --git a/experimental/pedometer/src/health_connect/CMakeLists.txt b/experimental/pedometer/src/health_connect/CMakeLists.txt new file mode 100644 index 000000000..4877658b8 --- /dev/null +++ b/experimental/pedometer/src/health_connect/CMakeLists.txt @@ -0,0 +1,32 @@ +# jni_native_build (Build with jni:setup. Do not delete this line.) + +# The Flutter tooling requires that developers have CMake 3.10 or later +# installed. You should not increase this version, as doing so will cause +# the plugin to fail to compile for some customers of the plugin. +cmake_minimum_required(VERSION 3.10) + +project(health_connect VERSION 0.0.1 LANGUAGES C) + +add_library(health_connect SHARED + "./health_connect.c" +) + +set_target_properties(health_connect PROPERTIES + OUTPUT_NAME "health_connect" +) + +target_compile_definitions(health_connect PUBLIC DART_SHARED_LIB) + +if(WIN32) + set_target_properties(${TARGET_NAME} PROPERTIES + LINK_FLAGS "/DELAYLOAD:jvm.dll") +endif() + +if (ANDROID) + target_link_libraries(health_connect log) +else() + find_package(Java REQUIRED) + find_package(JNI REQUIRED) + include_directories(${JNI_INCLUDE_DIRS}) + target_link_libraries(health_connect ${JNI_LIBRARIES}) +endif() diff --git a/experimental/pedometer/src/health_connect/dartjni.h b/experimental/pedometer/src/health_connect/dartjni.h new file mode 100644 index 000000000..46907544a --- /dev/null +++ b/experimental/pedometer/src/health_connect/dartjni.h @@ -0,0 +1,277 @@ +// Copyright (c) 2022, 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. + +#pragma once + +// Note: include appropriate system jni.h as found by CMake, not third_party/jni.h. +#include +#include +#include +#include + +#include "include/dart_api.h" +#include "include/dart_native_api.h" + +#include "include/dart_api_dl.h" + +#if _WIN32 +#include +#else +#include +#include +#endif + +#if _WIN32 +#define FFI_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FFI_PLUGIN_EXPORT +#endif + +#if defined _WIN32 +#define thread_local __declspec(thread) +#else +#define thread_local __thread +#endif + +#ifdef __ANDROID__ +#include +#endif + +#ifdef __ANDROID__ +#define __ENVP_CAST (JNIEnv**) +#else +#define __ENVP_CAST (void**) +#endif + +/// Stores the global state of the JNI. +typedef struct JniContext { + JavaVM* jvm; + jobject classLoader; + jmethodID loadClassMethod; + jobject currentActivity; + jobject appContext; +} JniContext; + +// jniEnv for this thread, used by inline functions in this header, +// therefore declared as extern. +extern thread_local JNIEnv* jniEnv; + +extern JniContext jni; + +/// Types used by JNI API to distinguish between primitive types. +enum JniType { + booleanType = 0, + byteType = 1, + shortType = 2, + charType = 3, + intType = 4, + longType = 5, + floatType = 6, + doubleType = 7, + objectType = 8, + voidType = 9, +}; + +/// Result type for use by JNI. +/// +/// If [exception] is null, it means the result is valid. +/// It's assumed that the caller knows the expected type in [result]. +typedef struct JniResult { + jvalue result; + jthrowable exception; +} JniResult; + +/// Similar to [JniResult] but for class lookups. +typedef struct JniClassLookupResult { + jclass classRef; + jthrowable exception; +} JniClassLookupResult; + +/// Similar to [JniResult] but for method/field ID lookups. +typedef struct JniPointerResult { + void* id; + jthrowable exception; +} JniPointerResult; + +/// JniExceptionDetails holds 2 jstring objects, one is the result of +/// calling `toString` on exception object, other is stack trace; +typedef struct JniExceptionDetails { + jstring message; + jstring stacktrace; +} JniExceptionDetails; + +/// This struct contains functions which wrap method call / field access conveniently along with +/// exception checking. +/// +/// Flutter embedding checks for pending JNI exceptions before an FFI transition, which requires us +/// to check for and clear the exception before returning to dart code, which requires these functions +/// to return result types. +typedef struct JniAccessors { + JniClassLookupResult (*getClass)(char* internalName); + JniPointerResult (*getFieldID)(jclass cls, char* fieldName, char* signature); + JniPointerResult (*getStaticFieldID)(jclass cls, + char* fieldName, + char* signature); + JniPointerResult (*getMethodID)(jclass cls, + char* methodName, + char* signature); + JniPointerResult (*getStaticMethodID)(jclass cls, + char* methodName, + char* signature); + JniResult (*newObject)(jclass cls, jmethodID ctor, jvalue* args); + JniPointerResult (*newPrimitiveArray)(jsize length, int type); + JniPointerResult (*newObjectArray)(jsize length, + jclass elementClass, + jobject initialElement); + JniResult (*getArrayElement)(jarray array, int index, int type); + JniResult (*callMethod)(jobject obj, + jmethodID methodID, + int callType, + jvalue* args); + JniResult (*callStaticMethod)(jclass cls, + jmethodID methodID, + int callType, + jvalue* args); + JniResult (*getField)(jobject obj, jfieldID fieldID, int callType); + JniResult (*getStaticField)(jclass cls, jfieldID fieldID, int callType); + JniExceptionDetails (*getExceptionDetails)(jthrowable exception); +} JniAccessors; + +FFI_PLUGIN_EXPORT JniAccessors* GetAccessors(); + +FFI_PLUGIN_EXPORT JavaVM* GetJavaVM(void); + +FFI_PLUGIN_EXPORT JNIEnv* GetJniEnv(void); + +FFI_PLUGIN_EXPORT JNIEnv* SpawnJvm(JavaVMInitArgs* args); + +FFI_PLUGIN_EXPORT jclass LoadClass(const char* name); + +FFI_PLUGIN_EXPORT jobject GetClassLoader(void); + +FFI_PLUGIN_EXPORT jobject GetApplicationContext(void); + +FFI_PLUGIN_EXPORT jobject GetCurrentActivity(void); + +// Migration note: Below inline functions are required by C bindings, but can be moved to dartjni.c +// once migration to pure dart bindings is complete. + +// `static inline` because `inline` doesn't work, it may still not +// inline the function in which case a linker error may be produced. +// +// There has to be a better way to do this. Either to force inlining on target +// platforms, or just leave it as normal function. + +static inline void __load_class_into(jclass* cls, const char* name) { +#ifdef __ANDROID__ + jstring className = (*jniEnv)->NewStringUTF(jniEnv, name); + *cls = (*jniEnv)->CallObjectMethod(jniEnv, jni.classLoader, + jni.loadClassMethod, className); + (*jniEnv)->DeleteLocalRef(jniEnv, className); +#else + *cls = (*jniEnv)->FindClass(jniEnv, name); +#endif +} + +static inline void load_class(jclass* cls, const char* name) { + if (*cls == NULL) { + __load_class_into(cls, name); + } +} + +static inline void load_class_gr(jclass* cls, const char* name) { + if (*cls == NULL) { + jclass tmp; + __load_class_into(&tmp, name); + *cls = (*jniEnv)->NewGlobalRef(jniEnv, tmp); + (*jniEnv)->DeleteLocalRef(jniEnv, tmp); + } +} + +static inline void attach_thread() { + if (jniEnv == NULL) { + (*jni.jvm)->AttachCurrentThread(jni.jvm, __ENVP_CAST & jniEnv, NULL); + } +} + +static inline void load_method(jclass cls, + jmethodID* res, + const char* name, + const char* sig) { + if (*res == NULL) { + *res = (*jniEnv)->GetMethodID(jniEnv, cls, name, sig); + } +} + +static inline void load_static_method(jclass cls, + jmethodID* res, + const char* name, + const char* sig) { + if (*res == NULL) { + *res = (*jniEnv)->GetStaticMethodID(jniEnv, cls, name, sig); + } +} + +static inline void load_field(jclass cls, + jfieldID* res, + const char* name, + const char* sig) { + if (*res == NULL) { + *res = (*jniEnv)->GetFieldID(jniEnv, cls, name, sig); + } +} + +static inline void load_static_field(jclass cls, + jfieldID* res, + const char* name, + const char* sig) { + if (*res == NULL) { + *res = (*jniEnv)->GetStaticFieldID(jniEnv, cls, name, sig); + } +} + +static inline jobject to_global_ref(jobject ref) { + jobject g = (*jniEnv)->NewGlobalRef(jniEnv, ref); + (*jniEnv)->DeleteLocalRef(jniEnv, ref); + return g; +} + +// These functions are useful for C+Dart bindings, and not required for pure dart bindings. + +FFI_PLUGIN_EXPORT JniContext GetJniContext(); +/// For use by jni_gen's generated code +/// don't use these. + +// these 2 fn ptr vars will be defined by generated code library +extern JniContext (*context_getter)(void); +extern JNIEnv* (*env_getter)(void); + +// this function will be exported by generated code library +// it will set above 2 variables. +FFI_PLUGIN_EXPORT void setJniGetters(struct JniContext (*cg)(void), + JNIEnv* (*eg)(void)); + +static inline void load_env() { + if (jniEnv == NULL) { + jni = context_getter(); + jniEnv = env_getter(); + } +} + +static inline jthrowable check_exception() { + jthrowable exception = (*jniEnv)->ExceptionOccurred(jniEnv); + if (exception != NULL) (*jniEnv)->ExceptionClear(jniEnv); + if (exception == NULL) return NULL; + return to_global_ref(exception); +} + +DART_EXPORT intptr_t InitDartApiDL(void* data); + +JNIEXPORT void JNICALL +Java_com_github_dart_1lang_jni_PortContinuation__1resumeWith(JNIEnv* env, + jobject thiz, + jlong port, + jobject result); +FFI_PLUGIN_EXPORT +JniResult PortContinuation__ctor(int64_t j); diff --git a/experimental/pedometer/src/health_connect/health_connect.c b/experimental/pedometer/src/health_connect/health_connect.c new file mode 100644 index 000000000..7dec6a93f --- /dev/null +++ b/experimental/pedometer/src/health_connect/health_connect.c @@ -0,0 +1,13299 @@ +// Autogenerated by jnigen. DO NOT EDIT! + +#include +#include "dartjni.h" +#include "jni.h" + +thread_local JNIEnv* jniEnv; +JniContext jni; + +JniContext (*context_getter)(void); +JNIEnv* (*env_getter)(void); + +void setJniGetters(JniContext (*cg)(void), JNIEnv* (*eg)(void)) { + context_getter = cg; + env_getter = eg; +} + +// androidx.health.connect.client.HealthConnectClient +jclass _c_HealthConnectClient = NULL; + +jmethodID _m_HealthConnectClient__getPermissionController = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__getPermissionController(jobject self_) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient, + &_m_HealthConnectClient__getPermissionController, + "getPermissionController", + "()Landroidx/health/connect/client/PermissionController;"); + if (_m_HealthConnectClient__getPermissionController == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__getPermissionController); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__insertRecords = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__insertRecords(jobject self_, + jobject list, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__insertRecords, + "insertRecords", + "(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__insertRecords == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__insertRecords, list, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__updateRecords = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__updateRecords(jobject self_, + jobject list, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__updateRecords, + "updateRecords", + "(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__updateRecords == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__updateRecords, list, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__deleteRecords = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__deleteRecords(jobject self_, + jobject kClass, + jobject list, + jobject list1, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient, &_m_HealthConnectClient__deleteRecords, + "deleteRecords", + "(Lkotlin/reflect/KClass;Ljava/util/List;Ljava/util/List;Lkotlin/" + "coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__deleteRecords == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__deleteRecords, kClass, list, list1, + continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__deleteRecords1 = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__deleteRecords1(jobject self_, + jobject kClass, + jobject timeRangeFilter, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__deleteRecords1, + "deleteRecords", + "(Lkotlin/reflect/KClass;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__deleteRecords1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__deleteRecords1, kClass, + timeRangeFilter, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__readRecord = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__readRecord(jobject self_, + jobject kClass, + jobject string, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient, &_m_HealthConnectClient__readRecord, + "readRecord", + "(Lkotlin/reflect/KClass;Ljava/lang/String;Lkotlin/coroutines/" + "Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__readRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__readRecord, kClass, string, + continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__readRecords = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__readRecords(jobject self_, + jobject readRecordsRequest, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__readRecords, + "readRecords", + "(Landroidx/health/connect/client/request/ReadRecordsRequest;Lkotlin/" + "coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__readRecords == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__readRecords, readRecordsRequest, + continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__aggregate = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__aggregate(jobject self_, + jobject aggregateRequest, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__aggregate, "aggregate", + "(Landroidx/health/connect/client/request/AggregateRequest;Lkotlin/" + "coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__aggregate == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__aggregate, aggregateRequest, + continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__aggregateGroupByDuration = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__aggregateGroupByDuration( + jobject self_, + jobject aggregateGroupByDurationRequest, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient, + &_m_HealthConnectClient__aggregateGroupByDuration, + "aggregateGroupByDuration", + "(Landroidx/health/connect/client/request/" + "AggregateGroupByDurationRequest;Lkotlin/coroutines/" + "Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__aggregateGroupByDuration == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__aggregateGroupByDuration, + aggregateGroupByDurationRequest, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__aggregateGroupByPeriod = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__aggregateGroupByPeriod( + jobject self_, + jobject aggregateGroupByPeriodRequest, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient, + &_m_HealthConnectClient__aggregateGroupByPeriod, + "aggregateGroupByPeriod", + "(Landroidx/health/connect/client/request/" + "AggregateGroupByPeriodRequest;Lkotlin/coroutines/" + "Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__aggregateGroupByPeriod == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__aggregateGroupByPeriod, + aggregateGroupByPeriodRequest, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__getChangesToken = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__getChangesToken(jobject self_, + jobject changesTokenRequest, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__getChangesToken, + "getChangesToken", + "(Landroidx/health/connect/client/request/ChangesTokenRequest;Lkotlin/" + "coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__getChangesToken == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__getChangesToken, + changesTokenRequest, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__getChanges = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__getChanges(jobject self_, + jobject string, + jobject continuation) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, &_m_HealthConnectClient__getChanges, "getChanges", + "(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__getChanges == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__getChanges, string, continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__isAvailable = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__isAvailable(jobject context, jobject list) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_HealthConnectClient, + &_m_HealthConnectClient__isAvailable, "isAvailable", + "(Landroid/content/Context;Ljava/util/List;)Z"); + if (_m_HealthConnectClient__isAvailable == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallStaticBooleanMethod( + jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__isAvailable, + context, list); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__getOrCreate = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__getOrCreate(jobject context, jobject list) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_HealthConnectClient, + &_m_HealthConnectClient__getOrCreate, "getOrCreate", + "(Landroid/content/Context;Ljava/util/List;)Landroidx/" + "health/connect/client/HealthConnectClient;"); + if (_m_HealthConnectClient__getOrCreate == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__getOrCreate, + context, list); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__isAvailable1 = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__isAvailable1(jobject context) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_HealthConnectClient, + &_m_HealthConnectClient__isAvailable1, "isAvailable", + "(Landroid/content/Context;)Z"); + if (_m_HealthConnectClient__isAvailable1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallStaticBooleanMethod( + jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__isAvailable1, + context); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient__getOrCreate1 = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__getOrCreate1(jobject context) { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_HealthConnectClient, + &_m_HealthConnectClient__getOrCreate1, "getOrCreate", + "(Landroid/content/Context;)Landroidx/health/connect/" + "client/HealthConnectClient;"); + if (_m_HealthConnectClient__getOrCreate1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__getOrCreate1, + context); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jfieldID _f_HealthConnectClient__Companion = NULL; +FFI_PLUGIN_EXPORT +JniResult get_HealthConnectClient__Companion() { + load_env(); + load_class_gr(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field( + _c_HealthConnectClient, &_f_HealthConnectClient__Companion, "Companion", + "Landroidx/health/connect/client/HealthConnectClient$Companion;"); + jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( + jniEnv, _c_HealthConnectClient, _f_HealthConnectClient__Companion)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// androidx.health.connect.client.PermissionController +jclass _c_PermissionController = NULL; + +jmethodID _m_PermissionController__createRequestPermissionActivityContract = + NULL; +FFI_PLUGIN_EXPORT +JniResult PermissionController__createRequestPermissionActivityContract( + jobject self_) { + load_env(); + load_class_gr(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); + if (_c_PermissionController == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_PermissionController, + &_m_PermissionController__createRequestPermissionActivityContract, + "createRequestPermissionActivityContract", + "()Landroidx/activity/result/contract/ActivityResultContract;"); + if (_m_PermissionController__createRequestPermissionActivityContract == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, + _m_PermissionController__createRequestPermissionActivityContract); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_PermissionController__getGrantedPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult PermissionController__getGrantedPermissions(jobject self_, + jobject set, + jobject continuation) { + load_env(); + load_class_gr(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); + if (_c_PermissionController == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_PermissionController, &_m_PermissionController__getGrantedPermissions, + "getGrantedPermissions", + "(Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_PermissionController__getGrantedPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_PermissionController__getGrantedPermissions, set, + continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_PermissionController__revokeAllPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult PermissionController__revokeAllPermissions(jobject self_, + jobject continuation) { + load_env(); + load_class_gr(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); + if (_c_PermissionController == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_PermissionController, + &_m_PermissionController__revokeAllPermissions, + "revokeAllPermissions", + "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_PermissionController__revokeAllPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_PermissionController__revokeAllPermissions, + continuation); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.records.StepsRecord +jclass _c_StepsRecord = NULL; + +jmethodID _m_StepsRecord__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__ctor(int64_t j, + jobject instant, + jobject zoneOffset, + jobject instant1, + jobject zoneOffset1, + jobject metadata) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__ctor, "", + "(JLjava/time/Instant;Ljava/time/ZoneOffset;Ljava/time/" + "Instant;Ljava/time/ZoneOffset;Landroidx/health/connect/client/" + "records/metadata/Metadata;)V"); + if (_m_StepsRecord__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_StepsRecord, _m_StepsRecord__ctor, j, instant, zoneOffset, + instant1, zoneOffset1, metadata); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__ctor1(int64_t j, + jobject instant, + jobject zoneOffset, + jobject instant1, + jobject zoneOffset1, + jobject metadata, + int32_t i, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_StepsRecord, &_m_StepsRecord__ctor1, "", + "(JLjava/time/Instant;Ljava/time/ZoneOffset;Ljava/time/Instant;Ljava/" + "time/ZoneOffset;Landroidx/health/connect/client/records/metadata/" + "Metadata;ILkotlin/jvm/internal/DefaultConstructorMarker;)V"); + if (_m_StepsRecord__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_StepsRecord, _m_StepsRecord__ctor1, j, instant, zoneOffset, + instant1, zoneOffset1, metadata, i, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__getCount = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__getCount(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__getCount, "getCount", "()J"); + if (_m_StepsRecord__getCount == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallLongMethod(jniEnv, self_, _m_StepsRecord__getCount); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__getStartTime = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__getStartTime(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__getStartTime, "getStartTime", + "()Ljava/time/Instant;"); + if (_m_StepsRecord__getStartTime == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_StepsRecord__getStartTime); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__getStartZoneOffset = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__getStartZoneOffset(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__getStartZoneOffset, + "getStartZoneOffset", "()Ljava/time/ZoneOffset;"); + if (_m_StepsRecord__getStartZoneOffset == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_StepsRecord__getStartZoneOffset); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__getEndTime = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__getEndTime(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__getEndTime, "getEndTime", + "()Ljava/time/Instant;"); + if (_m_StepsRecord__getEndTime == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_StepsRecord__getEndTime); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__getEndZoneOffset = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__getEndZoneOffset(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__getEndZoneOffset, + "getEndZoneOffset", "()Ljava/time/ZoneOffset;"); + if (_m_StepsRecord__getEndZoneOffset == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_StepsRecord__getEndZoneOffset); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__getMetadata = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__getMetadata(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__getMetadata, "getMetadata", + "()Landroidx/health/connect/client/records/metadata/Metadata;"); + if (_m_StepsRecord__getMetadata == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_StepsRecord__getMetadata); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__equals1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__equals1, "equals", + "(Ljava/lang/Object;)Z"); + if (_m_StepsRecord__equals1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_StepsRecord__equals1, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_StepsRecord__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord__hashCode1(jobject self_) { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__hashCode1, "hashCode", "()I"); + if (_m_StepsRecord__hashCode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_StepsRecord__hashCode1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jfieldID _f_StepsRecord__Companion = NULL; +FFI_PLUGIN_EXPORT +JniResult get_StepsRecord__Companion() { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field( + _c_StepsRecord, &_f_StepsRecord__Companion, "Companion", + "Landroidx/health/connect/client/records/StepsRecord$Companion;"); + jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( + jniEnv, _c_StepsRecord, _f_StepsRecord__Companion)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +jfieldID _f_StepsRecord__COUNT_TOTAL = NULL; +FFI_PLUGIN_EXPORT +JniResult get_StepsRecord__COUNT_TOTAL() { + load_env(); + load_class_gr(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); + if (_c_StepsRecord == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field( + _c_StepsRecord, &_f_StepsRecord__COUNT_TOTAL, "COUNT_TOTAL", + "Landroidx/health/connect/client/aggregate/AggregateMetric;"); + jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( + jniEnv, _c_StepsRecord, _f_StepsRecord__COUNT_TOTAL)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// androidx.health.connect.client.time.TimeRangeFilter$Companion +jclass _c_TimeRangeFilter_Companion = NULL; + +jmethodID _m_TimeRangeFilter_Companion__between = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__between(jobject self_, + jobject instant, + jobject instant1) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, + &_m_TimeRangeFilter_Companion__between, "between", + "(Ljava/time/Instant;Ljava/time/Instant;)Landroidx/health/" + "connect/client/time/TimeRangeFilter;"); + if (_m_TimeRangeFilter_Companion__between == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_TimeRangeFilter_Companion__between, instant, instant1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter_Companion__between1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__between1(jobject self_, + jobject localDateTime, + jobject localDateTime1) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, + &_m_TimeRangeFilter_Companion__between1, "between", + "(Ljava/time/LocalDateTime;Ljava/time/LocalDateTime;)Landroidx/" + "health/connect/client/time/TimeRangeFilter;"); + if (_m_TimeRangeFilter_Companion__between1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_TimeRangeFilter_Companion__between1, localDateTime, + localDateTime1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter_Companion__before = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__before(jobject self_, jobject instant) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, + &_m_TimeRangeFilter_Companion__before, "before", + "(Ljava/time/Instant;)Landroidx/health/connect/client/time/" + "TimeRangeFilter;"); + if (_m_TimeRangeFilter_Companion__before == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_TimeRangeFilter_Companion__before, instant); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter_Companion__before1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__before1(jobject self_, + jobject localDateTime) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, + &_m_TimeRangeFilter_Companion__before1, "before", + "(Ljava/time/LocalDateTime;)Landroidx/health/connect/client/time/" + "TimeRangeFilter;"); + if (_m_TimeRangeFilter_Companion__before1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_TimeRangeFilter_Companion__before1, localDateTime); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter_Companion__after = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__after(jobject self_, jobject instant) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, + &_m_TimeRangeFilter_Companion__after, "after", + "(Ljava/time/Instant;)Landroidx/health/connect/client/time/" + "TimeRangeFilter;"); + if (_m_TimeRangeFilter_Companion__after == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_TimeRangeFilter_Companion__after, instant); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter_Companion__after1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__after1(jobject self_, + jobject localDateTime) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, + &_m_TimeRangeFilter_Companion__after1, "after", + "(Ljava/time/LocalDateTime;)Landroidx/health/connect/client/time/" + "TimeRangeFilter;"); + if (_m_TimeRangeFilter_Companion__after1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_TimeRangeFilter_Companion__after1, localDateTime); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter_Companion__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter_Companion__ctor(jobject defaultConstructorMarker) { + load_env(); + load_class_gr( + &_c_TimeRangeFilter_Companion, + "androidx/health/connect/client/time/TimeRangeFilter$Companion"); + if (_c_TimeRangeFilter_Companion == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__ctor, + "", "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"); + if (_m_TimeRangeFilter_Companion__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter_Companion, + _m_TimeRangeFilter_Companion__ctor, + defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.time.TimeRangeFilter +jclass _c_TimeRangeFilter = NULL; + +jmethodID _m_TimeRangeFilter__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__ctor(jobject instant, + jobject instant1, + jobject localDateTime, + jobject localDateTime1) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__ctor, "", + "(Ljava/time/Instant;Ljava/time/Instant;Ljava/time/" + "LocalDateTime;Ljava/time/LocalDateTime;)V"); + if (_m_TimeRangeFilter__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__ctor, + instant, instant1, localDateTime, localDateTime1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__ctor1(jobject instant, + jobject instant1, + jobject localDateTime, + jobject localDateTime1, + int32_t i, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_TimeRangeFilter, &_m_TimeRangeFilter__ctor1, "", + "(Ljava/time/Instant;Ljava/time/Instant;Ljava/time/LocalDateTime;Ljava/" + "time/LocalDateTime;ILkotlin/jvm/internal/DefaultConstructorMarker;)V"); + if (_m_TimeRangeFilter__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__ctor1, instant, instant1, + localDateTime, localDateTime1, i, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__equals1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__equals1, "equals", + "(Ljava/lang/Object;)Z"); + if (_m_TimeRangeFilter__equals1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_TimeRangeFilter__equals1, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__hashCode1(jobject self_) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__hashCode1, "hashCode", + "()I"); + if (_m_TimeRangeFilter__hashCode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_TimeRangeFilter__hashCode1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__ctor2 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__ctor2() { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__ctor2, "", "()V"); + if (_m_TimeRangeFilter__ctor2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter, + _m_TimeRangeFilter__ctor2); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__between = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__between(jobject instant, jobject instant1) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__between, + "between", + "(Ljava/time/Instant;Ljava/time/Instant;)Landroidx/health/" + "connect/client/time/TimeRangeFilter;"); + if (_m_TimeRangeFilter__between == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__between, instant, + instant1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__between1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__between1(jobject localDateTime, + jobject localDateTime1) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_TimeRangeFilter, &_m_TimeRangeFilter__between1, "between", + "(Ljava/time/LocalDateTime;Ljava/time/LocalDateTime;)Landroidx/health/" + "connect/client/time/TimeRangeFilter;"); + if (_m_TimeRangeFilter__between1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__between1, localDateTime, + localDateTime1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__before = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__before(jobject instant) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__before, "before", + "(Ljava/time/Instant;)Landroidx/health/connect/client/" + "time/TimeRangeFilter;"); + if (_m_TimeRangeFilter__before == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__before, instant); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__before1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__before1(jobject localDateTime) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__before1, "before", + "(Ljava/time/LocalDateTime;)Landroidx/health/connect/" + "client/time/TimeRangeFilter;"); + if (_m_TimeRangeFilter__before1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__before1, localDateTime); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__after = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__after(jobject instant) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__after, "after", + "(Ljava/time/Instant;)Landroidx/health/connect/client/" + "time/TimeRangeFilter;"); + if (_m_TimeRangeFilter__after == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__after, instant); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_TimeRangeFilter__after1 = NULL; +FFI_PLUGIN_EXPORT +JniResult TimeRangeFilter__after1(jobject localDateTime) { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__after1, "after", + "(Ljava/time/LocalDateTime;)Landroidx/health/connect/" + "client/time/TimeRangeFilter;"); + if (_m_TimeRangeFilter__after1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__after1, localDateTime); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jfieldID _f_TimeRangeFilter__Companion = NULL; +FFI_PLUGIN_EXPORT +JniResult get_TimeRangeFilter__Companion() { + load_env(); + load_class_gr(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); + if (_c_TimeRangeFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field( + _c_TimeRangeFilter, &_f_TimeRangeFilter__Companion, "Companion", + "Landroidx/health/connect/client/time/TimeRangeFilter$Companion;"); + jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( + jniEnv, _c_TimeRangeFilter, _f_TimeRangeFilter__Companion)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// android.content.Context +jclass _c_Context = NULL; + +jmethodID _m_Context__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__ctor() { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__ctor, "", "()V"); + if (_m_Context__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Context, _m_Context__ctor); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getAssets = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getAssets(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getAssets, "getAssets", + "()Landroid/content/res/AssetManager;"); + if (_m_Context__getAssets == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getAssets); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getResources = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getResources(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getResources, "getResources", + "()Landroid/content/res/Resources;"); + if (_m_Context__getResources == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getResources); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getPackageManager = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getPackageManager(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getPackageManager, "getPackageManager", + "()Landroid/content/pm/PackageManager;"); + if (_m_Context__getPackageManager == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getPackageManager); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getContentResolver = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getContentResolver(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getContentResolver, "getContentResolver", + "()Landroid/content/ContentResolver;"); + if (_m_Context__getContentResolver == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Context__getContentResolver); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getMainLooper = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getMainLooper(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getMainLooper, "getMainLooper", + "()Landroid/os/Looper;"); + if (_m_Context__getMainLooper == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getMainLooper); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getMainExecutor = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getMainExecutor(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getMainExecutor, "getMainExecutor", + "()Ljava/util/concurrent/Executor;"); + if (_m_Context__getMainExecutor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getMainExecutor); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getApplicationContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getApplicationContext(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getApplicationContext, + "getApplicationContext", "()Landroid/content/Context;"); + if (_m_Context__getApplicationContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getApplicationContext); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__registerComponentCallbacks = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__registerComponentCallbacks(jobject self_, + jobject componentCallbacks) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__registerComponentCallbacks, + "registerComponentCallbacks", + "(Landroid/content/ComponentCallbacks;)V"); + if (_m_Context__registerComponentCallbacks == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__registerComponentCallbacks, + componentCallbacks); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__unregisterComponentCallbacks = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__unregisterComponentCallbacks(jobject self_, + jobject componentCallbacks) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__unregisterComponentCallbacks, + "unregisterComponentCallbacks", + "(Landroid/content/ComponentCallbacks;)V"); + if (_m_Context__unregisterComponentCallbacks == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__unregisterComponentCallbacks, + componentCallbacks); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__getText = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getText(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getText, "getText", + "(I)Ljava/lang/CharSequence;"); + if (_m_Context__getText == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getText, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getString = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getString(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getString, "getString", + "(I)Ljava/lang/String;"); + if (_m_Context__getString == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getString, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getString1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getString1(jobject self_, int32_t i, jobject objects) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getString1, "getString", + "(I[Ljava/lang/Object;)Ljava/lang/String;"); + if (_m_Context__getString1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getString1, i, objects); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getColor = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getColor(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getColor, "getColor", "(I)I"); + if (_m_Context__getColor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Context__getColor, i); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__getDrawable = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getDrawable(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getDrawable, "getDrawable", + "(I)Landroid/graphics/drawable/Drawable;"); + if (_m_Context__getDrawable == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDrawable, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getColorStateList = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getColorStateList(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getColorStateList, "getColorStateList", + "(I)Landroid/content/res/ColorStateList;"); + if (_m_Context__getColorStateList == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getColorStateList, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__setTheme = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__setTheme(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__setTheme, "setTheme", "(I)V"); + if (_m_Context__setTheme == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__setTheme, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__getTheme = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getTheme(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getTheme, "getTheme", + "()Landroid/content/res/Resources$Theme;"); + if (_m_Context__getTheme == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getTheme); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__obtainStyledAttributes = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__obtainStyledAttributes(jobject self_, jobject is) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__obtainStyledAttributes, + "obtainStyledAttributes", "([I)Landroid/content/res/TypedArray;"); + if (_m_Context__obtainStyledAttributes == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__obtainStyledAttributes, is); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__obtainStyledAttributes1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__obtainStyledAttributes1(jobject self_, + int32_t i, + jobject is) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__obtainStyledAttributes1, + "obtainStyledAttributes", + "(I[I)Landroid/content/res/TypedArray;"); + if (_m_Context__obtainStyledAttributes1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__obtainStyledAttributes1, i, is); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__obtainStyledAttributes2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__obtainStyledAttributes2(jobject self_, + jobject attributeSet, + jobject is) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__obtainStyledAttributes2, + "obtainStyledAttributes", + "(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;"); + if (_m_Context__obtainStyledAttributes2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__obtainStyledAttributes2, attributeSet, is); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__obtainStyledAttributes3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__obtainStyledAttributes3(jobject self_, + jobject attributeSet, + jobject is, + int32_t i, + int32_t i1) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__obtainStyledAttributes3, + "obtainStyledAttributes", + "(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"); + if (_m_Context__obtainStyledAttributes3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__obtainStyledAttributes3, attributeSet, is, i, + i1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getClassLoader = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getClassLoader(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getClassLoader, "getClassLoader", + "()Ljava/lang/ClassLoader;"); + if (_m_Context__getClassLoader == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getClassLoader); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getPackageName = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getPackageName(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getPackageName, "getPackageName", + "()Ljava/lang/String;"); + if (_m_Context__getPackageName == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getPackageName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getOpPackageName = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getOpPackageName(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getOpPackageName, "getOpPackageName", + "()Ljava/lang/String;"); + if (_m_Context__getOpPackageName == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getOpPackageName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getAttributionTag = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getAttributionTag(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getAttributionTag, "getAttributionTag", + "()Ljava/lang/String;"); + if (_m_Context__getAttributionTag == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getAttributionTag); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getAttributionSource = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getAttributionSource(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getAttributionSource, + "getAttributionSource", "()Landroid/content/AttributionSource;"); + if (_m_Context__getAttributionSource == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getAttributionSource); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getParams = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getParams(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getParams, "getParams", + "()Landroid/content/ContextParams;"); + if (_m_Context__getParams == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getParams); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getApplicationInfo = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getApplicationInfo(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getApplicationInfo, "getApplicationInfo", + "()Landroid/content/pm/ApplicationInfo;"); + if (_m_Context__getApplicationInfo == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Context__getApplicationInfo); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getPackageResourcePath = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getPackageResourcePath(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getPackageResourcePath, + "getPackageResourcePath", "()Ljava/lang/String;"); + if (_m_Context__getPackageResourcePath == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getPackageResourcePath); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getPackageCodePath = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getPackageCodePath(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getPackageCodePath, "getPackageCodePath", + "()Ljava/lang/String;"); + if (_m_Context__getPackageCodePath == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Context__getPackageCodePath); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getSharedPreferences = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getSharedPreferences(jobject self_, + jobject string, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getSharedPreferences, + "getSharedPreferences", + "(Ljava/lang/String;I)Landroid/content/SharedPreferences;"); + if (_m_Context__getSharedPreferences == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getSharedPreferences, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__moveSharedPreferencesFrom = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__moveSharedPreferencesFrom(jobject self_, + jobject context, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__moveSharedPreferencesFrom, + "moveSharedPreferencesFrom", + "(Landroid/content/Context;Ljava/lang/String;)Z"); + if (_m_Context__moveSharedPreferencesFrom == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__moveSharedPreferencesFrom, context, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__deleteSharedPreferences = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__deleteSharedPreferences(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__deleteSharedPreferences, + "deleteSharedPreferences", "(Ljava/lang/String;)Z"); + if (_m_Context__deleteSharedPreferences == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__deleteSharedPreferences, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__openFileInput = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__openFileInput(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__openFileInput, "openFileInput", + "(Ljava/lang/String;)Ljava/io/FileInputStream;"); + if (_m_Context__openFileInput == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__openFileInput, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__openFileOutput = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__openFileOutput(jobject self_, jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__openFileOutput, "openFileOutput", + "(Ljava/lang/String;I)Ljava/io/FileOutputStream;"); + if (_m_Context__openFileOutput == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__openFileOutput, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__deleteFile = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__deleteFile(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__deleteFile, "deleteFile", + "(Ljava/lang/String;)Z"); + if (_m_Context__deleteFile == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__deleteFile, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__getFileStreamPath = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getFileStreamPath(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getFileStreamPath, "getFileStreamPath", + "(Ljava/lang/String;)Ljava/io/File;"); + if (_m_Context__getFileStreamPath == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getFileStreamPath, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getDataDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getDataDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getDataDir, "getDataDir", + "()Ljava/io/File;"); + if (_m_Context__getDataDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDataDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getFilesDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getFilesDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getFilesDir, "getFilesDir", + "()Ljava/io/File;"); + if (_m_Context__getFilesDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getFilesDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getNoBackupFilesDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getNoBackupFilesDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getNoBackupFilesDir, + "getNoBackupFilesDir", "()Ljava/io/File;"); + if (_m_Context__getNoBackupFilesDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getNoBackupFilesDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getExternalFilesDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getExternalFilesDir(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getExternalFilesDir, + "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;"); + if (_m_Context__getExternalFilesDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getExternalFilesDir, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getExternalFilesDirs = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getExternalFilesDirs(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getExternalFilesDirs, + "getExternalFilesDirs", "(Ljava/lang/String;)[Ljava/io/File;"); + if (_m_Context__getExternalFilesDirs == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getExternalFilesDirs, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getObbDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getObbDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getObbDir, "getObbDir", + "()Ljava/io/File;"); + if (_m_Context__getObbDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getObbDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getObbDirs = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getObbDirs(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getObbDirs, "getObbDirs", + "()[Ljava/io/File;"); + if (_m_Context__getObbDirs == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getObbDirs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getCacheDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getCacheDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getCacheDir, "getCacheDir", + "()Ljava/io/File;"); + if (_m_Context__getCacheDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getCacheDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getCodeCacheDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getCodeCacheDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getCodeCacheDir, "getCodeCacheDir", + "()Ljava/io/File;"); + if (_m_Context__getCodeCacheDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getCodeCacheDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getExternalCacheDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getExternalCacheDir(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getExternalCacheDir, + "getExternalCacheDir", "()Ljava/io/File;"); + if (_m_Context__getExternalCacheDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getExternalCacheDir); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getExternalCacheDirs = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getExternalCacheDirs(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getExternalCacheDirs, + "getExternalCacheDirs", "()[Ljava/io/File;"); + if (_m_Context__getExternalCacheDirs == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getExternalCacheDirs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getExternalMediaDirs = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getExternalMediaDirs(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getExternalMediaDirs, + "getExternalMediaDirs", "()[Ljava/io/File;"); + if (_m_Context__getExternalMediaDirs == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getExternalMediaDirs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__fileList = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__fileList(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__fileList, "fileList", + "()[Ljava/lang/String;"); + if (_m_Context__fileList == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__fileList); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getDir = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getDir(jobject self_, jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getDir, "getDir", + "(Ljava/lang/String;I)Ljava/io/File;"); + if (_m_Context__getDir == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDir, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__openOrCreateDatabase = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__openOrCreateDatabase(jobject self_, + jobject string, + int32_t i, + jobject cursorFactory) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__openOrCreateDatabase, "openOrCreateDatabase", + "(Ljava/lang/String;ILandroid/database/sqlite/" + "SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"); + if (_m_Context__openOrCreateDatabase == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__openOrCreateDatabase, string, i, + cursorFactory); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__openOrCreateDatabase1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__openOrCreateDatabase1(jobject self_, + jobject string, + int32_t i, + jobject cursorFactory, + jobject databaseErrorHandler) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__openOrCreateDatabase1, + "openOrCreateDatabase", + "(Ljava/lang/String;ILandroid/database/sqlite/" + "SQLiteDatabase$CursorFactory;Landroid/database/" + "DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;"); + if (_m_Context__openOrCreateDatabase1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__openOrCreateDatabase1, string, i, + cursorFactory, databaseErrorHandler); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__moveDatabaseFrom = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__moveDatabaseFrom(jobject self_, + jobject context, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__moveDatabaseFrom, "moveDatabaseFrom", + "(Landroid/content/Context;Ljava/lang/String;)Z"); + if (_m_Context__moveDatabaseFrom == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__moveDatabaseFrom, context, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__deleteDatabase = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__deleteDatabase(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__deleteDatabase, "deleteDatabase", + "(Ljava/lang/String;)Z"); + if (_m_Context__deleteDatabase == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__deleteDatabase, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__getDatabasePath = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getDatabasePath(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getDatabasePath, "getDatabasePath", + "(Ljava/lang/String;)Ljava/io/File;"); + if (_m_Context__getDatabasePath == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getDatabasePath, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__databaseList = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__databaseList(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__databaseList, "databaseList", + "()[Ljava/lang/String;"); + if (_m_Context__databaseList == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__databaseList); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getWallpaper = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getWallpaper(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getWallpaper, "getWallpaper", + "()Landroid/graphics/drawable/Drawable;"); + if (_m_Context__getWallpaper == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getWallpaper); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__peekWallpaper = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__peekWallpaper(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__peekWallpaper, "peekWallpaper", + "()Landroid/graphics/drawable/Drawable;"); + if (_m_Context__peekWallpaper == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__peekWallpaper); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getWallpaperDesiredMinimumWidth = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getWallpaperDesiredMinimumWidth(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getWallpaperDesiredMinimumWidth, + "getWallpaperDesiredMinimumWidth", "()I"); + if (_m_Context__getWallpaperDesiredMinimumWidth == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__getWallpaperDesiredMinimumWidth); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__getWallpaperDesiredMinimumHeight = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getWallpaperDesiredMinimumHeight(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getWallpaperDesiredMinimumHeight, + "getWallpaperDesiredMinimumHeight", "()I"); + if (_m_Context__getWallpaperDesiredMinimumHeight == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__getWallpaperDesiredMinimumHeight); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__setWallpaper = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__setWallpaper(jobject self_, jobject bitmap) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__setWallpaper, "setWallpaper", + "(Landroid/graphics/Bitmap;)V"); + if (_m_Context__setWallpaper == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__setWallpaper, bitmap); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__setWallpaper1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__setWallpaper1(jobject self_, jobject inputStream) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__setWallpaper1, "setWallpaper", + "(Ljava/io/InputStream;)V"); + if (_m_Context__setWallpaper1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__setWallpaper1, + inputStream); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__clearWallpaper = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__clearWallpaper(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__clearWallpaper, "clearWallpaper", "()V"); + if (_m_Context__clearWallpaper == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__clearWallpaper); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startActivity(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startActivity, "startActivity", + "(Landroid/content/Intent;)V"); + if (_m_Context__startActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivity, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startActivity1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startActivity1(jobject self_, + jobject intent, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startActivity1, "startActivity", + "(Landroid/content/Intent;Landroid/os/Bundle;)V"); + if (_m_Context__startActivity1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivity1, intent, + bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startActivities = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startActivities(jobject self_, jobject intents) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startActivities, "startActivities", + "([Landroid/content/Intent;)V"); + if (_m_Context__startActivities == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivities, + intents); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startActivities1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startActivities1(jobject self_, + jobject intents, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startActivities1, "startActivities", + "([Landroid/content/Intent;Landroid/os/Bundle;)V"); + if (_m_Context__startActivities1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivities1, + intents, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startIntentSender = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startIntentSender(jobject self_, + jobject intentSender, + jobject intent, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startIntentSender, "startIntentSender", + "(Landroid/content/IntentSender;Landroid/content/Intent;III)V"); + if (_m_Context__startIntentSender == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startIntentSender, + intentSender, intent, i, i1, i2); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startIntentSender1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startIntentSender1(jobject self_, + jobject intentSender, + jobject intent, + int32_t i, + int32_t i1, + int32_t i2, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startIntentSender1, "startIntentSender", + "(Landroid/content/IntentSender;Landroid/content/" + "Intent;IIILandroid/os/Bundle;)V"); + if (_m_Context__startIntentSender1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startIntentSender1, + intentSender, intent, i, i1, i2, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendBroadcast = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendBroadcast(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendBroadcast, "sendBroadcast", + "(Landroid/content/Intent;)V"); + if (_m_Context__sendBroadcast == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcast, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendBroadcast1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendBroadcast1(jobject self_, + jobject intent, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendBroadcast1, "sendBroadcast", + "(Landroid/content/Intent;Ljava/lang/String;)V"); + if (_m_Context__sendBroadcast1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcast1, intent, + string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendBroadcastWithMultiplePermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendBroadcastWithMultiplePermissions(jobject self_, + jobject intent, + jobject strings) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendBroadcastWithMultiplePermissions, + "sendBroadcastWithMultiplePermissions", + "(Landroid/content/Intent;[Ljava/lang/String;)V"); + if (_m_Context__sendBroadcastWithMultiplePermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__sendBroadcastWithMultiplePermissions, + intent, strings); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendOrderedBroadcast = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendOrderedBroadcast(jobject self_, + jobject intent, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendOrderedBroadcast, + "sendOrderedBroadcast", + "(Landroid/content/Intent;Ljava/lang/String;)V"); + if (_m_Context__sendOrderedBroadcast == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendOrderedBroadcast, + intent, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendOrderedBroadcast1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendOrderedBroadcast1(jobject self_, + jobject intent, + jobject string, + jobject broadcastReceiver, + jobject handler, + int32_t i, + jobject string1, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendOrderedBroadcast1, + "sendOrderedBroadcast", + "(Landroid/content/Intent;Ljava/lang/String;Landroid/content/" + "BroadcastReceiver;Landroid/os/Handler;ILjava/lang/" + "String;Landroid/os/Bundle;)V"); + if (_m_Context__sendOrderedBroadcast1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendOrderedBroadcast1, + intent, string, broadcastReceiver, handler, i, + string1, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendBroadcastAsUser = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendBroadcastAsUser(jobject self_, + jobject intent, + jobject userHandle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendBroadcastAsUser, + "sendBroadcastAsUser", + "(Landroid/content/Intent;Landroid/os/UserHandle;)V"); + if (_m_Context__sendBroadcastAsUser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcastAsUser, + intent, userHandle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendBroadcastAsUser1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendBroadcastAsUser1(jobject self_, + jobject intent, + jobject userHandle, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__sendBroadcastAsUser1, "sendBroadcastAsUser", + "(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V"); + if (_m_Context__sendBroadcastAsUser1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcastAsUser1, + intent, userHandle, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendOrderedBroadcastAsUser = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendOrderedBroadcastAsUser(jobject self_, + jobject intent, + jobject userHandle, + jobject string, + jobject broadcastReceiver, + jobject handler, + int32_t i, + jobject string1, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendOrderedBroadcastAsUser, + "sendOrderedBroadcastAsUser", + "(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/" + "String;Landroid/content/BroadcastReceiver;Landroid/os/" + "Handler;ILjava/lang/String;Landroid/os/Bundle;)V"); + if (_m_Context__sendOrderedBroadcastAsUser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Context__sendOrderedBroadcastAsUser, intent, userHandle, + string, broadcastReceiver, handler, i, string1, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendOrderedBroadcast2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendOrderedBroadcast2(jobject self_, + jobject intent, + jobject string, + jobject string1, + jobject broadcastReceiver, + jobject handler, + int32_t i, + jobject string2, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendOrderedBroadcast2, + "sendOrderedBroadcast", + "(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/" + "String;Landroid/content/BroadcastReceiver;Landroid/os/" + "Handler;ILjava/lang/String;Landroid/os/Bundle;)V"); + if (_m_Context__sendOrderedBroadcast2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendOrderedBroadcast2, + intent, string, string1, broadcastReceiver, handler, + i, string2, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendStickyBroadcast = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendStickyBroadcast(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendStickyBroadcast, + "sendStickyBroadcast", "(Landroid/content/Intent;)V"); + if (_m_Context__sendStickyBroadcast == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendStickyBroadcast, + intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendStickyBroadcast1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendStickyBroadcast1(jobject self_, + jobject intent, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendStickyBroadcast1, + "sendStickyBroadcast", + "(Landroid/content/Intent;Landroid/os/Bundle;)V"); + if (_m_Context__sendStickyBroadcast1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendStickyBroadcast1, + intent, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendStickyOrderedBroadcast = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendStickyOrderedBroadcast(jobject self_, + jobject intent, + jobject broadcastReceiver, + jobject handler, + int32_t i, + jobject string, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__sendStickyOrderedBroadcast, + "sendStickyOrderedBroadcast", + "(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/" + "Handler;ILjava/lang/String;Landroid/os/Bundle;)V"); + if (_m_Context__sendStickyOrderedBroadcast == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__sendStickyOrderedBroadcast, intent, + broadcastReceiver, handler, i, string, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__removeStickyBroadcast = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__removeStickyBroadcast(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__removeStickyBroadcast, + "removeStickyBroadcast", "(Landroid/content/Intent;)V"); + if (_m_Context__removeStickyBroadcast == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__removeStickyBroadcast, + intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendStickyBroadcastAsUser = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendStickyBroadcastAsUser(jobject self_, + jobject intent, + jobject userHandle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendStickyBroadcastAsUser, + "sendStickyBroadcastAsUser", + "(Landroid/content/Intent;Landroid/os/UserHandle;)V"); + if (_m_Context__sendStickyBroadcastAsUser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Context__sendStickyBroadcastAsUser, intent, userHandle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__sendStickyOrderedBroadcastAsUser = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__sendStickyOrderedBroadcastAsUser(jobject self_, + jobject intent, + jobject userHandle, + jobject broadcastReceiver, + jobject handler, + int32_t i, + jobject string, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__sendStickyOrderedBroadcastAsUser, + "sendStickyOrderedBroadcastAsUser", + "(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/" + "content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/" + "String;Landroid/os/Bundle;)V"); + if (_m_Context__sendStickyOrderedBroadcastAsUser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Context__sendStickyOrderedBroadcastAsUser, intent, + userHandle, broadcastReceiver, handler, i, string, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__removeStickyBroadcastAsUser = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__removeStickyBroadcastAsUser(jobject self_, + jobject intent, + jobject userHandle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__removeStickyBroadcastAsUser, + "removeStickyBroadcastAsUser", + "(Landroid/content/Intent;Landroid/os/UserHandle;)V"); + if (_m_Context__removeStickyBroadcastAsUser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__removeStickyBroadcastAsUser, intent, + userHandle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__registerReceiver = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__registerReceiver(jobject self_, + jobject broadcastReceiver, + jobject intentFilter) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__registerReceiver, "registerReceiver", + "(Landroid/content/BroadcastReceiver;Landroid/content/" + "IntentFilter;)Landroid/content/Intent;"); + if (_m_Context__registerReceiver == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__registerReceiver, + broadcastReceiver, intentFilter); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__registerReceiver1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__registerReceiver1(jobject self_, + jobject broadcastReceiver, + jobject intentFilter, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__registerReceiver1, "registerReceiver", + "(Landroid/content/BroadcastReceiver;Landroid/content/" + "IntentFilter;I)Landroid/content/Intent;"); + if (_m_Context__registerReceiver1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__registerReceiver1, + broadcastReceiver, intentFilter, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__registerReceiver2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__registerReceiver2(jobject self_, + jobject broadcastReceiver, + jobject intentFilter, + jobject string, + jobject handler) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__registerReceiver2, "registerReceiver", + "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/" + "lang/String;Landroid/os/Handler;)Landroid/content/Intent;"); + if (_m_Context__registerReceiver2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__registerReceiver2, broadcastReceiver, + intentFilter, string, handler); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__registerReceiver3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__registerReceiver3(jobject self_, + jobject broadcastReceiver, + jobject intentFilter, + jobject string, + jobject handler, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__registerReceiver3, "registerReceiver", + "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/" + "lang/String;Landroid/os/Handler;I)Landroid/content/Intent;"); + if (_m_Context__registerReceiver3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__registerReceiver3, broadcastReceiver, + intentFilter, string, handler, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__unregisterReceiver = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__unregisterReceiver(jobject self_, + jobject broadcastReceiver) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__unregisterReceiver, "unregisterReceiver", + "(Landroid/content/BroadcastReceiver;)V"); + if (_m_Context__unregisterReceiver == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__unregisterReceiver, + broadcastReceiver); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startService(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startService, "startService", + "(Landroid/content/Intent;)Landroid/content/ComponentName;"); + if (_m_Context__startService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__startService, intent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__startForegroundService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startForegroundService(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startForegroundService, + "startForegroundService", + "(Landroid/content/Intent;)Landroid/content/ComponentName;"); + if (_m_Context__startForegroundService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__startForegroundService, intent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__stopService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__stopService(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__stopService, "stopService", + "(Landroid/content/Intent;)Z"); + if (_m_Context__stopService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__stopService, intent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__bindService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__bindService(jobject self_, + jobject intent, + jobject serviceConnection, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__bindService, "bindService", + "(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z"); + if (_m_Context__bindService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__bindService, intent, serviceConnection, i); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__bindService1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__bindService1(jobject self_, + jobject intent, + int32_t i, + jobject executor, + jobject serviceConnection) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__bindService1, "bindService", + "(Landroid/content/Intent;ILjava/util/concurrent/" + "Executor;Landroid/content/ServiceConnection;)Z"); + if (_m_Context__bindService1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__bindService1, + intent, i, executor, serviceConnection); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__bindIsolatedService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__bindIsolatedService(jobject self_, + jobject intent, + int32_t i, + jobject string, + jobject executor, + jobject serviceConnection) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__bindIsolatedService, + "bindIsolatedService", + "(Landroid/content/Intent;ILjava/lang/String;Ljava/util/" + "concurrent/Executor;Landroid/content/ServiceConnection;)Z"); + if (_m_Context__bindIsolatedService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__bindIsolatedService, intent, i, string, + executor, serviceConnection); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__bindServiceAsUser = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__bindServiceAsUser(jobject self_, + jobject intent, + jobject serviceConnection, + int32_t i, + jobject userHandle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__bindServiceAsUser, "bindServiceAsUser", + "(Landroid/content/Intent;Landroid/content/" + "ServiceConnection;ILandroid/os/UserHandle;)Z"); + if (_m_Context__bindServiceAsUser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__bindServiceAsUser, + intent, serviceConnection, i, userHandle); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__updateServiceGroup = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__updateServiceGroup(jobject self_, + jobject serviceConnection, + int32_t i, + int32_t i1) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__updateServiceGroup, "updateServiceGroup", + "(Landroid/content/ServiceConnection;II)V"); + if (_m_Context__updateServiceGroup == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__updateServiceGroup, + serviceConnection, i, i1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__unbindService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__unbindService(jobject self_, jobject serviceConnection) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__unbindService, "unbindService", + "(Landroid/content/ServiceConnection;)V"); + if (_m_Context__unbindService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__unbindService, + serviceConnection); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__startInstrumentation = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__startInstrumentation(jobject self_, + jobject componentName, + jobject string, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__startInstrumentation, + "startInstrumentation", + "(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/" + "Bundle;)Z"); + if (_m_Context__startInstrumentation == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__startInstrumentation, componentName, string, + bundle); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__getSystemService = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getSystemService(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getSystemService, "getSystemService", + "(Ljava/lang/String;)Ljava/lang/Object;"); + if (_m_Context__getSystemService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getSystemService, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getSystemService1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getSystemService1(jobject self_, jobject class) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getSystemService1, "getSystemService", + "(Ljava/lang/Class;)Ljava/lang/Object;"); + if (_m_Context__getSystemService1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getSystemService1, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getSystemServiceName = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getSystemServiceName(jobject self_, jobject class) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getSystemServiceName, + "getSystemServiceName", "(Ljava/lang/Class;)Ljava/lang/String;"); + if (_m_Context__getSystemServiceName == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__getSystemServiceName, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__checkPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkPermission(jobject self_, + jobject string, + int32_t i, + int32_t i1) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkPermission, "checkPermission", + "(Ljava/lang/String;II)I"); + if (_m_Context__checkPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkPermission, string, i, i1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkCallingPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkCallingPermission(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkCallingPermission, + "checkCallingPermission", "(Ljava/lang/String;)I"); + if (_m_Context__checkCallingPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkCallingPermission, string); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkCallingOrSelfPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkCallingOrSelfPermission(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkCallingOrSelfPermission, + "checkCallingOrSelfPermission", "(Ljava/lang/String;)I"); + if (_m_Context__checkCallingOrSelfPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkCallingOrSelfPermission, string); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkSelfPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkSelfPermission(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkSelfPermission, + "checkSelfPermission", "(Ljava/lang/String;)I"); + if (_m_Context__checkSelfPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkSelfPermission, string); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforcePermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforcePermission(jobject self_, + jobject string, + int32_t i, + int32_t i1, + jobject string1) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforcePermission, "enforcePermission", + "(Ljava/lang/String;IILjava/lang/String;)V"); + if (_m_Context__enforcePermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforcePermission, + string, i, i1, string1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforceCallingPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforceCallingPermission(jobject self_, + jobject string, + jobject string1) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforceCallingPermission, + "enforceCallingPermission", + "(Ljava/lang/String;Ljava/lang/String;)V"); + if (_m_Context__enforceCallingPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceCallingPermission, + string, string1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforceCallingOrSelfPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforceCallingOrSelfPermission(jobject self_, + jobject string, + jobject string1) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforceCallingOrSelfPermission, + "enforceCallingOrSelfPermission", + "(Ljava/lang/String;Ljava/lang/String;)V"); + if (_m_Context__enforceCallingOrSelfPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__enforceCallingOrSelfPermission, string, + string1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__grantUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__grantUriPermission(jobject self_, + jobject string, + jobject uri, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__grantUriPermission, "grantUriPermission", + "(Ljava/lang/String;Landroid/net/Uri;I)V"); + if (_m_Context__grantUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__grantUriPermission, + string, uri, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__revokeUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__revokeUriPermission(jobject self_, jobject uri, int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__revokeUriPermission, + "revokeUriPermission", "(Landroid/net/Uri;I)V"); + if (_m_Context__revokeUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__revokeUriPermission, uri, + i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__revokeUriPermission1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__revokeUriPermission1(jobject self_, + jobject string, + jobject uri, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__revokeUriPermission1, + "revokeUriPermission", "(Ljava/lang/String;Landroid/net/Uri;I)V"); + if (_m_Context__revokeUriPermission1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__revokeUriPermission1, + string, uri, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkUriPermission(jobject self_, + jobject uri, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkUriPermission, "checkUriPermission", + "(Landroid/net/Uri;III)I"); + if (_m_Context__checkUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkUriPermission, uri, i, i1, i2); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkUriPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkUriPermissions(jobject self_, + jobject list, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkUriPermissions, + "checkUriPermissions", "(Ljava/util/List;III)[I"); + if (_m_Context__checkUriPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__checkUriPermissions, list, i, i1, i2); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__checkCallingUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkCallingUriPermission(jobject self_, + jobject uri, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkCallingUriPermission, + "checkCallingUriPermission", "(Landroid/net/Uri;I)I"); + if (_m_Context__checkCallingUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkCallingUriPermission, uri, i); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkCallingUriPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkCallingUriPermissions(jobject self_, + jobject list, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkCallingUriPermissions, + "checkCallingUriPermissions", "(Ljava/util/List;I)[I"); + if (_m_Context__checkCallingUriPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__checkCallingUriPermissions, list, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__checkCallingOrSelfUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkCallingOrSelfUriPermission(jobject self_, + jobject uri, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkCallingOrSelfUriPermission, + "checkCallingOrSelfUriPermission", "(Landroid/net/Uri;I)I"); + if (_m_Context__checkCallingOrSelfUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Context__checkCallingOrSelfUriPermission, uri, i); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__checkCallingOrSelfUriPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkCallingOrSelfUriPermissions(jobject self_, + jobject list, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkCallingOrSelfUriPermissions, + "checkCallingOrSelfUriPermissions", "(Ljava/util/List;I)[I"); + if (_m_Context__checkCallingOrSelfUriPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__checkCallingOrSelfUriPermissions, list, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__checkUriPermission1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__checkUriPermission1(jobject self_, + jobject uri, + jobject string, + jobject string1, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__checkUriPermission1, + "checkUriPermission", + "(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I"); + if (_m_Context__checkUriPermission1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Context__checkUriPermission1, + uri, string, string1, i, i1, i2); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforceUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforceUriPermission(jobject self_, + jobject uri, + int32_t i, + int32_t i1, + int32_t i2, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforceUriPermission, + "enforceUriPermission", + "(Landroid/net/Uri;IIILjava/lang/String;)V"); + if (_m_Context__enforceUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceUriPermission, + uri, i, i1, i2, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforceCallingUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforceCallingUriPermission(jobject self_, + jobject uri, + int32_t i, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforceCallingUriPermission, + "enforceCallingUriPermission", + "(Landroid/net/Uri;ILjava/lang/String;)V"); + if (_m_Context__enforceCallingUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Context__enforceCallingUriPermission, uri, i, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforceCallingOrSelfUriPermission = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforceCallingOrSelfUriPermission(jobject self_, + jobject uri, + int32_t i, + jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforceCallingOrSelfUriPermission, + "enforceCallingOrSelfUriPermission", + "(Landroid/net/Uri;ILjava/lang/String;)V"); + if (_m_Context__enforceCallingOrSelfUriPermission == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__enforceCallingOrSelfUriPermission, uri, + i, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__enforceUriPermission1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__enforceUriPermission1(jobject self_, + jobject uri, + jobject string, + jobject string1, + int32_t i, + int32_t i1, + int32_t i2, + jobject string2) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__enforceUriPermission1, + "enforceUriPermission", + "(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;IIILjava/" + "lang/String;)V"); + if (_m_Context__enforceUriPermission1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceUriPermission1, + uri, string, string1, i, i1, i2, string2); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__revokeSelfPermissionOnKill = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__revokeSelfPermissionOnKill(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__revokeSelfPermissionOnKill, + "revokeSelfPermissionOnKill", "(Ljava/lang/String;)V"); + if (_m_Context__revokeSelfPermissionOnKill == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Context__revokeSelfPermissionOnKill, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__revokeSelfPermissionsOnKill = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__revokeSelfPermissionsOnKill(jobject self_, + jobject collection) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__revokeSelfPermissionsOnKill, + "revokeSelfPermissionsOnKill", "(Ljava/util/Collection;)V"); + if (_m_Context__revokeSelfPermissionsOnKill == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Context__revokeSelfPermissionsOnKill, collection); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Context__createPackageContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createPackageContext(jobject self_, + jobject string, + int32_t i) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createPackageContext, + "createPackageContext", + "(Ljava/lang/String;I)Landroid/content/Context;"); + if (_m_Context__createPackageContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createPackageContext, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createContextForSplit = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createContextForSplit(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createContextForSplit, + "createContextForSplit", + "(Ljava/lang/String;)Landroid/content/Context;"); + if (_m_Context__createContextForSplit == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createContextForSplit, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createConfigurationContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createConfigurationContext(jobject self_, + jobject configuration) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createConfigurationContext, + "createConfigurationContext", + "(Landroid/content/res/Configuration;)Landroid/content/Context;"); + if (_m_Context__createConfigurationContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createConfigurationContext, configuration); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createDisplayContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createDisplayContext(jobject self_, jobject display) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createDisplayContext, + "createDisplayContext", + "(Landroid/view/Display;)Landroid/content/Context;"); + if (_m_Context__createDisplayContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createDisplayContext, display); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createWindowContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createWindowContext(jobject self_, + int32_t i, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createWindowContext, + "createWindowContext", + "(ILandroid/os/Bundle;)Landroid/content/Context;"); + if (_m_Context__createWindowContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createWindowContext, i, bundle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createWindowContext1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createWindowContext1(jobject self_, + jobject display, + int32_t i, + jobject bundle) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Context, &_m_Context__createWindowContext1, "createWindowContext", + "(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;"); + if (_m_Context__createWindowContext1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createWindowContext1, display, i, bundle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createContext(jobject self_, jobject contextParams) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createContext, "createContext", + "(Landroid/content/ContextParams;)Landroid/content/Context;"); + if (_m_Context__createContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createContext, contextParams); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createAttributionContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createAttributionContext(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createAttributionContext, + "createAttributionContext", + "(Ljava/lang/String;)Landroid/content/Context;"); + if (_m_Context__createAttributionContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createAttributionContext, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__createDeviceProtectedStorageContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__createDeviceProtectedStorageContext(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__createDeviceProtectedStorageContext, + "createDeviceProtectedStorageContext", + "()Landroid/content/Context;"); + if (_m_Context__createDeviceProtectedStorageContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Context__createDeviceProtectedStorageContext); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__getDisplay = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__getDisplay(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__getDisplay, "getDisplay", + "()Landroid/view/Display;"); + if (_m_Context__getDisplay == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDisplay); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Context__isRestricted = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__isRestricted(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__isRestricted, "isRestricted", "()Z"); + if (_m_Context__isRestricted == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__isRestricted); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__isDeviceProtectedStorage = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__isDeviceProtectedStorage(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__isDeviceProtectedStorage, + "isDeviceProtectedStorage", "()Z"); + if (_m_Context__isDeviceProtectedStorage == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Context__isDeviceProtectedStorage); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Context__isUiContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Context__isUiContext(jobject self_) { + load_env(); + load_class_gr(&_c_Context, "android/content/Context"); + if (_c_Context == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__isUiContext, "isUiContext", "()Z"); + if (_m_Context__isUiContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__isUiContext); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +// android.content.Intent +jclass _c_Intent = NULL; + +jmethodID _m_Intent__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__ctor() { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__ctor, "", "()V"); + if (_m_Intent__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__ctor1(jobject intent) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__ctor1, "", + "(Landroid/content/Intent;)V"); + if (_m_Intent__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor1, intent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__ctor2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__ctor2(jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__ctor2, "", "(Ljava/lang/String;)V"); + if (_m_Intent__ctor2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor2, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__ctor3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__ctor3(jobject string, jobject uri) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__ctor3, "", + "(Ljava/lang/String;Landroid/net/Uri;)V"); + if (_m_Intent__ctor3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor3, string, uri); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__ctor4 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__ctor4(jobject context, jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__ctor4, "", + "(Landroid/content/Context;Ljava/lang/Class;)V"); + if (_m_Intent__ctor4 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor4, context, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__ctor5 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__ctor5(jobject string, + jobject uri, + jobject context, + jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__ctor5, "", + "(Ljava/lang/String;Landroid/net/Uri;Landroid/content/" + "Context;Ljava/lang/Class;)V"); + if (_m_Intent__ctor5 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor5, + string, uri, context, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__createChooser = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__createChooser(jobject intent, jobject charSequence) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Intent, &_m_Intent__createChooser, "createChooser", + "(Landroid/content/Intent;Ljava/lang/" + "CharSequence;)Landroid/content/Intent;"); + if (_m_Intent__createChooser == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__createChooser, intent, charSequence); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__createChooser1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__createChooser1(jobject intent, + jobject charSequence, + jobject intentSender) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Intent, &_m_Intent__createChooser1, "createChooser", + "(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/" + "IntentSender;)Landroid/content/Intent;"); + if (_m_Intent__createChooser1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__createChooser1, intent, charSequence, + intentSender); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__clone = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__clone(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__clone, "clone", "()Ljava/lang/Object;"); + if (_m_Intent__clone == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__clone); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__cloneFilter = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__cloneFilter(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__cloneFilter, "cloneFilter", + "()Landroid/content/Intent;"); + if (_m_Intent__cloneFilter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__cloneFilter); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__makeMainActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__makeMainActivity(jobject componentName) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Intent, &_m_Intent__makeMainActivity, "makeMainActivity", + "(Landroid/content/ComponentName;)Landroid/content/Intent;"); + if (_m_Intent__makeMainActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__makeMainActivity, componentName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__makeMainSelectorActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__makeMainSelectorActivity(jobject string, jobject string1) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Intent, &_m_Intent__makeMainSelectorActivity, + "makeMainSelectorActivity", + "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__makeMainSelectorActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__makeMainSelectorActivity, string, string1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__makeRestartActivityTask = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__makeRestartActivityTask(jobject componentName) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Intent, &_m_Intent__makeRestartActivityTask, "makeRestartActivityTask", + "(Landroid/content/ComponentName;)Landroid/content/Intent;"); + if (_m_Intent__makeRestartActivityTask == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__makeRestartActivityTask, componentName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getIntent(jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Intent, &_m_Intent__getIntent, "getIntent", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__getIntent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__getIntent, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__parseUri = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__parseUri(jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Intent, &_m_Intent__parseUri, "parseUri", + "(Ljava/lang/String;I)Landroid/content/Intent;"); + if (_m_Intent__parseUri == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__parseUri, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getIntentOld = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getIntentOld(jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Intent, &_m_Intent__getIntentOld, "getIntentOld", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__getIntentOld == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__getIntentOld, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getAction = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getAction(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getAction, "getAction", + "()Ljava/lang/String;"); + if (_m_Intent__getAction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getAction); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getData = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getData(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getData, "getData", "()Landroid/net/Uri;"); + if (_m_Intent__getData == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getData); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getDataString = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getDataString(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getDataString, "getDataString", + "()Ljava/lang/String;"); + if (_m_Intent__getDataString == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getDataString); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getScheme = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getScheme(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getScheme, "getScheme", + "()Ljava/lang/String;"); + if (_m_Intent__getScheme == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getScheme); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getType = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getType(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getType, "getType", + "()Ljava/lang/String;"); + if (_m_Intent__getType == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getType); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__resolveType = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__resolveType(jobject self_, jobject context) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__resolveType, "resolveType", + "(Landroid/content/Context;)Ljava/lang/String;"); + if (_m_Intent__resolveType == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__resolveType, context); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__resolveType1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__resolveType1(jobject self_, jobject contentResolver) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__resolveType1, "resolveType", + "(Landroid/content/ContentResolver;)Ljava/lang/String;"); + if (_m_Intent__resolveType1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__resolveType1, contentResolver); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__resolveTypeIfNeeded = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__resolveTypeIfNeeded(jobject self_, jobject contentResolver) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__resolveTypeIfNeeded, "resolveTypeIfNeeded", + "(Landroid/content/ContentResolver;)Ljava/lang/String;"); + if (_m_Intent__resolveTypeIfNeeded == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__resolveTypeIfNeeded, contentResolver); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getIdentifier = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getIdentifier(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getIdentifier, "getIdentifier", + "()Ljava/lang/String;"); + if (_m_Intent__getIdentifier == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getIdentifier); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__hasCategory = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__hasCategory(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__hasCategory, "hasCategory", + "(Ljava/lang/String;)Z"); + if (_m_Intent__hasCategory == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Intent__hasCategory, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getCategories = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getCategories(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getCategories, "getCategories", + "()Ljava/util/Set;"); + if (_m_Intent__getCategories == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getCategories); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getSelector = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getSelector(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getSelector, "getSelector", + "()Landroid/content/Intent;"); + if (_m_Intent__getSelector == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getSelector); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getClipData = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getClipData(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getClipData, "getClipData", + "()Landroid/content/ClipData;"); + if (_m_Intent__getClipData == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getClipData); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setExtrasClassLoader = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setExtrasClassLoader(jobject self_, jobject classLoader) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setExtrasClassLoader, + "setExtrasClassLoader", "(Ljava/lang/ClassLoader;)V"); + if (_m_Intent__setExtrasClassLoader == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setExtrasClassLoader, + classLoader); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__hasExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__hasExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__hasExtra, "hasExtra", + "(Ljava/lang/String;)Z"); + if (_m_Intent__hasExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Intent__hasExtra, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__hasFileDescriptors = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__hasFileDescriptors(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__hasFileDescriptors, "hasFileDescriptors", + "()Z"); + if (_m_Intent__hasFileDescriptors == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, + _m_Intent__hasFileDescriptors); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getBooleanExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getBooleanExtra(jobject self_, jobject string, uint8_t z) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getBooleanExtra, "getBooleanExtra", + "(Ljava/lang/String;Z)Z"); + if (_m_Intent__getBooleanExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Intent__getBooleanExtra, string, z); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getByteExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getByteExtra(jobject self_, jobject string, int8_t b) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getByteExtra, "getByteExtra", + "(Ljava/lang/String;B)B"); + if (_m_Intent__getByteExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int8_t _result = (*jniEnv)->CallByteMethod( + jniEnv, self_, _m_Intent__getByteExtra, string, b); + return (JniResult){.result = {.b = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getShortExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getShortExtra(jobject self_, jobject string, int16_t s) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getShortExtra, "getShortExtra", + "(Ljava/lang/String;S)S"); + if (_m_Intent__getShortExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int16_t _result = (*jniEnv)->CallShortMethod( + jniEnv, self_, _m_Intent__getShortExtra, string, s); + return (JniResult){.result = {.s = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getCharExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getCharExtra(jobject self_, jobject string, char c) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getCharExtra, "getCharExtra", + "(Ljava/lang/String;C)C"); + if (_m_Intent__getCharExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + char _result = (*jniEnv)->CallCharMethod(jniEnv, self_, + _m_Intent__getCharExtra, string, c); + return (JniResult){.result = {.c = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getIntExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getIntExtra(jobject self_, jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getIntExtra, "getIntExtra", + "(Ljava/lang/String;I)I"); + if (_m_Intent__getIntExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, + _m_Intent__getIntExtra, string, i); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getLongExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getLongExtra(jobject self_, jobject string, int64_t j) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getLongExtra, "getLongExtra", + "(Ljava/lang/String;J)J"); + if (_m_Intent__getLongExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallLongMethod( + jniEnv, self_, _m_Intent__getLongExtra, string, j); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getFloatExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getFloatExtra(jobject self_, jobject string, float f) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getFloatExtra, "getFloatExtra", + "(Ljava/lang/String;F)F"); + if (_m_Intent__getFloatExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + float _result = (*jniEnv)->CallFloatMethod( + jniEnv, self_, _m_Intent__getFloatExtra, string, f); + return (JniResult){.result = {.f = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getDoubleExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getDoubleExtra(jobject self_, jobject string, double d) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getDoubleExtra, "getDoubleExtra", + "(Ljava/lang/String;D)D"); + if (_m_Intent__getDoubleExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + double _result = (*jniEnv)->CallDoubleMethod( + jniEnv, self_, _m_Intent__getDoubleExtra, string, d); + return (JniResult){.result = {.d = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getStringExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getStringExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getStringExtra, "getStringExtra", + "(Ljava/lang/String;)Ljava/lang/String;"); + if (_m_Intent__getStringExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getStringExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getCharSequenceExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getCharSequenceExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getCharSequenceExtra, + "getCharSequenceExtra", + "(Ljava/lang/String;)Ljava/lang/CharSequence;"); + if (_m_Intent__getCharSequenceExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getCharSequenceExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getParcelableExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getParcelableExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getParcelableExtra, "getParcelableExtra", + "(Ljava/lang/String;)Ljava/lang/Object;"); + if (_m_Intent__getParcelableExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getParcelableExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getParcelableExtra1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getParcelableExtra1(jobject self_, + jobject string, + jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getParcelableExtra1, "getParcelableExtra", + "(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;"); + if (_m_Intent__getParcelableExtra1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getParcelableExtra1, string, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getParcelableArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getParcelableArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getParcelableArrayExtra, + "getParcelableArrayExtra", + "(Ljava/lang/String;)[Landroid/os/Parcelable;"); + if (_m_Intent__getParcelableArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getParcelableArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getParcelableArrayExtra1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getParcelableArrayExtra1(jobject self_, + jobject string, + jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getParcelableArrayExtra1, + "getParcelableArrayExtra", + "(Ljava/lang/String;Ljava/lang/Class;)[Ljava/lang/Object;"); + if (_m_Intent__getParcelableArrayExtra1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getParcelableArrayExtra1, string, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getParcelableArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getParcelableArrayListExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getParcelableArrayListExtra, + "getParcelableArrayListExtra", + "(Ljava/lang/String;)Ljava/util/ArrayList;"); + if (_m_Intent__getParcelableArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getParcelableArrayListExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getParcelableArrayListExtra1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getParcelableArrayListExtra1(jobject self_, + jobject string, + jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getParcelableArrayListExtra1, + "getParcelableArrayListExtra", + "(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;"); + if (_m_Intent__getParcelableArrayListExtra1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getParcelableArrayListExtra1, string, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getSerializableExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getSerializableExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getSerializableExtra, + "getSerializableExtra", + "(Ljava/lang/String;)Ljava/io/Serializable;"); + if (_m_Intent__getSerializableExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getSerializableExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getSerializableExtra1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getSerializableExtra1(jobject self_, + jobject string, + jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getSerializableExtra1, + "getSerializableExtra", + "(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;"); + if (_m_Intent__getSerializableExtra1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getSerializableExtra1, string, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getIntegerArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getIntegerArrayListExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getIntegerArrayListExtra, + "getIntegerArrayListExtra", + "(Ljava/lang/String;)Ljava/util/ArrayList;"); + if (_m_Intent__getIntegerArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getIntegerArrayListExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getStringArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getStringArrayListExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getStringArrayListExtra, + "getStringArrayListExtra", + "(Ljava/lang/String;)Ljava/util/ArrayList;"); + if (_m_Intent__getStringArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getStringArrayListExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getCharSequenceArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getCharSequenceArrayListExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getCharSequenceArrayListExtra, + "getCharSequenceArrayListExtra", + "(Ljava/lang/String;)Ljava/util/ArrayList;"); + if (_m_Intent__getCharSequenceArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getCharSequenceArrayListExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getBooleanArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getBooleanArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getBooleanArrayExtra, + "getBooleanArrayExtra", "(Ljava/lang/String;)[Z"); + if (_m_Intent__getBooleanArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getBooleanArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getByteArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getByteArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getByteArrayExtra, "getByteArrayExtra", + "(Ljava/lang/String;)[B"); + if (_m_Intent__getByteArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getByteArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getShortArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getShortArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getShortArrayExtra, "getShortArrayExtra", + "(Ljava/lang/String;)[S"); + if (_m_Intent__getShortArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getShortArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getCharArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getCharArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getCharArrayExtra, "getCharArrayExtra", + "(Ljava/lang/String;)[C"); + if (_m_Intent__getCharArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getCharArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getIntArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getIntArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getIntArrayExtra, "getIntArrayExtra", + "(Ljava/lang/String;)[I"); + if (_m_Intent__getIntArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getIntArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getLongArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getLongArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getLongArrayExtra, "getLongArrayExtra", + "(Ljava/lang/String;)[J"); + if (_m_Intent__getLongArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getLongArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getFloatArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getFloatArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getFloatArrayExtra, "getFloatArrayExtra", + "(Ljava/lang/String;)[F"); + if (_m_Intent__getFloatArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getFloatArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getDoubleArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getDoubleArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getDoubleArrayExtra, "getDoubleArrayExtra", + "(Ljava/lang/String;)[D"); + if (_m_Intent__getDoubleArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getDoubleArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getStringArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getStringArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getStringArrayExtra, "getStringArrayExtra", + "(Ljava/lang/String;)[Ljava/lang/String;"); + if (_m_Intent__getStringArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getStringArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getCharSequenceArrayExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getCharSequenceArrayExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getCharSequenceArrayExtra, + "getCharSequenceArrayExtra", + "(Ljava/lang/String;)[Ljava/lang/CharSequence;"); + if (_m_Intent__getCharSequenceArrayExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getCharSequenceArrayExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getBundleExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getBundleExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getBundleExtra, "getBundleExtra", + "(Ljava/lang/String;)Landroid/os/Bundle;"); + if (_m_Intent__getBundleExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__getBundleExtra, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getExtras = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getExtras(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getExtras, "getExtras", + "()Landroid/os/Bundle;"); + if (_m_Intent__getExtras == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getExtras); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getFlags = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getFlags(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getFlags, "getFlags", "()I"); + if (_m_Intent__getFlags == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__getFlags); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__getPackage = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getPackage(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getPackage, "getPackage", + "()Ljava/lang/String;"); + if (_m_Intent__getPackage == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getPackage); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getComponent = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getComponent(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getComponent, "getComponent", + "()Landroid/content/ComponentName;"); + if (_m_Intent__getComponent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getComponent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__getSourceBounds = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__getSourceBounds(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__getSourceBounds, "getSourceBounds", + "()Landroid/graphics/Rect;"); + if (_m_Intent__getSourceBounds == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getSourceBounds); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__resolveActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__resolveActivity(jobject self_, jobject packageManager) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__resolveActivity, "resolveActivity", + "(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;"); + if (_m_Intent__resolveActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__resolveActivity, packageManager); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__resolveActivityInfo = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__resolveActivityInfo(jobject self_, + jobject packageManager, + int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__resolveActivityInfo, "resolveActivityInfo", + "(Landroid/content/pm/PackageManager;I)Landroid/content/pm/" + "ActivityInfo;"); + if (_m_Intent__resolveActivityInfo == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__resolveActivityInfo, packageManager, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setAction = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setAction(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setAction, "setAction", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setAction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setAction, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setData = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setData(jobject self_, jobject uri) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setData, "setData", + "(Landroid/net/Uri;)Landroid/content/Intent;"); + if (_m_Intent__setData == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setData, uri); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setDataAndNormalize = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setDataAndNormalize(jobject self_, jobject uri) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setDataAndNormalize, "setDataAndNormalize", + "(Landroid/net/Uri;)Landroid/content/Intent;"); + if (_m_Intent__setDataAndNormalize == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setDataAndNormalize, uri); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setType = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setType(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setType, "setType", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setType == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setType, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setTypeAndNormalize = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setTypeAndNormalize(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setTypeAndNormalize, "setTypeAndNormalize", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setTypeAndNormalize == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setTypeAndNormalize, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setDataAndType = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setDataAndType(jobject self_, jobject uri, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setDataAndType, "setDataAndType", + "(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setDataAndType == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setDataAndType, uri, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setDataAndTypeAndNormalize = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setDataAndTypeAndNormalize(jobject self_, + jobject uri, + jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setDataAndTypeAndNormalize, + "setDataAndTypeAndNormalize", + "(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setDataAndTypeAndNormalize == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setDataAndTypeAndNormalize, uri, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setIdentifier = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setIdentifier(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setIdentifier, "setIdentifier", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setIdentifier == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setIdentifier, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__addCategory = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__addCategory(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__addCategory, "addCategory", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__addCategory == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Intent__addCategory, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__removeCategory = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__removeCategory(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__removeCategory, "removeCategory", + "(Ljava/lang/String;)V"); + if (_m_Intent__removeCategory == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__removeCategory, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__setSelector = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setSelector(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setSelector, "setSelector", + "(Landroid/content/Intent;)V"); + if (_m_Intent__setSelector == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setSelector, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__setClipData = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setClipData(jobject self_, jobject clipData) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setClipData, "setClipData", + "(Landroid/content/ClipData;)V"); + if (_m_Intent__setClipData == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setClipData, clipData); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra(jobject self_, jobject string, uint8_t z) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra, "putExtra", + "(Ljava/lang/String;Z)Landroid/content/Intent;"); + if (_m_Intent__putExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Intent__putExtra, string, z); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra1(jobject self_, jobject string, int8_t b) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra1, "putExtra", + "(Ljava/lang/String;B)Landroid/content/Intent;"); + if (_m_Intent__putExtra1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra1, string, b); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra2(jobject self_, jobject string, char c) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra2, "putExtra", + "(Ljava/lang/String;C)Landroid/content/Intent;"); + if (_m_Intent__putExtra2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra2, string, c); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra3(jobject self_, jobject string, int16_t s) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra3, "putExtra", + "(Ljava/lang/String;S)Landroid/content/Intent;"); + if (_m_Intent__putExtra3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra3, string, s); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra4 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra4(jobject self_, jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra4, "putExtra", + "(Ljava/lang/String;I)Landroid/content/Intent;"); + if (_m_Intent__putExtra4 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra4, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra5 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra5(jobject self_, jobject string, int64_t j) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra5, "putExtra", + "(Ljava/lang/String;J)Landroid/content/Intent;"); + if (_m_Intent__putExtra5 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra5, string, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra6 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra6(jobject self_, jobject string, float f) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra6, "putExtra", + "(Ljava/lang/String;F)Landroid/content/Intent;"); + if (_m_Intent__putExtra6 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra6, string, f); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra7 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra7(jobject self_, jobject string, double d) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra7, "putExtra", + "(Ljava/lang/String;D)Landroid/content/Intent;"); + if (_m_Intent__putExtra7 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra7, string, d); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra8 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra8(jobject self_, jobject string, jobject string1) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra8, "putExtra", + "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__putExtra8 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra8, string, string1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra9 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra9(jobject self_, + jobject string, + jobject charSequence) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra9, "putExtra", + "(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;"); + if (_m_Intent__putExtra9 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra9, string, charSequence); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra10 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra10(jobject self_, + jobject string, + jobject parcelable) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra10, "putExtra", + "(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;"); + if (_m_Intent__putExtra10 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra10, string, parcelable); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra11 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra11(jobject self_, + jobject string, + jobject parcelables) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra11, "putExtra", + "(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;"); + if (_m_Intent__putExtra11 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra11, string, parcelables); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putParcelableArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putParcelableArrayListExtra(jobject self_, + jobject string, + jobject arrayList) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putParcelableArrayListExtra, + "putParcelableArrayListExtra", + "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); + if (_m_Intent__putParcelableArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putParcelableArrayListExtra, string, arrayList); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putIntegerArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putIntegerArrayListExtra(jobject self_, + jobject string, + jobject arrayList) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putIntegerArrayListExtra, + "putIntegerArrayListExtra", + "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); + if (_m_Intent__putIntegerArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putIntegerArrayListExtra, string, arrayList); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putStringArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putStringArrayListExtra(jobject self_, + jobject string, + jobject arrayList) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putStringArrayListExtra, "putStringArrayListExtra", + "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); + if (_m_Intent__putStringArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putStringArrayListExtra, string, arrayList); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putCharSequenceArrayListExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putCharSequenceArrayListExtra(jobject self_, + jobject string, + jobject arrayList) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putCharSequenceArrayListExtra, + "putCharSequenceArrayListExtra", + "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); + if (_m_Intent__putCharSequenceArrayListExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putCharSequenceArrayListExtra, string, + arrayList); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra12 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra12(jobject self_, + jobject string, + jobject serializable) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra12, "putExtra", + "(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;"); + if (_m_Intent__putExtra12 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra12, string, serializable); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra13 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra13(jobject self_, jobject string, jobject zs) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra13, "putExtra", + "(Ljava/lang/String;[Z)Landroid/content/Intent;"); + if (_m_Intent__putExtra13 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra13, string, zs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra14 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra14(jobject self_, jobject string, jobject bs) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra14, "putExtra", + "(Ljava/lang/String;[B)Landroid/content/Intent;"); + if (_m_Intent__putExtra14 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra14, string, bs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra15 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra15(jobject self_, jobject string, jobject ss) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra15, "putExtra", + "(Ljava/lang/String;[S)Landroid/content/Intent;"); + if (_m_Intent__putExtra15 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra15, string, ss); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra16 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra16(jobject self_, jobject string, jobject cs) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra16, "putExtra", + "(Ljava/lang/String;[C)Landroid/content/Intent;"); + if (_m_Intent__putExtra16 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra16, string, cs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra17 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra17(jobject self_, jobject string, jobject is) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra17, "putExtra", + "(Ljava/lang/String;[I)Landroid/content/Intent;"); + if (_m_Intent__putExtra17 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra17, string, is); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra18 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra18(jobject self_, jobject string, jobject js) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra18, "putExtra", + "(Ljava/lang/String;[J)Landroid/content/Intent;"); + if (_m_Intent__putExtra18 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra18, string, js); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra19 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra19(jobject self_, jobject string, jobject fs) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra19, "putExtra", + "(Ljava/lang/String;[F)Landroid/content/Intent;"); + if (_m_Intent__putExtra19 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra19, string, fs); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra20 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra20(jobject self_, jobject string, jobject ds) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtra20, "putExtra", + "(Ljava/lang/String;[D)Landroid/content/Intent;"); + if (_m_Intent__putExtra20 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra20, string, ds); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra21 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra21(jobject self_, jobject string, jobject strings) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra21, "putExtra", + "(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__putExtra21 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra21, string, strings); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra22 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra22(jobject self_, + jobject string, + jobject charSequences) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra22, "putExtra", + "(Ljava/lang/String;[Ljava/lang/CharSequence;)Landroid/content/Intent;"); + if (_m_Intent__putExtra22 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra22, string, charSequences); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtra23 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtra23(jobject self_, jobject string, jobject bundle) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__putExtra23, "putExtra", + "(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;"); + if (_m_Intent__putExtra23 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__putExtra23, string, bundle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtras = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtras(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtras, "putExtras", + "(Landroid/content/Intent;)Landroid/content/Intent;"); + if (_m_Intent__putExtras == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__putExtras, intent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__putExtras1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__putExtras1(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__putExtras1, "putExtras", + "(Landroid/os/Bundle;)Landroid/content/Intent;"); + if (_m_Intent__putExtras1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__putExtras1, bundle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__replaceExtras = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__replaceExtras(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__replaceExtras, "replaceExtras", + "(Landroid/content/Intent;)Landroid/content/Intent;"); + if (_m_Intent__replaceExtras == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__replaceExtras, intent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__replaceExtras1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__replaceExtras1(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__replaceExtras1, "replaceExtras", + "(Landroid/os/Bundle;)Landroid/content/Intent;"); + if (_m_Intent__replaceExtras1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__replaceExtras1, bundle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__removeExtra = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__removeExtra(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__removeExtra, "removeExtra", + "(Ljava/lang/String;)V"); + if (_m_Intent__removeExtra == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__removeExtra, string); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__setFlags = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setFlags(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setFlags, "setFlags", + "(I)Landroid/content/Intent;"); + if (_m_Intent__setFlags == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setFlags, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__addFlags = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__addFlags(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__addFlags, "addFlags", + "(I)Landroid/content/Intent;"); + if (_m_Intent__addFlags == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__addFlags, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__removeFlags = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__removeFlags(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__removeFlags, "removeFlags", "(I)V"); + if (_m_Intent__removeFlags == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__removeFlags, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__setPackage = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setPackage(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setPackage, "setPackage", + "(Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setPackage == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setPackage, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setComponent = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setComponent(jobject self_, jobject componentName) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setComponent, "setComponent", + "(Landroid/content/ComponentName;)Landroid/content/Intent;"); + if (_m_Intent__setComponent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setComponent, componentName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setClassName = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setClassName(jobject self_, jobject context, jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__setClassName, "setClassName", + "(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setClassName == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setClassName, context, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setClassName1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setClassName1(jobject self_, + jobject string, + jobject string1) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setClassName1, "setClassName", + "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"); + if (_m_Intent__setClassName1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setClassName1, string, string1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setClass = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setClass(jobject self_, jobject context, jobject class) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Intent, &_m_Intent__setClass, "setClass", + "(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;"); + if (_m_Intent__setClass == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent__setClass, context, class); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__setSourceBounds = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__setSourceBounds(jobject self_, jobject rect) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__setSourceBounds, "setSourceBounds", + "(Landroid/graphics/Rect;)V"); + if (_m_Intent__setSourceBounds == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setSourceBounds, rect); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__fillIn = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__fillIn(jobject self_, jobject intent, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__fillIn, "fillIn", + "(Landroid/content/Intent;I)I"); + if (_m_Intent__fillIn == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__fillIn, intent, i); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__filterEquals = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__filterEquals(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__filterEquals, "filterEquals", + "(Landroid/content/Intent;)Z"); + if (_m_Intent__filterEquals == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Intent__filterEquals, intent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__filterHashCode = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__filterHashCode(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__filterHashCode, "filterHashCode", "()I"); + if (_m_Intent__filterHashCode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__filterHashCode); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__toString1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__toString1(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__toString1, "toString", + "()Ljava/lang/String;"); + if (_m_Intent__toString1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__toString1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__toURI = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__toURI(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__toURI, "toURI", "()Ljava/lang/String;"); + if (_m_Intent__toURI == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__toURI); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__toUri = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__toUri(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__toUri, "toUri", "(I)Ljava/lang/String;"); + if (_m_Intent__toUri == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__toUri, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__describeContents = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__describeContents(jobject self_) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__describeContents, "describeContents", + "()I"); + if (_m_Intent__describeContents == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__describeContents); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent__writeToParcel = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__writeToParcel(jobject self_, jobject parcel, int32_t i) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__writeToParcel, "writeToParcel", + "(Landroid/os/Parcel;I)V"); + if (_m_Intent__writeToParcel == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__writeToParcel, parcel, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__readFromParcel = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__readFromParcel(jobject self_, jobject parcel) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__readFromParcel, "readFromParcel", + "(Landroid/os/Parcel;)V"); + if (_m_Intent__readFromParcel == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__readFromParcel, parcel); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent__parseIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__parseIntent(jobject resources, + jobject xmlPullParser, + jobject attributeSet) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Intent, &_m_Intent__parseIntent, "parseIntent", + "(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/" + "util/AttributeSet;)Landroid/content/Intent;"); + if (_m_Intent__parseIntent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__parseIntent, resources, xmlPullParser, + attributeSet); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Intent__normalizeMimeType = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent__normalizeMimeType(jobject string) { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Intent, &_m_Intent__normalizeMimeType, + "normalizeMimeType", + "(Ljava/lang/String;)Ljava/lang/String;"); + if (_m_Intent__normalizeMimeType == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent, _m_Intent__normalizeMimeType, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jfieldID _f_Intent__CREATOR = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Intent__CREATOR() { + load_env(); + load_class_gr(&_c_Intent, "android/content/Intent"); + if (_c_Intent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Intent, &_f_Intent__CREATOR, "CREATOR", + "Landroid/os/Parcelable$Creator;"); + jobject _result = to_global_ref( + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Intent, _f_Intent__CREATOR)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// android.app.Activity +jclass _c_Activity = NULL; + +jmethodID _m_Activity__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__ctor() { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__ctor, "", "()V"); + if (_m_Activity__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Activity, _m_Activity__ctor); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getIntent(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getIntent, "getIntent", + "()Landroid/content/Intent;"); + if (_m_Activity__getIntent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getIntent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setIntent(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setIntent, "setIntent", + "(Landroid/content/Intent;)V"); + if (_m_Activity__setIntent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setIntent, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setLocusContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setLocusContext(jobject self_, + jobject locusId, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setLocusContext, "setLocusContext", + "(Landroid/content/LocusId;Landroid/os/Bundle;)V"); + if (_m_Activity__setLocusContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setLocusContext, + locusId, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getApplication = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getApplication(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getApplication, "getApplication", + "()Landroid/app/Application;"); + if (_m_Activity__getApplication == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getApplication); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__isChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isChild(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isChild, "isChild", "()Z"); + if (_m_Activity__isChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isChild); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getParent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getParent(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getParent, "getParent", + "()Landroid/app/Activity;"); + if (_m_Activity__getParent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getParent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getWindowManager = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getWindowManager(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getWindowManager, "getWindowManager", + "()Landroid/view/WindowManager;"); + if (_m_Activity__getWindowManager == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getWindowManager); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getWindow = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getWindow(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getWindow, "getWindow", + "()Landroid/view/Window;"); + if (_m_Activity__getWindow == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getWindow); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getLoaderManager = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getLoaderManager(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getLoaderManager, "getLoaderManager", + "()Landroid/app/LoaderManager;"); + if (_m_Activity__getLoaderManager == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getLoaderManager); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getCurrentFocus = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getCurrentFocus(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getCurrentFocus, "getCurrentFocus", + "()Landroid/view/View;"); + if (_m_Activity__getCurrentFocus == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getCurrentFocus); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__attachBaseContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__attachBaseContext(jobject self_, jobject context) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__attachBaseContext, "attachBaseContext", + "(Landroid/content/Context;)V"); + if (_m_Activity__attachBaseContext == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__attachBaseContext, + context); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__registerActivityLifecycleCallbacks = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__registerActivityLifecycleCallbacks( + jobject self_, + jobject activityLifecycleCallbacks) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__registerActivityLifecycleCallbacks, + "registerActivityLifecycleCallbacks", + "(Landroid/app/Application$ActivityLifecycleCallbacks;)V"); + if (_m_Activity__registerActivityLifecycleCallbacks == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__registerActivityLifecycleCallbacks, + activityLifecycleCallbacks); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__unregisterActivityLifecycleCallbacks = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__unregisterActivityLifecycleCallbacks( + jobject self_, + jobject activityLifecycleCallbacks) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__unregisterActivityLifecycleCallbacks, + "unregisterActivityLifecycleCallbacks", + "(Landroid/app/Application$ActivityLifecycleCallbacks;)V"); + if (_m_Activity__unregisterActivityLifecycleCallbacks == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__unregisterActivityLifecycleCallbacks, + activityLifecycleCallbacks); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__registerComponentCallbacks = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__registerComponentCallbacks(jobject self_, + jobject componentCallbacks) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__registerComponentCallbacks, + "registerComponentCallbacks", + "(Landroid/content/ComponentCallbacks;)V"); + if (_m_Activity__registerComponentCallbacks == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__registerComponentCallbacks, + componentCallbacks); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__unregisterComponentCallbacks = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__unregisterComponentCallbacks(jobject self_, + jobject componentCallbacks) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__unregisterComponentCallbacks, + "unregisterComponentCallbacks", + "(Landroid/content/ComponentCallbacks;)V"); + if (_m_Activity__unregisterComponentCallbacks == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__unregisterComponentCallbacks, + componentCallbacks); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreate = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreate(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreate, "onCreate", + "(Landroid/os/Bundle;)V"); + if (_m_Activity__onCreate == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreate, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getSplashScreen = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getSplashScreen(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getSplashScreen, "getSplashScreen", + "()Landroid/window/SplashScreen;"); + if (_m_Activity__getSplashScreen == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getSplashScreen); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreate1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreate1(jobject self_, + jobject bundle, + jobject persistableBundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreate1, "onCreate", + "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); + if (_m_Activity__onCreate1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreate1, bundle, + persistableBundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onRestoreInstanceState = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onRestoreInstanceState(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onRestoreInstanceState, + "onRestoreInstanceState", "(Landroid/os/Bundle;)V"); + if (_m_Activity__onRestoreInstanceState == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onRestoreInstanceState, + bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onRestoreInstanceState1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onRestoreInstanceState1(jobject self_, + jobject bundle, + jobject persistableBundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onRestoreInstanceState1, + "onRestoreInstanceState", + "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); + if (_m_Activity__onRestoreInstanceState1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onRestoreInstanceState1, + bundle, persistableBundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPostCreate = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPostCreate(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPostCreate, "onPostCreate", + "(Landroid/os/Bundle;)V"); + if (_m_Activity__onPostCreate == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPostCreate, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPostCreate1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPostCreate1(jobject self_, + jobject bundle, + jobject persistableBundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPostCreate1, "onPostCreate", + "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); + if (_m_Activity__onPostCreate1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPostCreate1, bundle, + persistableBundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onStart = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onStart(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onStart, "onStart", "()V"); + if (_m_Activity__onStart == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onStart); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onRestart = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onRestart(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onRestart, "onRestart", "()V"); + if (_m_Activity__onRestart == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onRestart); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onStateNotSaved = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onStateNotSaved(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onStateNotSaved, "onStateNotSaved", + "()V"); + if (_m_Activity__onStateNotSaved == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onStateNotSaved); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onResume = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onResume(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onResume, "onResume", "()V"); + if (_m_Activity__onResume == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onResume); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPostResume = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPostResume(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPostResume, "onPostResume", "()V"); + if (_m_Activity__onPostResume == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPostResume); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onTopResumedActivityChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onTopResumedActivityChanged(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onTopResumedActivityChanged, + "onTopResumedActivityChanged", "(Z)V"); + if (_m_Activity__onTopResumedActivityChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onTopResumedActivityChanged, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isVoiceInteraction = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isVoiceInteraction(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isVoiceInteraction, + "isVoiceInteraction", "()Z"); + if (_m_Activity__isVoiceInteraction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isVoiceInteraction); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isVoiceInteractionRoot = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isVoiceInteractionRoot(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isVoiceInteractionRoot, + "isVoiceInteractionRoot", "()Z"); + if (_m_Activity__isVoiceInteractionRoot == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isVoiceInteractionRoot); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getVoiceInteractor = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getVoiceInteractor(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getVoiceInteractor, + "getVoiceInteractor", "()Landroid/app/VoiceInteractor;"); + if (_m_Activity__getVoiceInteractor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getVoiceInteractor); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__isLocalVoiceInteractionSupported = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isLocalVoiceInteractionSupported(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isLocalVoiceInteractionSupported, + "isLocalVoiceInteractionSupported", "()Z"); + if (_m_Activity__isLocalVoiceInteractionSupported == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isLocalVoiceInteractionSupported); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startLocalVoiceInteraction = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startLocalVoiceInteraction(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startLocalVoiceInteraction, + "startLocalVoiceInteraction", "(Landroid/os/Bundle;)V"); + if (_m_Activity__startLocalVoiceInteraction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startLocalVoiceInteraction, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onLocalVoiceInteractionStarted = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onLocalVoiceInteractionStarted(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onLocalVoiceInteractionStarted, + "onLocalVoiceInteractionStarted", "()V"); + if (_m_Activity__onLocalVoiceInteractionStarted == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onLocalVoiceInteractionStarted); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onLocalVoiceInteractionStopped = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onLocalVoiceInteractionStopped(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onLocalVoiceInteractionStopped, + "onLocalVoiceInteractionStopped", "()V"); + if (_m_Activity__onLocalVoiceInteractionStopped == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onLocalVoiceInteractionStopped); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__stopLocalVoiceInteraction = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__stopLocalVoiceInteraction(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__stopLocalVoiceInteraction, + "stopLocalVoiceInteraction", "()V"); + if (_m_Activity__stopLocalVoiceInteraction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__stopLocalVoiceInteraction); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onNewIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onNewIntent(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onNewIntent, "onNewIntent", + "(Landroid/content/Intent;)V"); + if (_m_Activity__onNewIntent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onNewIntent, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onSaveInstanceState = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onSaveInstanceState(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onSaveInstanceState, + "onSaveInstanceState", "(Landroid/os/Bundle;)V"); + if (_m_Activity__onSaveInstanceState == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onSaveInstanceState, + bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onSaveInstanceState1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onSaveInstanceState1(jobject self_, + jobject bundle, + jobject persistableBundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onSaveInstanceState1, + "onSaveInstanceState", + "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); + if (_m_Activity__onSaveInstanceState1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onSaveInstanceState1, + bundle, persistableBundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPause = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPause(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPause, "onPause", "()V"); + if (_m_Activity__onPause == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPause); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onUserLeaveHint = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onUserLeaveHint(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onUserLeaveHint, "onUserLeaveHint", + "()V"); + if (_m_Activity__onUserLeaveHint == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onUserLeaveHint); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateThumbnail = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateThumbnail(jobject self_, + jobject bitmap, + jobject canvas) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateThumbnail, "onCreateThumbnail", + "(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z"); + if (_m_Activity__onCreateThumbnail == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onCreateThumbnail, bitmap, canvas); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateDescription = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateDescription(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateDescription, + "onCreateDescription", "()Ljava/lang/CharSequence;"); + if (_m_Activity__onCreateDescription == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onCreateDescription); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onProvideAssistData = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onProvideAssistData(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onProvideAssistData, + "onProvideAssistData", "(Landroid/os/Bundle;)V"); + if (_m_Activity__onProvideAssistData == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onProvideAssistData, + bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onProvideAssistContent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onProvideAssistContent(jobject self_, + jobject assistContent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onProvideAssistContent, + "onProvideAssistContent", + "(Landroid/app/assist/AssistContent;)V"); + if (_m_Activity__onProvideAssistContent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onProvideAssistContent, + assistContent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onGetDirectActions = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onGetDirectActions(jobject self_, + jobject cancellationSignal, + jobject consumer) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Activity, &_m_Activity__onGetDirectActions, "onGetDirectActions", + "(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V"); + if (_m_Activity__onGetDirectActions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onGetDirectActions, + cancellationSignal, consumer); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPerformDirectAction = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPerformDirectAction(jobject self_, + jobject string, + jobject bundle, + jobject cancellationSignal, + jobject consumer) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPerformDirectAction, + "onPerformDirectAction", + "(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/" + "CancellationSignal;Ljava/util/function/Consumer;)V"); + if (_m_Activity__onPerformDirectAction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPerformDirectAction, + string, bundle, cancellationSignal, consumer); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__requestShowKeyboardShortcuts = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__requestShowKeyboardShortcuts(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__requestShowKeyboardShortcuts, + "requestShowKeyboardShortcuts", "()V"); + if (_m_Activity__requestShowKeyboardShortcuts == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__requestShowKeyboardShortcuts); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dismissKeyboardShortcutsHelper = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dismissKeyboardShortcutsHelper(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dismissKeyboardShortcutsHelper, + "dismissKeyboardShortcutsHelper", "()V"); + if (_m_Activity__dismissKeyboardShortcutsHelper == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__dismissKeyboardShortcutsHelper); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onProvideKeyboardShortcuts = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onProvideKeyboardShortcuts(jobject self_, + jobject list, + jobject menu, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onProvideKeyboardShortcuts, + "onProvideKeyboardShortcuts", + "(Ljava/util/List;Landroid/view/Menu;I)V"); + if (_m_Activity__onProvideKeyboardShortcuts == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Activity__onProvideKeyboardShortcuts, list, menu, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__showAssist = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__showAssist(jobject self_, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__showAssist, "showAssist", + "(Landroid/os/Bundle;)Z"); + if (_m_Activity__showAssist == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__showAssist, bundle); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onStop = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onStop(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onStop, "onStop", "()V"); + if (_m_Activity__onStop == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onStop); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onDestroy = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onDestroy(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onDestroy, "onDestroy", "()V"); + if (_m_Activity__onDestroy == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onDestroy); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__reportFullyDrawn = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__reportFullyDrawn(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__reportFullyDrawn, "reportFullyDrawn", + "()V"); + if (_m_Activity__reportFullyDrawn == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__reportFullyDrawn); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onMultiWindowModeChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onMultiWindowModeChanged(jobject self_, + uint8_t z, + jobject configuration) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onMultiWindowModeChanged, + "onMultiWindowModeChanged", + "(ZLandroid/content/res/Configuration;)V"); + if (_m_Activity__onMultiWindowModeChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Activity__onMultiWindowModeChanged, z, configuration); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onMultiWindowModeChanged1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onMultiWindowModeChanged1(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onMultiWindowModeChanged1, + "onMultiWindowModeChanged", "(Z)V"); + if (_m_Activity__onMultiWindowModeChanged1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onMultiWindowModeChanged1, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isInMultiWindowMode = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isInMultiWindowMode(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isInMultiWindowMode, + "isInMultiWindowMode", "()Z"); + if (_m_Activity__isInMultiWindowMode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isInMultiWindowMode); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPictureInPictureModeChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPictureInPictureModeChanged(jobject self_, + uint8_t z, + jobject configuration) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPictureInPictureModeChanged, + "onPictureInPictureModeChanged", + "(ZLandroid/content/res/Configuration;)V"); + if (_m_Activity__onPictureInPictureModeChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onPictureInPictureModeChanged, z, + configuration); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPictureInPictureUiStateChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPictureInPictureUiStateChanged( + jobject self_, + jobject pictureInPictureUiState) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPictureInPictureUiStateChanged, + "onPictureInPictureUiStateChanged", + "(Landroid/app/PictureInPictureUiState;)V"); + if (_m_Activity__onPictureInPictureUiStateChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onPictureInPictureUiStateChanged, + pictureInPictureUiState); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPictureInPictureModeChanged1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPictureInPictureModeChanged1(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPictureInPictureModeChanged1, + "onPictureInPictureModeChanged", "(Z)V"); + if (_m_Activity__onPictureInPictureModeChanged1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onPictureInPictureModeChanged1, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isInPictureInPictureMode = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isInPictureInPictureMode(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isInPictureInPictureMode, + "isInPictureInPictureMode", "()Z"); + if (_m_Activity__isInPictureInPictureMode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isInPictureInPictureMode); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__enterPictureInPictureMode = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__enterPictureInPictureMode(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__enterPictureInPictureMode, + "enterPictureInPictureMode", "()V"); + if (_m_Activity__enterPictureInPictureMode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__enterPictureInPictureMode); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__enterPictureInPictureMode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__enterPictureInPictureMode1(jobject self_, + jobject pictureInPictureParams) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__enterPictureInPictureMode1, + "enterPictureInPictureMode", + "(Landroid/app/PictureInPictureParams;)Z"); + if (_m_Activity__enterPictureInPictureMode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__enterPictureInPictureMode1, + pictureInPictureParams); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setPictureInPictureParams = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setPictureInPictureParams(jobject self_, + jobject pictureInPictureParams) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setPictureInPictureParams, + "setPictureInPictureParams", + "(Landroid/app/PictureInPictureParams;)V"); + if (_m_Activity__setPictureInPictureParams == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setPictureInPictureParams, + pictureInPictureParams); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getMaxNumPictureInPictureActions = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getMaxNumPictureInPictureActions(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getMaxNumPictureInPictureActions, + "getMaxNumPictureInPictureActions", "()I"); + if (_m_Activity__getMaxNumPictureInPictureActions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Activity__getMaxNumPictureInPictureActions); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPictureInPictureRequested = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPictureInPictureRequested(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPictureInPictureRequested, + "onPictureInPictureRequested", "()Z"); + if (_m_Activity__onPictureInPictureRequested == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onPictureInPictureRequested); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setShouldDockBigOverlays = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setShouldDockBigOverlays(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setShouldDockBigOverlays, + "setShouldDockBigOverlays", "(Z)V"); + if (_m_Activity__setShouldDockBigOverlays == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setShouldDockBigOverlays, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__shouldDockBigOverlays = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__shouldDockBigOverlays(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__shouldDockBigOverlays, + "shouldDockBigOverlays", "()Z"); + if (_m_Activity__shouldDockBigOverlays == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__shouldDockBigOverlays); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onConfigurationChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onConfigurationChanged(jobject self_, + jobject configuration) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onConfigurationChanged, + "onConfigurationChanged", + "(Landroid/content/res/Configuration;)V"); + if (_m_Activity__onConfigurationChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onConfigurationChanged, + configuration); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getChangingConfigurations = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getChangingConfigurations(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getChangingConfigurations, + "getChangingConfigurations", "()I"); + if (_m_Activity__getChangingConfigurations == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Activity__getChangingConfigurations); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getLastNonConfigurationInstance = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getLastNonConfigurationInstance(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getLastNonConfigurationInstance, + "getLastNonConfigurationInstance", "()Ljava/lang/Object;"); + if (_m_Activity__getLastNonConfigurationInstance == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getLastNonConfigurationInstance); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onRetainNonConfigurationInstance = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onRetainNonConfigurationInstance(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onRetainNonConfigurationInstance, + "onRetainNonConfigurationInstance", "()Ljava/lang/Object;"); + if (_m_Activity__onRetainNonConfigurationInstance == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onRetainNonConfigurationInstance); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onLowMemory = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onLowMemory(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onLowMemory, "onLowMemory", "()V"); + if (_m_Activity__onLowMemory == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onLowMemory); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onTrimMemory = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onTrimMemory(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onTrimMemory, "onTrimMemory", "(I)V"); + if (_m_Activity__onTrimMemory == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onTrimMemory, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getFragmentManager = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getFragmentManager(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getFragmentManager, + "getFragmentManager", "()Landroid/app/FragmentManager;"); + if (_m_Activity__getFragmentManager == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getFragmentManager); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onAttachFragment = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onAttachFragment(jobject self_, jobject fragment) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onAttachFragment, "onAttachFragment", + "(Landroid/app/Fragment;)V"); + if (_m_Activity__onAttachFragment == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onAttachFragment, + fragment); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__managedQuery = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__managedQuery(jobject self_, + jobject uri, + jobject strings, + jobject string, + jobject strings1, + jobject string1) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__managedQuery, "managedQuery", + "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/" + "lang/String;Ljava/lang/String;)Landroid/database/Cursor;"); + if (_m_Activity__managedQuery == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__managedQuery, uri, + strings, string, strings1, string1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__startManagingCursor = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startManagingCursor(jobject self_, jobject cursor) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startManagingCursor, + "startManagingCursor", "(Landroid/database/Cursor;)V"); + if (_m_Activity__startManagingCursor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startManagingCursor, + cursor); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__stopManagingCursor = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__stopManagingCursor(jobject self_, jobject cursor) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__stopManagingCursor, + "stopManagingCursor", "(Landroid/database/Cursor;)V"); + if (_m_Activity__stopManagingCursor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__stopManagingCursor, + cursor); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__findViewById = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__findViewById(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__findViewById, "findViewById", + "(I)Ljava/lang/Object;"); + if (_m_Activity__findViewById == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__findViewById, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__requireViewById = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__requireViewById(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__requireViewById, "requireViewById", + "(I)Ljava/lang/Object;"); + if (_m_Activity__requireViewById == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__requireViewById, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getActionBar = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getActionBar(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getActionBar, "getActionBar", + "()Landroid/app/ActionBar;"); + if (_m_Activity__getActionBar == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getActionBar); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setActionBar = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setActionBar(jobject self_, jobject toolbar) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setActionBar, "setActionBar", + "(Landroid/widget/Toolbar;)V"); + if (_m_Activity__setActionBar == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setActionBar, toolbar); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setContentView = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setContentView(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setContentView, "setContentView", + "(I)V"); + if (_m_Activity__setContentView == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentView, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setContentView1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setContentView1(jobject self_, jobject view) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setContentView1, "setContentView", + "(Landroid/view/View;)V"); + if (_m_Activity__setContentView1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentView1, view); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setContentView2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setContentView2(jobject self_, + jobject view, + jobject layoutParams) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setContentView2, "setContentView", + "(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"); + if (_m_Activity__setContentView2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentView2, view, + layoutParams); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__addContentView = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__addContentView(jobject self_, + jobject view, + jobject layoutParams) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__addContentView, "addContentView", + "(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"); + if (_m_Activity__addContentView == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__addContentView, view, + layoutParams); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getContentTransitionManager = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getContentTransitionManager(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getContentTransitionManager, + "getContentTransitionManager", + "()Landroid/transition/TransitionManager;"); + if (_m_Activity__getContentTransitionManager == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getContentTransitionManager); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setContentTransitionManager = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setContentTransitionManager(jobject self_, + jobject transitionManager) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setContentTransitionManager, + "setContentTransitionManager", + "(Landroid/transition/TransitionManager;)V"); + if (_m_Activity__setContentTransitionManager == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setContentTransitionManager, + transitionManager); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getContentScene = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getContentScene(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getContentScene, "getContentScene", + "()Landroid/transition/Scene;"); + if (_m_Activity__getContentScene == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getContentScene); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setFinishOnTouchOutside = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setFinishOnTouchOutside(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setFinishOnTouchOutside, + "setFinishOnTouchOutside", "(Z)V"); + if (_m_Activity__setFinishOnTouchOutside == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFinishOnTouchOutside, + z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setDefaultKeyMode = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setDefaultKeyMode(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setDefaultKeyMode, "setDefaultKeyMode", + "(I)V"); + if (_m_Activity__setDefaultKeyMode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setDefaultKeyMode, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onKeyDown = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onKeyDown(jobject self_, int32_t i, jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onKeyDown, "onKeyDown", + "(ILandroid/view/KeyEvent;)Z"); + if (_m_Activity__onKeyDown == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onKeyDown, i, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onKeyLongPress = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onKeyLongPress(jobject self_, int32_t i, jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onKeyLongPress, "onKeyLongPress", + "(ILandroid/view/KeyEvent;)Z"); + if (_m_Activity__onKeyLongPress == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onKeyLongPress, i, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onKeyUp = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onKeyUp(jobject self_, int32_t i, jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onKeyUp, "onKeyUp", + "(ILandroid/view/KeyEvent;)Z"); + if (_m_Activity__onKeyUp == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onKeyUp, i, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onKeyMultiple = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onKeyMultiple(jobject self_, + int32_t i, + int32_t i1, + jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onKeyMultiple, "onKeyMultiple", + "(IILandroid/view/KeyEvent;)Z"); + if (_m_Activity__onKeyMultiple == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onKeyMultiple, i, i1, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onBackPressed = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onBackPressed(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onBackPressed, "onBackPressed", "()V"); + if (_m_Activity__onBackPressed == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onBackPressed); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onKeyShortcut = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onKeyShortcut(jobject self_, int32_t i, jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onKeyShortcut, "onKeyShortcut", + "(ILandroid/view/KeyEvent;)Z"); + if (_m_Activity__onKeyShortcut == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onKeyShortcut, i, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onTouchEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onTouchEvent(jobject self_, jobject motionEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onTouchEvent, "onTouchEvent", + "(Landroid/view/MotionEvent;)Z"); + if (_m_Activity__onTouchEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onTouchEvent, motionEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onTrackballEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onTrackballEvent(jobject self_, jobject motionEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onTrackballEvent, "onTrackballEvent", + "(Landroid/view/MotionEvent;)Z"); + if (_m_Activity__onTrackballEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onTrackballEvent, motionEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onGenericMotionEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onGenericMotionEvent(jobject self_, jobject motionEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onGenericMotionEvent, + "onGenericMotionEvent", "(Landroid/view/MotionEvent;)Z"); + if (_m_Activity__onGenericMotionEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onGenericMotionEvent, motionEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onUserInteraction = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onUserInteraction(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onUserInteraction, "onUserInteraction", + "()V"); + if (_m_Activity__onUserInteraction == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onUserInteraction); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onWindowAttributesChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onWindowAttributesChanged(jobject self_, + jobject layoutParams) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onWindowAttributesChanged, + "onWindowAttributesChanged", + "(Landroid/view/WindowManager$LayoutParams;)V"); + if (_m_Activity__onWindowAttributesChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Activity__onWindowAttributesChanged, layoutParams); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onContentChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onContentChanged(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onContentChanged, "onContentChanged", + "()V"); + if (_m_Activity__onContentChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onContentChanged); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onWindowFocusChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onWindowFocusChanged(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onWindowFocusChanged, + "onWindowFocusChanged", "(Z)V"); + if (_m_Activity__onWindowFocusChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onWindowFocusChanged, + z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onAttachedToWindow = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onAttachedToWindow(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onAttachedToWindow, + "onAttachedToWindow", "()V"); + if (_m_Activity__onAttachedToWindow == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onAttachedToWindow); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onDetachedFromWindow = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onDetachedFromWindow(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onDetachedFromWindow, + "onDetachedFromWindow", "()V"); + if (_m_Activity__onDetachedFromWindow == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onDetachedFromWindow); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__hasWindowFocus = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__hasWindowFocus(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__hasWindowFocus, "hasWindowFocus", + "()Z"); + if (_m_Activity__hasWindowFocus == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__hasWindowFocus); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dispatchKeyEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dispatchKeyEvent(jobject self_, jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dispatchKeyEvent, "dispatchKeyEvent", + "(Landroid/view/KeyEvent;)Z"); + if (_m_Activity__dispatchKeyEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__dispatchKeyEvent, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dispatchKeyShortcutEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dispatchKeyShortcutEvent(jobject self_, jobject keyEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dispatchKeyShortcutEvent, + "dispatchKeyShortcutEvent", "(Landroid/view/KeyEvent;)Z"); + if (_m_Activity__dispatchKeyShortcutEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__dispatchKeyShortcutEvent, keyEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dispatchTouchEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dispatchTouchEvent(jobject self_, jobject motionEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dispatchTouchEvent, + "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z"); + if (_m_Activity__dispatchTouchEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__dispatchTouchEvent, motionEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dispatchTrackballEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dispatchTrackballEvent(jobject self_, jobject motionEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dispatchTrackballEvent, + "dispatchTrackballEvent", "(Landroid/view/MotionEvent;)Z"); + if (_m_Activity__dispatchTrackballEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__dispatchTrackballEvent, motionEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dispatchGenericMotionEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dispatchGenericMotionEvent(jobject self_, + jobject motionEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dispatchGenericMotionEvent, + "dispatchGenericMotionEvent", "(Landroid/view/MotionEvent;)Z"); + if (_m_Activity__dispatchGenericMotionEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__dispatchGenericMotionEvent, motionEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dispatchPopulateAccessibilityEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dispatchPopulateAccessibilityEvent( + jobject self_, + jobject accessibilityEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dispatchPopulateAccessibilityEvent, + "dispatchPopulateAccessibilityEvent", + "(Landroid/view/accessibility/AccessibilityEvent;)Z"); + if (_m_Activity__dispatchPopulateAccessibilityEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__dispatchPopulateAccessibilityEvent, + accessibilityEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreatePanelView = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreatePanelView(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreatePanelView, "onCreatePanelView", + "(I)Landroid/view/View;"); + if (_m_Activity__onCreatePanelView == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onCreatePanelView, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreatePanelMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreatePanelMenu(jobject self_, int32_t i, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreatePanelMenu, "onCreatePanelMenu", + "(ILandroid/view/Menu;)Z"); + if (_m_Activity__onCreatePanelMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onCreatePanelMenu, i, menu); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPreparePanel = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPreparePanel(jobject self_, + int32_t i, + jobject view, + jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPreparePanel, "onPreparePanel", + "(ILandroid/view/View;Landroid/view/Menu;)Z"); + if (_m_Activity__onPreparePanel == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onPreparePanel, i, view, menu); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onMenuOpened = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onMenuOpened(jobject self_, int32_t i, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onMenuOpened, "onMenuOpened", + "(ILandroid/view/Menu;)Z"); + if (_m_Activity__onMenuOpened == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onMenuOpened, i, menu); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onMenuItemSelected = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onMenuItemSelected(jobject self_, + int32_t i, + jobject menuItem) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onMenuItemSelected, + "onMenuItemSelected", "(ILandroid/view/MenuItem;)Z"); + if (_m_Activity__onMenuItemSelected == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onMenuItemSelected, i, menuItem); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPanelClosed = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPanelClosed(jobject self_, int32_t i, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPanelClosed, "onPanelClosed", + "(ILandroid/view/Menu;)V"); + if (_m_Activity__onPanelClosed == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPanelClosed, i, menu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__invalidateOptionsMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__invalidateOptionsMenu(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__invalidateOptionsMenu, + "invalidateOptionsMenu", "()V"); + if (_m_Activity__invalidateOptionsMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__invalidateOptionsMenu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateOptionsMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateOptionsMenu(jobject self_, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateOptionsMenu, + "onCreateOptionsMenu", "(Landroid/view/Menu;)Z"); + if (_m_Activity__onCreateOptionsMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onCreateOptionsMenu, menu); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPrepareOptionsMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPrepareOptionsMenu(jobject self_, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPrepareOptionsMenu, + "onPrepareOptionsMenu", "(Landroid/view/Menu;)Z"); + if (_m_Activity__onPrepareOptionsMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onPrepareOptionsMenu, menu); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onOptionsItemSelected = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onOptionsItemSelected(jobject self_, jobject menuItem) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onOptionsItemSelected, + "onOptionsItemSelected", "(Landroid/view/MenuItem;)Z"); + if (_m_Activity__onOptionsItemSelected == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onOptionsItemSelected, menuItem); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onNavigateUp = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onNavigateUp(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onNavigateUp, "onNavigateUp", "()Z"); + if (_m_Activity__onNavigateUp == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__onNavigateUp); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onNavigateUpFromChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onNavigateUpFromChild(jobject self_, jobject activity) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onNavigateUpFromChild, + "onNavigateUpFromChild", "(Landroid/app/Activity;)Z"); + if (_m_Activity__onNavigateUpFromChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onNavigateUpFromChild, activity); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateNavigateUpTaskStack = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateNavigateUpTaskStack(jobject self_, + jobject taskStackBuilder) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateNavigateUpTaskStack, + "onCreateNavigateUpTaskStack", + "(Landroid/app/TaskStackBuilder;)V"); + if (_m_Activity__onCreateNavigateUpTaskStack == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onCreateNavigateUpTaskStack, + taskStackBuilder); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPrepareNavigateUpTaskStack = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPrepareNavigateUpTaskStack(jobject self_, + jobject taskStackBuilder) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPrepareNavigateUpTaskStack, + "onPrepareNavigateUpTaskStack", + "(Landroid/app/TaskStackBuilder;)V"); + if (_m_Activity__onPrepareNavigateUpTaskStack == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onPrepareNavigateUpTaskStack, + taskStackBuilder); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onOptionsMenuClosed = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onOptionsMenuClosed(jobject self_, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onOptionsMenuClosed, + "onOptionsMenuClosed", "(Landroid/view/Menu;)V"); + if (_m_Activity__onOptionsMenuClosed == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onOptionsMenuClosed, + menu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__openOptionsMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__openOptionsMenu(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__openOptionsMenu, "openOptionsMenu", + "()V"); + if (_m_Activity__openOptionsMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__openOptionsMenu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__closeOptionsMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__closeOptionsMenu(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__closeOptionsMenu, "closeOptionsMenu", + "()V"); + if (_m_Activity__closeOptionsMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__closeOptionsMenu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateContextMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateContextMenu(jobject self_, + jobject contextMenu, + jobject view, + jobject contextMenuInfo) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateContextMenu, + "onCreateContextMenu", + "(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/" + "ContextMenu$ContextMenuInfo;)V"); + if (_m_Activity__onCreateContextMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreateContextMenu, + contextMenu, view, contextMenuInfo); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__registerForContextMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__registerForContextMenu(jobject self_, jobject view) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__registerForContextMenu, + "registerForContextMenu", "(Landroid/view/View;)V"); + if (_m_Activity__registerForContextMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__registerForContextMenu, + view); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__unregisterForContextMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__unregisterForContextMenu(jobject self_, jobject view) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__unregisterForContextMenu, + "unregisterForContextMenu", "(Landroid/view/View;)V"); + if (_m_Activity__unregisterForContextMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__unregisterForContextMenu, view); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__openContextMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__openContextMenu(jobject self_, jobject view) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__openContextMenu, "openContextMenu", + "(Landroid/view/View;)V"); + if (_m_Activity__openContextMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__openContextMenu, view); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__closeContextMenu = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__closeContextMenu(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__closeContextMenu, "closeContextMenu", + "()V"); + if (_m_Activity__closeContextMenu == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__closeContextMenu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onContextItemSelected = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onContextItemSelected(jobject self_, jobject menuItem) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onContextItemSelected, + "onContextItemSelected", "(Landroid/view/MenuItem;)Z"); + if (_m_Activity__onContextItemSelected == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onContextItemSelected, menuItem); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onContextMenuClosed = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onContextMenuClosed(jobject self_, jobject menu) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onContextMenuClosed, + "onContextMenuClosed", "(Landroid/view/Menu;)V"); + if (_m_Activity__onContextMenuClosed == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onContextMenuClosed, + menu); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateDialog = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateDialog(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateDialog, "onCreateDialog", + "(I)Landroid/app/Dialog;"); + if (_m_Activity__onCreateDialog == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Activity__onCreateDialog, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateDialog1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateDialog1(jobject self_, int32_t i, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateDialog1, "onCreateDialog", + "(ILandroid/os/Bundle;)Landroid/app/Dialog;"); + if (_m_Activity__onCreateDialog1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onCreateDialog1, i, bundle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onPrepareDialog = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPrepareDialog(jobject self_, int32_t i, jobject dialog) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPrepareDialog, "onPrepareDialog", + "(ILandroid/app/Dialog;)V"); + if (_m_Activity__onPrepareDialog == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPrepareDialog, i, + dialog); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onPrepareDialog1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onPrepareDialog1(jobject self_, + int32_t i, + jobject dialog, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onPrepareDialog1, "onPrepareDialog", + "(ILandroid/app/Dialog;Landroid/os/Bundle;)V"); + if (_m_Activity__onPrepareDialog1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPrepareDialog1, i, + dialog, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__showDialog = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__showDialog(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__showDialog, "showDialog", "(I)V"); + if (_m_Activity__showDialog == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__showDialog, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__showDialog1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__showDialog1(jobject self_, int32_t i, jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__showDialog1, "showDialog", + "(ILandroid/os/Bundle;)Z"); + if (_m_Activity__showDialog1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__showDialog1, i, bundle); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__dismissDialog = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dismissDialog(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dismissDialog, "dismissDialog", + "(I)V"); + if (_m_Activity__dismissDialog == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__dismissDialog, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__removeDialog = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__removeDialog(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__removeDialog, "removeDialog", "(I)V"); + if (_m_Activity__removeDialog == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__removeDialog, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onSearchRequested = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onSearchRequested(jobject self_, jobject searchEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onSearchRequested, "onSearchRequested", + "(Landroid/view/SearchEvent;)Z"); + if (_m_Activity__onSearchRequested == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onSearchRequested, searchEvent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onSearchRequested1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onSearchRequested1(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onSearchRequested1, + "onSearchRequested", "()Z"); + if (_m_Activity__onSearchRequested1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__onSearchRequested1); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getSearchEvent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getSearchEvent(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getSearchEvent, "getSearchEvent", + "()Landroid/view/SearchEvent;"); + if (_m_Activity__getSearchEvent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getSearchEvent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__startSearch = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startSearch(jobject self_, + jobject string, + uint8_t z, + jobject bundle, + uint8_t z1) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startSearch, "startSearch", + "(Ljava/lang/String;ZLandroid/os/Bundle;Z)V"); + if (_m_Activity__startSearch == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startSearch, string, z, + bundle, z1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__triggerSearch = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__triggerSearch(jobject self_, + jobject string, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__triggerSearch, "triggerSearch", + "(Ljava/lang/String;Landroid/os/Bundle;)V"); + if (_m_Activity__triggerSearch == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__triggerSearch, string, + bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__takeKeyEvents = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__takeKeyEvents(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__takeKeyEvents, "takeKeyEvents", + "(Z)V"); + if (_m_Activity__takeKeyEvents == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__takeKeyEvents, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__requestWindowFeature = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__requestWindowFeature(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__requestWindowFeature, + "requestWindowFeature", "(I)Z"); + if (_m_Activity__requestWindowFeature == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__requestWindowFeature, i); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setFeatureDrawableResource = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setFeatureDrawableResource(jobject self_, + int32_t i, + int32_t i1) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setFeatureDrawableResource, + "setFeatureDrawableResource", "(II)V"); + if (_m_Activity__setFeatureDrawableResource == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setFeatureDrawableResource, i, i1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setFeatureDrawableUri = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setFeatureDrawableUri(jobject self_, + int32_t i, + jobject uri) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setFeatureDrawableUri, + "setFeatureDrawableUri", "(ILandroid/net/Uri;)V"); + if (_m_Activity__setFeatureDrawableUri == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawableUri, + i, uri); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setFeatureDrawable = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setFeatureDrawable(jobject self_, + int32_t i, + jobject drawable) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setFeatureDrawable, + "setFeatureDrawable", "(ILandroid/graphics/drawable/Drawable;)V"); + if (_m_Activity__setFeatureDrawable == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawable, i, + drawable); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setFeatureDrawableAlpha = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setFeatureDrawableAlpha(jobject self_, + int32_t i, + int32_t i1) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setFeatureDrawableAlpha, + "setFeatureDrawableAlpha", "(II)V"); + if (_m_Activity__setFeatureDrawableAlpha == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawableAlpha, + i, i1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getLayoutInflater = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getLayoutInflater(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getLayoutInflater, "getLayoutInflater", + "()Landroid/view/LayoutInflater;"); + if (_m_Activity__getLayoutInflater == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Activity__getLayoutInflater); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getMenuInflater = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getMenuInflater(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getMenuInflater, "getMenuInflater", + "()Landroid/view/MenuInflater;"); + if (_m_Activity__getMenuInflater == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getMenuInflater); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setTheme = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTheme(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTheme, "setTheme", "(I)V"); + if (_m_Activity__setTheme == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTheme, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onApplyThemeResource = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onApplyThemeResource(jobject self_, + jobject theme, + int32_t i, + uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onApplyThemeResource, + "onApplyThemeResource", + "(Landroid/content/res/Resources$Theme;IZ)V"); + if (_m_Activity__onApplyThemeResource == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onApplyThemeResource, + theme, i, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__requestPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__requestPermissions(jobject self_, + jobject strings, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__requestPermissions, + "requestPermissions", "([Ljava/lang/String;I)V"); + if (_m_Activity__requestPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__requestPermissions, + strings, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onRequestPermissionsResult = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onRequestPermissionsResult(jobject self_, + int32_t i, + jobject strings, + jobject is) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onRequestPermissionsResult, + "onRequestPermissionsResult", "(I[Ljava/lang/String;[I)V"); + if (_m_Activity__onRequestPermissionsResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Activity__onRequestPermissionsResult, i, strings, is); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__shouldShowRequestPermissionRationale = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__shouldShowRequestPermissionRationale(jobject self_, + jobject string) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__shouldShowRequestPermissionRationale, + "shouldShowRequestPermissionRationale", "(Ljava/lang/String;)Z"); + if (_m_Activity__shouldShowRequestPermissionRationale == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__shouldShowRequestPermissionRationale, string); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityForResult = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityForResult(jobject self_, + jobject intent, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivityForResult, + "startActivityForResult", "(Landroid/content/Intent;I)V"); + if (_m_Activity__startActivityForResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityForResult, + intent, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityForResult1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityForResult1(jobject self_, + jobject intent, + int32_t i, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivityForResult1, + "startActivityForResult", + "(Landroid/content/Intent;ILandroid/os/Bundle;)V"); + if (_m_Activity__startActivityForResult1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityForResult1, + intent, i, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isActivityTransitionRunning = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isActivityTransitionRunning(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isActivityTransitionRunning, + "isActivityTransitionRunning", "()Z"); + if (_m_Activity__isActivityTransitionRunning == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isActivityTransitionRunning); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startIntentSenderForResult = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startIntentSenderForResult(jobject self_, + jobject intentSender, + int32_t i, + jobject intent, + int32_t i1, + int32_t i2, + int32_t i3) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startIntentSenderForResult, + "startIntentSenderForResult", + "(Landroid/content/IntentSender;ILandroid/content/Intent;III)V"); + if (_m_Activity__startIntentSenderForResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startIntentSenderForResult, + intentSender, i, intent, i1, i2, i3); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startIntentSenderForResult1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startIntentSenderForResult1(jobject self_, + jobject intentSender, + int32_t i, + jobject intent, + int32_t i1, + int32_t i2, + int32_t i3, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startIntentSenderForResult1, + "startIntentSenderForResult", + "(Landroid/content/IntentSender;ILandroid/content/" + "Intent;IIILandroid/os/Bundle;)V"); + if (_m_Activity__startIntentSenderForResult1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startIntentSenderForResult1, + intentSender, i, intent, i1, i2, i3, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivity(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivity, "startActivity", + "(Landroid/content/Intent;)V"); + if (_m_Activity__startActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivity, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivity1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivity1(jobject self_, + jobject intent, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivity1, "startActivity", + "(Landroid/content/Intent;Landroid/os/Bundle;)V"); + if (_m_Activity__startActivity1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivity1, intent, + bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivities = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivities(jobject self_, jobject intents) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivities, "startActivities", + "([Landroid/content/Intent;)V"); + if (_m_Activity__startActivities == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivities, + intents); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivities1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivities1(jobject self_, + jobject intents, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivities1, "startActivities", + "([Landroid/content/Intent;Landroid/os/Bundle;)V"); + if (_m_Activity__startActivities1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivities1, + intents, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startIntentSender = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startIntentSender(jobject self_, + jobject intentSender, + jobject intent, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startIntentSender, "startIntentSender", + "(Landroid/content/IntentSender;Landroid/content/Intent;III)V"); + if (_m_Activity__startIntentSender == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSender, + intentSender, intent, i, i1, i2); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startIntentSender1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startIntentSender1(jobject self_, + jobject intentSender, + jobject intent, + int32_t i, + int32_t i1, + int32_t i2, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startIntentSender1, + "startIntentSender", + "(Landroid/content/IntentSender;Landroid/content/" + "Intent;IIILandroid/os/Bundle;)V"); + if (_m_Activity__startIntentSender1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSender1, + intentSender, intent, i, i1, i2, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityIfNeeded = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityIfNeeded(jobject self_, + jobject intent, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivityIfNeeded, + "startActivityIfNeeded", "(Landroid/content/Intent;I)Z"); + if (_m_Activity__startActivityIfNeeded == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__startActivityIfNeeded, intent, i); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityIfNeeded1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityIfNeeded1(jobject self_, + jobject intent, + int32_t i, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivityIfNeeded1, + "startActivityIfNeeded", + "(Landroid/content/Intent;ILandroid/os/Bundle;)Z"); + if (_m_Activity__startActivityIfNeeded1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__startActivityIfNeeded1, intent, i, bundle); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startNextMatchingActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startNextMatchingActivity(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startNextMatchingActivity, + "startNextMatchingActivity", "(Landroid/content/Intent;)Z"); + if (_m_Activity__startNextMatchingActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__startNextMatchingActivity, intent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startNextMatchingActivity1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startNextMatchingActivity1(jobject self_, + jobject intent, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startNextMatchingActivity1, + "startNextMatchingActivity", + "(Landroid/content/Intent;Landroid/os/Bundle;)Z"); + if (_m_Activity__startNextMatchingActivity1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__startNextMatchingActivity1, intent, bundle); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityFromChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityFromChild(jobject self_, + jobject activity, + jobject intent, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivityFromChild, + "startActivityFromChild", + "(Landroid/app/Activity;Landroid/content/Intent;I)V"); + if (_m_Activity__startActivityFromChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityFromChild, + activity, intent, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityFromChild1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityFromChild1(jobject self_, + jobject activity, + jobject intent, + int32_t i, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Activity, &_m_Activity__startActivityFromChild1, + "startActivityFromChild", + "(Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)V"); + if (_m_Activity__startActivityFromChild1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityFromChild1, + activity, intent, i, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityFromFragment = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityFromFragment(jobject self_, + jobject fragment, + jobject intent, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActivityFromFragment, + "startActivityFromFragment", + "(Landroid/app/Fragment;Landroid/content/Intent;I)V"); + if (_m_Activity__startActivityFromFragment == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startActivityFromFragment, fragment, + intent, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActivityFromFragment1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActivityFromFragment1(jobject self_, + jobject fragment, + jobject intent, + int32_t i, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Activity, &_m_Activity__startActivityFromFragment1, + "startActivityFromFragment", + "(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V"); + if (_m_Activity__startActivityFromFragment1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startActivityFromFragment1, fragment, + intent, i, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startIntentSenderFromChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startIntentSenderFromChild(jobject self_, + jobject activity, + jobject intentSender, + int32_t i, + jobject intent, + int32_t i1, + int32_t i2, + int32_t i3) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startIntentSenderFromChild, + "startIntentSenderFromChild", + "(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/" + "content/Intent;III)V"); + if (_m_Activity__startIntentSenderFromChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startIntentSenderFromChild, activity, + intentSender, i, intent, i1, i2, i3); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startIntentSenderFromChild1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startIntentSenderFromChild1(jobject self_, + jobject activity, + jobject intentSender, + int32_t i, + jobject intent, + int32_t i1, + int32_t i2, + int32_t i3, + jobject bundle) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startIntentSenderFromChild1, + "startIntentSenderFromChild", + "(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/" + "content/Intent;IIILandroid/os/Bundle;)V"); + if (_m_Activity__startIntentSenderFromChild1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startIntentSenderFromChild1, activity, + intentSender, i, intent, i1, i2, i3, bundle); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__overridePendingTransition = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__overridePendingTransition(jobject self_, + int32_t i, + int32_t i1) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__overridePendingTransition, + "overridePendingTransition", "(II)V"); + if (_m_Activity__overridePendingTransition == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__overridePendingTransition, i, i1); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__overridePendingTransition1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__overridePendingTransition1(jobject self_, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__overridePendingTransition1, + "overridePendingTransition", "(III)V"); + if (_m_Activity__overridePendingTransition1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__overridePendingTransition1, i, i1, i2); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setResult = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setResult(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setResult, "setResult", "(I)V"); + if (_m_Activity__setResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setResult, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setResult1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setResult1(jobject self_, int32_t i, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setResult1, "setResult", + "(ILandroid/content/Intent;)V"); + if (_m_Activity__setResult1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setResult1, i, intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getReferrer = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getReferrer(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getReferrer, "getReferrer", + "()Landroid/net/Uri;"); + if (_m_Activity__getReferrer == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getReferrer); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onProvideReferrer = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onProvideReferrer(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onProvideReferrer, "onProvideReferrer", + "()Landroid/net/Uri;"); + if (_m_Activity__onProvideReferrer == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Activity__onProvideReferrer); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getCallingPackage = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getCallingPackage(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getCallingPackage, "getCallingPackage", + "()Ljava/lang/String;"); + if (_m_Activity__getCallingPackage == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Activity__getCallingPackage); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getCallingActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getCallingActivity(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getCallingActivity, + "getCallingActivity", "()Landroid/content/ComponentName;"); + if (_m_Activity__getCallingActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getCallingActivity); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setVisible = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setVisible(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setVisible, "setVisible", "(Z)V"); + if (_m_Activity__setVisible == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setVisible, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isFinishing = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isFinishing(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isFinishing, "isFinishing", "()Z"); + if (_m_Activity__isFinishing == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isFinishing); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isDestroyed = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isDestroyed(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isDestroyed, "isDestroyed", "()Z"); + if (_m_Activity__isDestroyed == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isDestroyed); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isChangingConfigurations = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isChangingConfigurations(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isChangingConfigurations, + "isChangingConfigurations", "()Z"); + if (_m_Activity__isChangingConfigurations == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isChangingConfigurations); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__recreate = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__recreate(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__recreate, "recreate", "()V"); + if (_m_Activity__recreate == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__recreate); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finish = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finish(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finish, "finish", "()V"); + if (_m_Activity__finish == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finish); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finishAffinity = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finishAffinity(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finishAffinity, "finishAffinity", + "()V"); + if (_m_Activity__finishAffinity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishAffinity); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finishFromChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finishFromChild(jobject self_, jobject activity) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finishFromChild, "finishFromChild", + "(Landroid/app/Activity;)V"); + if (_m_Activity__finishFromChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishFromChild, + activity); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finishAfterTransition = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finishAfterTransition(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finishAfterTransition, + "finishAfterTransition", "()V"); + if (_m_Activity__finishAfterTransition == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishAfterTransition); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finishActivity = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finishActivity(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finishActivity, "finishActivity", + "(I)V"); + if (_m_Activity__finishActivity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishActivity, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finishActivityFromChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finishActivityFromChild(jobject self_, + jobject activity, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finishActivityFromChild, + "finishActivityFromChild", "(Landroid/app/Activity;I)V"); + if (_m_Activity__finishActivityFromChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishActivityFromChild, + activity, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__finishAndRemoveTask = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__finishAndRemoveTask(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__finishAndRemoveTask, + "finishAndRemoveTask", "()V"); + if (_m_Activity__finishAndRemoveTask == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishAndRemoveTask); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__releaseInstance = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__releaseInstance(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__releaseInstance, "releaseInstance", + "()Z"); + if (_m_Activity__releaseInstance == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__releaseInstance); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onActivityResult = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onActivityResult(jobject self_, + int32_t i, + int32_t i1, + jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onActivityResult, "onActivityResult", + "(IILandroid/content/Intent;)V"); + if (_m_Activity__onActivityResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActivityResult, i, i1, + intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onActivityReenter = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onActivityReenter(jobject self_, + int32_t i, + jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onActivityReenter, "onActivityReenter", + "(ILandroid/content/Intent;)V"); + if (_m_Activity__onActivityReenter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActivityReenter, i, + intent); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__createPendingResult = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__createPendingResult(jobject self_, + int32_t i, + jobject intent, + int32_t i1) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__createPendingResult, + "createPendingResult", + "(ILandroid/content/Intent;I)Landroid/app/PendingIntent;"); + if (_m_Activity__createPendingResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__createPendingResult, i, intent, i1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setRequestedOrientation = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setRequestedOrientation(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setRequestedOrientation, + "setRequestedOrientation", "(I)V"); + if (_m_Activity__setRequestedOrientation == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setRequestedOrientation, + i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getRequestedOrientation = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getRequestedOrientation(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getRequestedOrientation, + "getRequestedOrientation", "()I"); + if (_m_Activity__getRequestedOrientation == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Activity__getRequestedOrientation); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getTaskId = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getTaskId(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getTaskId, "getTaskId", "()I"); + if (_m_Activity__getTaskId == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Activity__getTaskId); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isTaskRoot = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isTaskRoot(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isTaskRoot, "isTaskRoot", "()Z"); + if (_m_Activity__isTaskRoot == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isTaskRoot); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__moveTaskToBack = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__moveTaskToBack(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__moveTaskToBack, "moveTaskToBack", + "(Z)Z"); + if (_m_Activity__moveTaskToBack == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__moveTaskToBack, z); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getLocalClassName = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getLocalClassName(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getLocalClassName, "getLocalClassName", + "()Ljava/lang/String;"); + if (_m_Activity__getLocalClassName == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Activity__getLocalClassName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getComponentName = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getComponentName(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getComponentName, "getComponentName", + "()Landroid/content/ComponentName;"); + if (_m_Activity__getComponentName == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getComponentName); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getPreferences = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getPreferences(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getPreferences, "getPreferences", + "(I)Landroid/content/SharedPreferences;"); + if (_m_Activity__getPreferences == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, + _m_Activity__getPreferences, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__isLaunchedFromBubble = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isLaunchedFromBubble(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isLaunchedFromBubble, + "isLaunchedFromBubble", "()Z"); + if (_m_Activity__isLaunchedFromBubble == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__isLaunchedFromBubble); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getSystemService = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getSystemService(jobject self_, jobject string) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getSystemService, "getSystemService", + "(Ljava/lang/String;)Ljava/lang/Object;"); + if (_m_Activity__getSystemService == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getSystemService, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setTitle = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTitle(jobject self_, jobject charSequence) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTitle, "setTitle", + "(Ljava/lang/CharSequence;)V"); + if (_m_Activity__setTitle == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTitle, charSequence); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setTitle1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTitle1(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTitle1, "setTitle", "(I)V"); + if (_m_Activity__setTitle1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTitle1, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setTitleColor = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTitleColor(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTitleColor, "setTitleColor", + "(I)V"); + if (_m_Activity__setTitleColor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTitleColor, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getTitle = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getTitle(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getTitle, "getTitle", + "()Ljava/lang/CharSequence;"); + if (_m_Activity__getTitle == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getTitle); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__getTitleColor = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getTitleColor(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getTitleColor, "getTitleColor", "()I"); + if (_m_Activity__getTitleColor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Activity__getTitleColor); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onTitleChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onTitleChanged(jobject self_, + jobject charSequence, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onTitleChanged, "onTitleChanged", + "(Ljava/lang/CharSequence;I)V"); + if (_m_Activity__onTitleChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onTitleChanged, + charSequence, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onChildTitleChanged = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onChildTitleChanged(jobject self_, + jobject activity, + jobject charSequence) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onChildTitleChanged, + "onChildTitleChanged", + "(Landroid/app/Activity;Ljava/lang/CharSequence;)V"); + if (_m_Activity__onChildTitleChanged == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onChildTitleChanged, + activity, charSequence); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setTaskDescription = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTaskDescription(jobject self_, jobject taskDescription) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTaskDescription, + "setTaskDescription", + "(Landroid/app/ActivityManager$TaskDescription;)V"); + if (_m_Activity__setTaskDescription == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTaskDescription, + taskDescription); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setProgressBarVisibility = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setProgressBarVisibility(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setProgressBarVisibility, + "setProgressBarVisibility", "(Z)V"); + if (_m_Activity__setProgressBarVisibility == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setProgressBarVisibility, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setProgressBarIndeterminateVisibility = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setProgressBarIndeterminateVisibility(jobject self_, + uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setProgressBarIndeterminateVisibility, + "setProgressBarIndeterminateVisibility", "(Z)V"); + if (_m_Activity__setProgressBarIndeterminateVisibility == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Activity__setProgressBarIndeterminateVisibility, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setProgressBarIndeterminate = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setProgressBarIndeterminate(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setProgressBarIndeterminate, + "setProgressBarIndeterminate", "(Z)V"); + if (_m_Activity__setProgressBarIndeterminate == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setProgressBarIndeterminate, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setProgress = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setProgress(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setProgress, "setProgress", "(I)V"); + if (_m_Activity__setProgress == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setProgress, i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setSecondaryProgress = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setSecondaryProgress(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setSecondaryProgress, + "setSecondaryProgress", "(I)V"); + if (_m_Activity__setSecondaryProgress == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setSecondaryProgress, + i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setVolumeControlStream = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setVolumeControlStream(jobject self_, int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setVolumeControlStream, + "setVolumeControlStream", "(I)V"); + if (_m_Activity__setVolumeControlStream == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setVolumeControlStream, + i); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getVolumeControlStream = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getVolumeControlStream(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getVolumeControlStream, + "getVolumeControlStream", "()I"); + if (_m_Activity__getVolumeControlStream == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Activity__getVolumeControlStream); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setMediaController = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setMediaController(jobject self_, jobject mediaController) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setMediaController, + "setMediaController", + "(Landroid/media/session/MediaController;)V"); + if (_m_Activity__setMediaController == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setMediaController, + mediaController); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getMediaController = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getMediaController(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getMediaController, + "getMediaController", + "()Landroid/media/session/MediaController;"); + if (_m_Activity__getMediaController == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getMediaController); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__runOnUiThread = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__runOnUiThread(jobject self_, jobject runnable) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__runOnUiThread, "runOnUiThread", + "(Ljava/lang/Runnable;)V"); + if (_m_Activity__runOnUiThread == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__runOnUiThread, + runnable); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateView = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateView(jobject self_, + jobject string, + jobject context, + jobject attributeSet) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateView, "onCreateView", + "(Ljava/lang/String;Landroid/content/Context;Landroid/util/" + "AttributeSet;)Landroid/view/View;"); + if (_m_Activity__onCreateView == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onCreateView, string, context, attributeSet); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onCreateView1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onCreateView1(jobject self_, + jobject view, + jobject string, + jobject context, + jobject attributeSet) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onCreateView1, "onCreateView", + "(Landroid/view/View;Ljava/lang/String;Landroid/content/" + "Context;Landroid/util/AttributeSet;)Landroid/view/View;"); + if (_m_Activity__onCreateView1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__onCreateView1, + view, string, context, attributeSet); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__dump = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__dump(jobject self_, + jobject string, + jobject fileDescriptor, + jobject printWriter, + jobject strings) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__dump, "dump", + "(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/" + "PrintWriter;[Ljava/lang/String;)V"); + if (_m_Activity__dump == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__dump, string, + fileDescriptor, printWriter, strings); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__isImmersive = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__isImmersive(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__isImmersive, "isImmersive", "()Z"); + if (_m_Activity__isImmersive == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isImmersive); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setTranslucent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTranslucent(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTranslucent, "setTranslucent", + "(Z)Z"); + if (_m_Activity__setTranslucent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__setTranslucent, z); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__requestVisibleBehind = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__requestVisibleBehind(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__requestVisibleBehind, + "requestVisibleBehind", "(Z)Z"); + if (_m_Activity__requestVisibleBehind == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__requestVisibleBehind, z); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onVisibleBehindCanceled = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onVisibleBehindCanceled(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onVisibleBehindCanceled, + "onVisibleBehindCanceled", "()V"); + if (_m_Activity__onVisibleBehindCanceled == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onVisibleBehindCanceled); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onEnterAnimationComplete = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onEnterAnimationComplete(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onEnterAnimationComplete, + "onEnterAnimationComplete", "()V"); + if (_m_Activity__onEnterAnimationComplete == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__onEnterAnimationComplete); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setImmersive = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setImmersive(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setImmersive, "setImmersive", "(Z)V"); + if (_m_Activity__setImmersive == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setImmersive, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setVrModeEnabled = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setVrModeEnabled(jobject self_, + uint8_t z, + jobject componentName) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setVrModeEnabled, "setVrModeEnabled", + "(ZLandroid/content/ComponentName;)V"); + if (_m_Activity__setVrModeEnabled == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setVrModeEnabled, z, + componentName); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startActionMode = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActionMode(jobject self_, jobject callback) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActionMode, "startActionMode", + "(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;"); + if (_m_Activity__startActionMode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__startActionMode, callback); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__startActionMode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startActionMode1(jobject self_, + jobject callback, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startActionMode1, "startActionMode", + "(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;"); + if (_m_Activity__startActionMode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__startActionMode1, callback, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onWindowStartingActionMode = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onWindowStartingActionMode(jobject self_, + jobject callback) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onWindowStartingActionMode, + "onWindowStartingActionMode", + "(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;"); + if (_m_Activity__onWindowStartingActionMode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onWindowStartingActionMode, callback); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onWindowStartingActionMode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onWindowStartingActionMode1(jobject self_, + jobject callback, + int32_t i) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onWindowStartingActionMode1, + "onWindowStartingActionMode", + "(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;"); + if (_m_Activity__onWindowStartingActionMode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__onWindowStartingActionMode1, callback, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__onActionModeStarted = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onActionModeStarted(jobject self_, jobject actionMode) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onActionModeStarted, + "onActionModeStarted", "(Landroid/view/ActionMode;)V"); + if (_m_Activity__onActionModeStarted == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActionModeStarted, + actionMode); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__onActionModeFinished = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__onActionModeFinished(jobject self_, jobject actionMode) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__onActionModeFinished, + "onActionModeFinished", "(Landroid/view/ActionMode;)V"); + if (_m_Activity__onActionModeFinished == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActionModeFinished, + actionMode); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__shouldUpRecreateTask = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__shouldUpRecreateTask(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__shouldUpRecreateTask, + "shouldUpRecreateTask", "(Landroid/content/Intent;)Z"); + if (_m_Activity__shouldUpRecreateTask == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__shouldUpRecreateTask, intent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__navigateUpTo = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__navigateUpTo(jobject self_, jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__navigateUpTo, "navigateUpTo", + "(Landroid/content/Intent;)Z"); + if (_m_Activity__navigateUpTo == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__navigateUpTo, intent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__navigateUpToFromChild = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__navigateUpToFromChild(jobject self_, + jobject activity, + jobject intent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__navigateUpToFromChild, + "navigateUpToFromChild", + "(Landroid/app/Activity;Landroid/content/Intent;)Z"); + if (_m_Activity__navigateUpToFromChild == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Activity__navigateUpToFromChild, activity, intent); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getParentActivityIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getParentActivityIntent(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getParentActivityIntent, + "getParentActivityIntent", "()Landroid/content/Intent;"); + if (_m_Activity__getParentActivityIntent == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getParentActivityIntent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__setEnterSharedElementCallback = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setEnterSharedElementCallback( + jobject self_, + jobject sharedElementCallback) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setEnterSharedElementCallback, + "setEnterSharedElementCallback", + "(Landroid/app/SharedElementCallback;)V"); + if (_m_Activity__setEnterSharedElementCallback == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setEnterSharedElementCallback, + sharedElementCallback); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setExitSharedElementCallback = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setExitSharedElementCallback( + jobject self_, + jobject sharedElementCallback) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setExitSharedElementCallback, + "setExitSharedElementCallback", + "(Landroid/app/SharedElementCallback;)V"); + if (_m_Activity__setExitSharedElementCallback == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setExitSharedElementCallback, + sharedElementCallback); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__postponeEnterTransition = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__postponeEnterTransition(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__postponeEnterTransition, + "postponeEnterTransition", "()V"); + if (_m_Activity__postponeEnterTransition == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__postponeEnterTransition); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__startPostponedEnterTransition = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startPostponedEnterTransition(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startPostponedEnterTransition, + "startPostponedEnterTransition", "()V"); + if (_m_Activity__startPostponedEnterTransition == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__startPostponedEnterTransition); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__requestDragAndDropPermissions = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__requestDragAndDropPermissions(jobject self_, + jobject dragEvent) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Activity, &_m_Activity__requestDragAndDropPermissions, + "requestDragAndDropPermissions", + "(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;"); + if (_m_Activity__requestDragAndDropPermissions == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__requestDragAndDropPermissions, dragEvent); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Activity__startLockTask = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__startLockTask(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__startLockTask, "startLockTask", "()V"); + if (_m_Activity__startLockTask == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startLockTask); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__stopLockTask = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__stopLockTask(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__stopLockTask, "stopLockTask", "()V"); + if (_m_Activity__stopLockTask == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__stopLockTask); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__showLockTaskEscapeMessage = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__showLockTaskEscapeMessage(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__showLockTaskEscapeMessage, + "showLockTaskEscapeMessage", "()V"); + if (_m_Activity__showLockTaskEscapeMessage == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__showLockTaskEscapeMessage); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setRecentsScreenshotEnabled = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setRecentsScreenshotEnabled(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setRecentsScreenshotEnabled, + "setRecentsScreenshotEnabled", "(Z)V"); + if (_m_Activity__setRecentsScreenshotEnabled == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setRecentsScreenshotEnabled, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setShowWhenLocked = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setShowWhenLocked(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setShowWhenLocked, "setShowWhenLocked", + "(Z)V"); + if (_m_Activity__setShowWhenLocked == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setShowWhenLocked, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setInheritShowWhenLocked = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setInheritShowWhenLocked(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setInheritShowWhenLocked, + "setInheritShowWhenLocked", "(Z)V"); + if (_m_Activity__setInheritShowWhenLocked == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, + _m_Activity__setInheritShowWhenLocked, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__setTurnScreenOn = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__setTurnScreenOn(jobject self_, uint8_t z) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__setTurnScreenOn, "setTurnScreenOn", + "(Z)V"); + if (_m_Activity__setTurnScreenOn == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTurnScreenOn, z); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Activity__getOnBackInvokedDispatcher = NULL; +FFI_PLUGIN_EXPORT +JniResult Activity__getOnBackInvokedDispatcher(jobject self_) { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__getOnBackInvokedDispatcher, + "getOnBackInvokedDispatcher", + "()Landroid/window/OnBackInvokedDispatcher;"); + if (_m_Activity__getOnBackInvokedDispatcher == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Activity__getOnBackInvokedDispatcher); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jfieldID _f_Activity__FOCUSED_STATE_SET = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Activity__FOCUSED_STATE_SET() { + load_env(); + load_class_gr(&_c_Activity, "android/app/Activity"); + if (_c_Activity == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Activity, &_f_Activity__FOCUSED_STATE_SET, + "FOCUSED_STATE_SET", "[I"); + jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( + jniEnv, _c_Activity, _f_Activity__FOCUSED_STATE_SET)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// java.time.Instant +jclass _c_Instant = NULL; + +jmethodID _m_Instant__now = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__now() { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Instant, &_m_Instant__now, "now", + "()Ljava/time/Instant;"); + if (_m_Instant__now == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Instant, _m_Instant__now); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__now1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__now1(jobject clock) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Instant, &_m_Instant__now1, "now", + "(Ljava/time/Clock;)Ljava/time/Instant;"); + if (_m_Instant__now1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Instant, + _m_Instant__now1, clock); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__ofEpochSecond = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__ofEpochSecond(int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Instant, &_m_Instant__ofEpochSecond, "ofEpochSecond", + "(J)Ljava/time/Instant;"); + if (_m_Instant__ofEpochSecond == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Instant, _m_Instant__ofEpochSecond, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__ofEpochSecond1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__ofEpochSecond1(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Instant, &_m_Instant__ofEpochSecond1, "ofEpochSecond", + "(JJ)Ljava/time/Instant;"); + if (_m_Instant__ofEpochSecond1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Instant, _m_Instant__ofEpochSecond1, j, j1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__ofEpochMilli = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__ofEpochMilli(int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Instant, &_m_Instant__ofEpochMilli, "ofEpochMilli", + "(J)Ljava/time/Instant;"); + if (_m_Instant__ofEpochMilli == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Instant, _m_Instant__ofEpochMilli, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__from = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__from(jobject temporalAccessor) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Instant, &_m_Instant__from, "from", + "(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Instant;"); + if (_m_Instant__from == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Instant, _m_Instant__from, temporalAccessor); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__parse = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__parse(jobject charSequence) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Instant, &_m_Instant__parse, "parse", + "(Ljava/lang/CharSequence;)Ljava/time/Instant;"); + if (_m_Instant__parse == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Instant, _m_Instant__parse, charSequence); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__isSupported = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__isSupported(jobject self_, jobject temporalField) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__isSupported, "isSupported", + "(Ljava/time/temporal/TemporalField;)Z"); + if (_m_Instant__isSupported == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Instant__isSupported, temporalField); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__isSupported1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__isSupported1(jobject self_, jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__isSupported1, "isSupported", + "(Ljava/time/temporal/TemporalUnit;)Z"); + if (_m_Instant__isSupported1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Instant__isSupported1, temporalUnit); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__range = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__range(jobject self_, jobject temporalField) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__range, "range", + "(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;"); + if (_m_Instant__range == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__range, temporalField); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__get0 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__get0(jobject self_, jobject temporalField) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__get0, "get", + "(Ljava/time/temporal/TemporalField;)I"); + if (_m_Instant__get0 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__get0, temporalField); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__getLong = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__getLong(jobject self_, jobject temporalField) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__getLong, "getLong", + "(Ljava/time/temporal/TemporalField;)J"); + if (_m_Instant__getLong == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallLongMethod( + jniEnv, self_, _m_Instant__getLong, temporalField); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__getEpochSecond = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__getEpochSecond(jobject self_) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__getEpochSecond, "getEpochSecond", "()J"); + if (_m_Instant__getEpochSecond == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Instant__getEpochSecond); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__getNano = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__getNano(jobject self_) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__getNano, "getNano", "()I"); + if (_m_Instant__getNano == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__getNano); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__with0 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__with0(jobject self_, jobject temporalAdjuster) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__with0, "with", + "(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Instant;"); + if (_m_Instant__with0 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__with0, temporalAdjuster); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__with1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__with1(jobject self_, jobject temporalField, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__with1, "with", + "(Ljava/time/temporal/TemporalField;J)Ljava/time/Instant;"); + if (_m_Instant__with1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__with1, temporalField, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__truncatedTo = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__truncatedTo(jobject self_, jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__truncatedTo, "truncatedTo", + "(Ljava/time/temporal/TemporalUnit;)Ljava/time/Instant;"); + if (_m_Instant__truncatedTo == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__truncatedTo, temporalUnit); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plus = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plus(jobject self_, jobject temporalAmount) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__plus, "plus", + "(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"); + if (_m_Instant__plus == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plus, + temporalAmount); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plus1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plus1(jobject self_, int64_t j, jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__plus1, "plus", + "(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"); + if (_m_Instant__plus1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__plus1, j, temporalUnit); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plusSeconds = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plusSeconds(jobject self_, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__plusSeconds, "plusSeconds", + "(J)Ljava/time/Instant;"); + if (_m_Instant__plusSeconds == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plusSeconds, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plusMillis = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plusMillis(jobject self_, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__plusMillis, "plusMillis", + "(J)Ljava/time/Instant;"); + if (_m_Instant__plusMillis == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plusMillis, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plusNanos = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plusNanos(jobject self_, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__plusNanos, "plusNanos", + "(J)Ljava/time/Instant;"); + if (_m_Instant__plusNanos == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plusNanos, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minus = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minus(jobject self_, jobject temporalAmount) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__minus, "minus", + "(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"); + if (_m_Instant__minus == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__minus, temporalAmount); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minus1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minus1(jobject self_, int64_t j, jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__minus1, "minus", + "(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"); + if (_m_Instant__minus1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__minus1, j, temporalUnit); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minusSeconds = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minusSeconds(jobject self_, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__minusSeconds, "minusSeconds", + "(J)Ljava/time/Instant;"); + if (_m_Instant__minusSeconds == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__minusSeconds, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minusMillis = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minusMillis(jobject self_, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__minusMillis, "minusMillis", + "(J)Ljava/time/Instant;"); + if (_m_Instant__minusMillis == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__minusMillis, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minusNanos = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minusNanos(jobject self_, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__minusNanos, "minusNanos", + "(J)Ljava/time/Instant;"); + if (_m_Instant__minusNanos == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__minusNanos, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__query = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__query(jobject self_, jobject temporalQuery) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__query, "query", + "(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;"); + if (_m_Instant__query == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__query, temporalQuery); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__adjustInto = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__adjustInto(jobject self_, jobject temporal) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__adjustInto, "adjustInto", + "(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"); + if (_m_Instant__adjustInto == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__adjustInto, temporal); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__until = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__until(jobject self_, + jobject temporal, + jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__until, "until", + "(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J"); + if (_m_Instant__until == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Instant__until, + temporal, temporalUnit); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__atOffset = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__atOffset(jobject self_, jobject zoneOffset) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__atOffset, "atOffset", + "(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"); + if (_m_Instant__atOffset == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__atOffset, zoneOffset); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__atZone = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__atZone(jobject self_, jobject zoneId) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__atZone, "atZone", + "(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"); + if (_m_Instant__atZone == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__atZone, zoneId); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__toEpochMilli = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__toEpochMilli(jobject self_) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__toEpochMilli, "toEpochMilli", "()J"); + if (_m_Instant__toEpochMilli == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Instant__toEpochMilli); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__compareTo = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__compareTo(jobject self_, jobject instant) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__compareTo, "compareTo", + "(Ljava/time/Instant;)I"); + if (_m_Instant__compareTo == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__compareTo, instant); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__isAfter = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__isAfter(jobject self_, jobject instant) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__isAfter, "isAfter", + "(Ljava/time/Instant;)Z"); + if (_m_Instant__isAfter == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Instant__isAfter, instant); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__isBefore = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__isBefore(jobject self_, jobject instant) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__isBefore, "isBefore", + "(Ljava/time/Instant;)Z"); + if (_m_Instant__isBefore == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, + _m_Instant__isBefore, instant); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__equals1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__equals1, "equals", + "(Ljava/lang/Object;)Z"); + if (_m_Instant__equals1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Instant__equals1, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__hashCode1(jobject self_) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__hashCode1, "hashCode", "()I"); + if (_m_Instant__hashCode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__hashCode1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Instant__toString1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__toString1(jobject self_) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__toString1, "toString", + "()Ljava/lang/String;"); + if (_m_Instant__toString1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__toString1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minus2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minus2(jobject self_, int64_t j, jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__minus2, "minus", + "(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"); + if (_m_Instant__minus2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__minus2, j, temporalUnit); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__minus3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__minus3(jobject self_, jobject temporalAmount) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__minus3, "minus", + "(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"); + if (_m_Instant__minus3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__minus3, temporalAmount); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plus2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plus2(jobject self_, int64_t j, jobject temporalUnit) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__plus2, "plus", + "(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"); + if (_m_Instant__plus2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__plus2, j, temporalUnit); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__plus3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__plus3(jobject self_, jobject temporalAmount) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__plus3, "plus", + "(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"); + if (_m_Instant__plus3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__plus3, temporalAmount); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__with2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__with2(jobject self_, jobject temporalField, int64_t j) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__with2, "with", + "(Ljava/time/temporal/TemporalField;J)Ljava/time/temporal/Temporal;"); + if (_m_Instant__with2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__with2, temporalField, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__with3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__with3(jobject self_, jobject temporalAdjuster) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_Instant, &_m_Instant__with3, "with", + "(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/temporal/Temporal;"); + if (_m_Instant__with3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Instant__with3, temporalAdjuster); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Instant__compareTo1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Instant__compareTo1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Instant, &_m_Instant__compareTo1, "compareTo", + "(Ljava/lang/Object;)I"); + if (_m_Instant__compareTo1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__compareTo1, object); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jfieldID _f_Instant__EPOCH = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Instant__EPOCH() { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Instant, &_f_Instant__EPOCH, "EPOCH", + "Ljava/time/Instant;"); + jobject _result = to_global_ref( + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__EPOCH)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +jfieldID _f_Instant__MAX = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Instant__MAX() { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Instant, &_f_Instant__MAX, "MAX", "Ljava/time/Instant;"); + jobject _result = to_global_ref( + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__MAX)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +jfieldID _f_Instant__MIN = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Instant__MIN() { + load_env(); + load_class_gr(&_c_Instant, "java/time/Instant"); + if (_c_Instant == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Instant, &_f_Instant__MIN, "MIN", "Ljava/time/Instant;"); + jobject _result = to_global_ref( + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__MIN)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// java.lang.Long +jclass _c_Long = NULL; + +jmethodID _m_Long__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__ctor(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__ctor, "", "(J)V"); + if (_m_Long__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Long, _m_Long__ctor, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__ctor1(jobject string) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__ctor1, "", "(Ljava/lang/String;)V"); + if (_m_Long__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Long, _m_Long__ctor1, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toString1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toString1(int64_t j, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toString1, "toString", + "(JI)Ljava/lang/String;"); + if (_m_Long__toString1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, + _m_Long__toString1, j, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toUnsignedString = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toUnsignedString(int64_t j, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toUnsignedString, "toUnsignedString", + "(JI)Ljava/lang/String;"); + if (_m_Long__toUnsignedString == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__toUnsignedString, j, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toHexString = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toHexString(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toHexString, "toHexString", + "(J)Ljava/lang/String;"); + if (_m_Long__toHexString == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, + _m_Long__toHexString, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toOctalString = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toOctalString(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toOctalString, "toOctalString", + "(J)Ljava/lang/String;"); + if (_m_Long__toOctalString == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__toOctalString, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toBinaryString = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toBinaryString(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toBinaryString, "toBinaryString", + "(J)Ljava/lang/String;"); + if (_m_Long__toBinaryString == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__toBinaryString, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toString2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toString2(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toString2, "toString", + "(J)Ljava/lang/String;"); + if (_m_Long__toString2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, _m_Long__toString2, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__toUnsignedString1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toUnsignedString1(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__toUnsignedString1, "toUnsignedString", + "(J)Ljava/lang/String;"); + if (_m_Long__toUnsignedString1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__toUnsignedString1, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__parseLong = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__parseLong(jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__parseLong, "parseLong", + "(Ljava/lang/String;I)J"); + if (_m_Long__parseLong == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__parseLong, string, i); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__parseLong1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__parseLong1(jobject charSequence, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__parseLong1, "parseLong", + "(Ljava/lang/CharSequence;III)J"); + if (_m_Long__parseLong1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__parseLong1, charSequence, i, i1, i2); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__parseLong2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__parseLong2(jobject string) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__parseLong2, "parseLong", + "(Ljava/lang/String;)J"); + if (_m_Long__parseLong2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__parseLong2, string); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__parseUnsignedLong = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__parseUnsignedLong(jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__parseUnsignedLong, "parseUnsignedLong", + "(Ljava/lang/String;I)J"); + if (_m_Long__parseUnsignedLong == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__parseUnsignedLong, string, i); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__parseUnsignedLong1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__parseUnsignedLong1(jobject charSequence, + int32_t i, + int32_t i1, + int32_t i2) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__parseUnsignedLong1, "parseUnsignedLong", + "(Ljava/lang/CharSequence;III)J"); + if (_m_Long__parseUnsignedLong1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__parseUnsignedLong1, charSequence, i, i1, i2); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__parseUnsignedLong2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__parseUnsignedLong2(jobject string) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__parseUnsignedLong2, "parseUnsignedLong", + "(Ljava/lang/String;)J"); + if (_m_Long__parseUnsignedLong2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__parseUnsignedLong2, string); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__valueOf = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__valueOf(jobject string, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__valueOf, "valueOf", + "(Ljava/lang/String;I)Ljava/lang/Long;"); + if (_m_Long__valueOf == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__valueOf, string, i); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__valueOf1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__valueOf1(jobject string) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__valueOf1, "valueOf", + "(Ljava/lang/String;)Ljava/lang/Long;"); + if (_m_Long__valueOf1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__valueOf1, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__valueOf2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__valueOf2(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__valueOf2, "valueOf", + "(J)Ljava/lang/Long;"); + if (_m_Long__valueOf2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, _m_Long__valueOf2, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__decode = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__decode(jobject string) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__decode, "decode", + "(Ljava/lang/String;)Ljava/lang/Long;"); + if (_m_Long__decode == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, + _m_Long__decode, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__byteValue = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__byteValue(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__byteValue, "byteValue", "()B"); + if (_m_Long__byteValue == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int8_t _result = (*jniEnv)->CallByteMethod(jniEnv, self_, _m_Long__byteValue); + return (JniResult){.result = {.b = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__shortValue = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__shortValue(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__shortValue, "shortValue", "()S"); + if (_m_Long__shortValue == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int16_t _result = + (*jniEnv)->CallShortMethod(jniEnv, self_, _m_Long__shortValue); + return (JniResult){.result = {.s = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__intValue = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__intValue(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__intValue, "intValue", "()I"); + if (_m_Long__intValue == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__intValue); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__longValue = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__longValue(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__longValue, "longValue", "()J"); + if (_m_Long__longValue == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Long__longValue); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__floatValue = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__floatValue(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__floatValue, "floatValue", "()F"); + if (_m_Long__floatValue == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + float _result = + (*jniEnv)->CallFloatMethod(jniEnv, self_, _m_Long__floatValue); + return (JniResult){.result = {.f = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__doubleValue = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__doubleValue(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__doubleValue, "doubleValue", "()D"); + if (_m_Long__doubleValue == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + double _result = + (*jniEnv)->CallDoubleMethod(jniEnv, self_, _m_Long__doubleValue); + return (JniResult){.result = {.d = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__toString3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__toString3(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__toString3, "toString", "()Ljava/lang/String;"); + if (_m_Long__toString3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Long__toString3); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__hashCode1(jobject self_) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__hashCode1, "hashCode", "()I"); + if (_m_Long__hashCode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__hashCode1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__hashCode2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__hashCode2(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__hashCode2, "hashCode", "(J)I"); + if (_m_Long__hashCode2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__hashCode2, j); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__equals1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__equals1, "equals", "(Ljava/lang/Object;)Z"); + if (_m_Long__equals1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Long__equals1, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__getLong = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__getLong(jobject string) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__getLong, "getLong", + "(Ljava/lang/String;)Ljava/lang/Long;"); + if (_m_Long__getLong == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, + _m_Long__getLong, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__getLong1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__getLong1(jobject string, int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__getLong1, "getLong", + "(Ljava/lang/String;J)Ljava/lang/Long;"); + if (_m_Long__getLong1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__getLong1, string, j); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__getLong2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__getLong2(jobject string, jobject long0) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__getLong2, "getLong", + "(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;"); + if (_m_Long__getLong2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Long, _m_Long__getLong2, string, long0); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Long__compareTo = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__compareTo(jobject self_, jobject long0) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__compareTo, "compareTo", "(Ljava/lang/Long;)I"); + if (_m_Long__compareTo == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__compareTo, long0); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__compare = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__compare(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__compare, "compare", "(JJ)I"); + if (_m_Long__compare == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__compare, j, j1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__compareUnsigned = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__compareUnsigned(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__compareUnsigned, "compareUnsigned", + "(JJ)I"); + if (_m_Long__compareUnsigned == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallStaticIntMethod( + jniEnv, _c_Long, _m_Long__compareUnsigned, j, j1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__divideUnsigned = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__divideUnsigned(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__divideUnsigned, "divideUnsigned", + "(JJ)J"); + if (_m_Long__divideUnsigned == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__divideUnsigned, j, j1); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__remainderUnsigned = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__remainderUnsigned(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__remainderUnsigned, "remainderUnsigned", + "(JJ)J"); + if (_m_Long__remainderUnsigned == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod( + jniEnv, _c_Long, _m_Long__remainderUnsigned, j, j1); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__highestOneBit = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__highestOneBit(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__highestOneBit, "highestOneBit", "(J)J"); + if (_m_Long__highestOneBit == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, + _m_Long__highestOneBit, j); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__lowestOneBit = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__lowestOneBit(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__lowestOneBit, "lowestOneBit", "(J)J"); + if (_m_Long__lowestOneBit == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, + _m_Long__lowestOneBit, j); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__numberOfLeadingZeros = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__numberOfLeadingZeros(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__numberOfLeadingZeros, + "numberOfLeadingZeros", "(J)I"); + if (_m_Long__numberOfLeadingZeros == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallStaticIntMethod( + jniEnv, _c_Long, _m_Long__numberOfLeadingZeros, j); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__numberOfTrailingZeros = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__numberOfTrailingZeros(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__numberOfTrailingZeros, + "numberOfTrailingZeros", "(J)I"); + if (_m_Long__numberOfTrailingZeros == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallStaticIntMethod( + jniEnv, _c_Long, _m_Long__numberOfTrailingZeros, j); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__bitCount = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__bitCount(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__bitCount, "bitCount", "(J)I"); + if (_m_Long__bitCount == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__bitCount, j); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__rotateLeft = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__rotateLeft(int64_t j, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__rotateLeft, "rotateLeft", "(JI)J"); + if (_m_Long__rotateLeft == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, + _m_Long__rotateLeft, j, i); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__rotateRight = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__rotateRight(int64_t j, int32_t i) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__rotateRight, "rotateRight", "(JI)J"); + if (_m_Long__rotateRight == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, + _m_Long__rotateRight, j, i); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__reverse = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__reverse(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__reverse, "reverse", "(J)J"); + if (_m_Long__reverse == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__reverse, j); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__signum = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__signum(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__signum, "signum", "(J)I"); + if (_m_Long__signum == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__signum, j); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__reverseBytes = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__reverseBytes(int64_t j) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__reverseBytes, "reverseBytes", "(J)J"); + if (_m_Long__reverseBytes == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, + _m_Long__reverseBytes, j); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__sum = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__sum(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__sum, "sum", "(JJ)J"); + if (_m_Long__sum == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__sum, j, j1); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__max = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__max(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__max, "max", "(JJ)J"); + if (_m_Long__max == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__max, j, j1); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__min = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__min(int64_t j, int64_t j1) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Long, &_m_Long__min, "min", "(JJ)J"); + if (_m_Long__min == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int64_t _result = + (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__min, j, j1); + return (JniResult){.result = {.j = _result}, .exception = check_exception()}; +} + +jmethodID _m_Long__compareTo1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Long__compareTo1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Long, &_m_Long__compareTo1, "compareTo", + "(Ljava/lang/Object;)I"); + if (_m_Long__compareTo1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__compareTo1, object); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jfieldID _f_Long__TYPE = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Long__TYPE() { + load_env(); + load_class_gr(&_c_Long, "java/lang/Long"); + if (_c_Long == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Long, &_f_Long__TYPE, "TYPE", "Ljava/lang/Class;"); + jobject _result = to_global_ref( + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Long, _f_Long__TYPE)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} + +// java.util.Set +jclass _c_Set = NULL; + +jmethodID _m_Set__size = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__size(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__size, "size", "()I"); + if (_m_Set__size == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Set__size); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__isEmpty = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__isEmpty(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__isEmpty, "isEmpty", "()Z"); + if (_m_Set__isEmpty == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__isEmpty); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__contains = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__contains(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__contains, "contains", "(Ljava/lang/Object;)Z"); + if (_m_Set__contains == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__contains, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__iterator = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__iterator(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__iterator, "iterator", "()Ljava/util/Iterator;"); + if (_m_Set__iterator == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__iterator); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__toArray = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__toArray(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__toArray, "toArray", "()[Ljava/lang/Object;"); + if (_m_Set__toArray == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__toArray); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__toArray1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__toArray1(jobject self_, jobject objects) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__toArray1, "toArray", + "([Ljava/lang/Object;)[Ljava/lang/Object;"); + if (_m_Set__toArray1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__toArray1, objects); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__add = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__add(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__add, "add", "(Ljava/lang/Object;)Z"); + if (_m_Set__add == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__add, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__remove = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__remove(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__remove, "remove", "(Ljava/lang/Object;)Z"); + if (_m_Set__remove == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__remove, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__containsAll = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__containsAll(jobject self_, jobject collection) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__containsAll, "containsAll", + "(Ljava/util/Collection;)Z"); + if (_m_Set__containsAll == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Set__containsAll, collection); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__addAll = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__addAll(jobject self_, jobject collection) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__addAll, "addAll", "(Ljava/util/Collection;)Z"); + if (_m_Set__addAll == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__addAll, collection); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__retainAll = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__retainAll(jobject self_, jobject collection) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__retainAll, "retainAll", + "(Ljava/util/Collection;)Z"); + if (_m_Set__retainAll == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, + _m_Set__retainAll, collection); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__removeAll = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__removeAll(jobject self_, jobject collection) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__removeAll, "removeAll", + "(Ljava/util/Collection;)Z"); + if (_m_Set__removeAll == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, + _m_Set__removeAll, collection); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__clear = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__clear(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__clear, "clear", "()V"); + if (_m_Set__clear == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Set__clear); + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Set__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__equals1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__equals1, "equals", "(Ljava/lang/Object;)Z"); + if (_m_Set__equals1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = + (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__equals1, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__hashCode1(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__hashCode1, "hashCode", "()I"); + if (_m_Set__hashCode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Set__hashCode1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Set__spliterator = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__spliterator(jobject self_) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_Set, &_m_Set__spliterator, "spliterator", + "()Ljava/util/Spliterator;"); + if (_m_Set__spliterator == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__spliterator); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of() { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of, "of", "()Ljava/util/Set;"); + if (_m_Set__of == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Set, _m_Set__of); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of1(jobject object) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of1, "of", + "(Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Set, _m_Set__of1, object); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of2 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of2(jobject object, jobject object1) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of2, "of", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of2 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of2, object, object1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of3 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of3(jobject object, jobject object1, jobject object2) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of3, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;)Ljava/util/Set;"); + if (_m_Set__of3 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of3, object, object1, object2); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of4 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of4(jobject object, + jobject object1, + jobject object2, + jobject object3) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of4, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of4 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of4, object, object1, object2, object3); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of5 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of5(jobject object, + jobject object1, + jobject object2, + jobject object3, + jobject object4) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Set, &_m_Set__of5, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of5 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of5, object, object1, object2, object3, object4); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of6 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of6(jobject object, + jobject object1, + jobject object2, + jobject object3, + jobject object4, + jobject object5) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Set, &_m_Set__of6, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of6 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of6, object, object1, object2, object3, object4, + object5); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of7 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of7(jobject object, + jobject object1, + jobject object2, + jobject object3, + jobject object4, + jobject object5, + jobject object6) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of7, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of7 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of7, object, object1, object2, object3, object4, + object5, object6); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of8 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of8(jobject object, + jobject object1, + jobject object2, + jobject object3, + jobject object4, + jobject object5, + jobject object6, + jobject object7) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Set, &_m_Set__of8, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;)Ljava/util/Set;"); + if (_m_Set__of8 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of8, object, object1, object2, object3, object4, + object5, object6, object7); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of9 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of9(jobject object, + jobject object1, + jobject object2, + jobject object3, + jobject object4, + jobject object5, + jobject object6, + jobject object7, + jobject object8) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Set, &_m_Set__of9, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of9 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of9, object, object1, object2, object3, object4, + object5, object6, object7, object8); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of10 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of10(jobject object, + jobject object1, + jobject object2, + jobject object3, + jobject object4, + jobject object5, + jobject object6, + jobject object7, + jobject object8, + jobject object9) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_Set, &_m_Set__of10, "of", + "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" + "Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of10 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__of10, object, object1, object2, object3, object4, + object5, object6, object7, object8, object9); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__of11 = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__of11(jobject objects) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__of11, "of", + "([Ljava/lang/Object;)Ljava/util/Set;"); + if (_m_Set__of11 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Set, _m_Set__of11, objects); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_Set__copyOf = NULL; +FFI_PLUGIN_EXPORT +JniResult Set__copyOf(jobject collection) { + load_env(); + load_class_gr(&_c_Set, "java/util/Set"); + if (_c_Set == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Set, &_m_Set__copyOf, "copyOf", + "(Ljava/util/Collection;)Ljava/util/Set;"); + if (_m_Set__copyOf == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Set, _m_Set__copyOf, collection); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.request.AggregateGroupByDurationRequest +jclass _c_AggregateGroupByDurationRequest = NULL; + +jmethodID _m_AggregateGroupByDurationRequest__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateGroupByDurationRequest__ctor(jobject set, + jobject timeRangeFilter, + jobject duration, + jobject set1) { + load_env(); + load_class_gr( + &_c_AggregateGroupByDurationRequest, + "androidx/health/connect/client/request/AggregateGroupByDurationRequest"); + if (_c_AggregateGroupByDurationRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByDurationRequest, + &_m_AggregateGroupByDurationRequest__ctor, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Duration;Ljava/util/Set;)V"); + if (_m_AggregateGroupByDurationRequest__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_AggregateGroupByDurationRequest, + _m_AggregateGroupByDurationRequest__ctor, set, + timeRangeFilter, duration, set1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_AggregateGroupByDurationRequest__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateGroupByDurationRequest__ctor1( + jobject set, + jobject timeRangeFilter, + jobject duration, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr( + &_c_AggregateGroupByDurationRequest, + "androidx/health/connect/client/request/AggregateGroupByDurationRequest"); + if (_c_AggregateGroupByDurationRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByDurationRequest, + &_m_AggregateGroupByDurationRequest__ctor1, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Duration;Ljava/util/Set;ILkotlin/jvm/" + "internal/DefaultConstructorMarker;)V"); + if (_m_AggregateGroupByDurationRequest__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregateGroupByDurationRequest, + _m_AggregateGroupByDurationRequest__ctor1, set, timeRangeFilter, duration, + set1, i, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.request.AggregateGroupByPeriodRequest +jclass _c_AggregateGroupByPeriodRequest = NULL; + +jmethodID _m_AggregateGroupByPeriodRequest__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateGroupByPeriodRequest__ctor(jobject set, + jobject timeRangeFilter, + jobject period, + jobject set1) { + load_env(); + load_class_gr( + &_c_AggregateGroupByPeriodRequest, + "androidx/health/connect/client/request/AggregateGroupByPeriodRequest"); + if (_c_AggregateGroupByPeriodRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByPeriodRequest, + &_m_AggregateGroupByPeriodRequest__ctor, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Period;Ljava/util/Set;)V"); + if (_m_AggregateGroupByPeriodRequest__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_AggregateGroupByPeriodRequest, + _m_AggregateGroupByPeriodRequest__ctor, set, + timeRangeFilter, period, set1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_AggregateGroupByPeriodRequest__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateGroupByPeriodRequest__ctor1( + jobject set, + jobject timeRangeFilter, + jobject period, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr( + &_c_AggregateGroupByPeriodRequest, + "androidx/health/connect/client/request/AggregateGroupByPeriodRequest"); + if (_c_AggregateGroupByPeriodRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByPeriodRequest, + &_m_AggregateGroupByPeriodRequest__ctor1, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Period;Ljava/util/Set;ILkotlin/jvm/" + "internal/DefaultConstructorMarker;)V"); + if (_m_AggregateGroupByPeriodRequest__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregateGroupByPeriodRequest, + _m_AggregateGroupByPeriodRequest__ctor1, set, timeRangeFilter, period, + set1, i, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.request.AggregateRequest +jclass _c_AggregateRequest = NULL; + +jmethodID _m_AggregateRequest__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateRequest__ctor(jobject set, + jobject timeRangeFilter, + jobject set1) { + load_env(); + load_class_gr(&_c_AggregateRequest, + "androidx/health/connect/client/request/AggregateRequest"); + if (_c_AggregateRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateRequest, &_m_AggregateRequest__ctor, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/util/Set;)V"); + if (_m_AggregateRequest__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_AggregateRequest, + _m_AggregateRequest__ctor, set, + timeRangeFilter, set1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_AggregateRequest__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateRequest__ctor1(jobject set, + jobject timeRangeFilter, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr(&_c_AggregateRequest, + "androidx/health/connect/client/request/AggregateRequest"); + if (_c_AggregateRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateRequest, &_m_AggregateRequest__ctor1, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/util/Set;ILkotlin/jvm/internal/" + "DefaultConstructorMarker;)V"); + if (_m_AggregateRequest__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregateRequest, _m_AggregateRequest__ctor1, set, + timeRangeFilter, set1, i, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.request.ChangesTokenRequest +jclass _c_ChangesTokenRequest = NULL; + +jmethodID _m_ChangesTokenRequest__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult ChangesTokenRequest__ctor(jobject set, jobject set1) { + load_env(); + load_class_gr(&_c_ChangesTokenRequest, + "androidx/health/connect/client/request/ChangesTokenRequest"); + if (_c_ChangesTokenRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_ChangesTokenRequest, &_m_ChangesTokenRequest__ctor, "", + "(Ljava/util/Set;Ljava/util/Set;)V"); + if (_m_ChangesTokenRequest__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_ChangesTokenRequest, _m_ChangesTokenRequest__ctor, set, set1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_ChangesTokenRequest__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult ChangesTokenRequest__ctor1(jobject set, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr(&_c_ChangesTokenRequest, + "androidx/health/connect/client/request/ChangesTokenRequest"); + if (_c_ChangesTokenRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_ChangesTokenRequest, &_m_ChangesTokenRequest__ctor1, "", + "(Ljava/util/Set;Ljava/util/Set;ILkotlin/jvm/internal/" + "DefaultConstructorMarker;)V"); + if (_m_ChangesTokenRequest__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_ChangesTokenRequest, + _m_ChangesTokenRequest__ctor1, set, + set1, i, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.request.ReadRecordsRequest +jclass _c_ReadRecordsRequest = NULL; + +jmethodID _m_ReadRecordsRequest__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult ReadRecordsRequest__ctor(jobject kClass, + jobject timeRangeFilter, + jobject set, + uint8_t z, + int32_t i, + jobject string) { + load_env(); + load_class_gr(&_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); + if (_c_ReadRecordsRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__ctor, "", + "(Lkotlin/reflect/KClass;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/util/Set;ZILjava/lang/String;)V"); + if (_m_ReadRecordsRequest__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_ReadRecordsRequest, + _m_ReadRecordsRequest__ctor, kClass, + timeRangeFilter, set, z, i, string); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_ReadRecordsRequest__ctor1 = NULL; +FFI_PLUGIN_EXPORT +JniResult ReadRecordsRequest__ctor1(jobject kClass, + jobject timeRangeFilter, + jobject set, + uint8_t z, + int32_t i, + jobject string, + int32_t i1, + jobject defaultConstructorMarker) { + load_env(); + load_class_gr(&_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); + if (_c_ReadRecordsRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__ctor1, "", + "(Lkotlin/reflect/KClass;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/util/Set;ZILjava/lang/String;ILkotlin/jvm/" + "internal/DefaultConstructorMarker;)V"); + if (_m_ReadRecordsRequest__ctor1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_ReadRecordsRequest, _m_ReadRecordsRequest__ctor1, kClass, + timeRangeFilter, set, z, i, string, i1, defaultConstructorMarker); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_ReadRecordsRequest__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult ReadRecordsRequest__equals1(jobject self_, jobject object) { + load_env(); + load_class_gr(&_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); + if (_c_ReadRecordsRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__equals1, "equals", + "(Ljava/lang/Object;)Z"); + if (_m_ReadRecordsRequest__equals1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_ReadRecordsRequest__equals1, object); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_ReadRecordsRequest__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult ReadRecordsRequest__hashCode1(jobject self_) { + load_env(); + load_class_gr(&_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); + if (_c_ReadRecordsRequest == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__hashCode1, + "hashCode", "()I"); + if (_m_ReadRecordsRequest__hashCode1 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + int32_t _result = + (*jniEnv)->CallIntMethod(jniEnv, self_, _m_ReadRecordsRequest__hashCode1); + return (JniResult){.result = {.i = _result}, .exception = check_exception()}; +} + +// androidx.health.connect.client.aggregate.AggregationResult +jclass _c_AggregationResult = NULL; + +jmethodID _m_AggregationResult__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregationResult__ctor(jobject map, jobject map1, jobject set) { + load_env(); + load_class_gr(&_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); + if (_c_AggregationResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__ctor, "", + "(Ljava/util/Map;Ljava/util/Map;Ljava/util/Set;)V"); + if (_m_AggregationResult__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregationResult, _m_AggregationResult__ctor, map, map1, set); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_AggregationResult__getDataOrigins = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregationResult__getDataOrigins(jobject self_) { + load_env(); + load_class_gr(&_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); + if (_c_AggregationResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__getDataOrigins, + "getDataOrigins", "()Ljava/util/Set;"); + if (_m_AggregationResult__getDataOrigins == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_AggregationResult__getDataOrigins); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_AggregationResult__hasMetric = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregationResult__hasMetric(jobject self_, jobject aggregateMetric) { + load_env(); + load_class_gr(&_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); + if (_c_AggregationResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__hasMetric, + "hasMetric", + "(Landroidx/health/connect/client/aggregate/AggregateMetric;)Z"); + if (_m_AggregationResult__hasMetric == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_AggregationResult__hasMetric, aggregateMetric); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_AggregationResult__contains = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregationResult__contains(jobject self_, jobject aggregateMetric) { + load_env(); + load_class_gr(&_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); + if (_c_AggregationResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__contains, "contains", + "(Landroidx/health/connect/client/aggregate/AggregateMetric;)Z"); + if (_m_AggregationResult__contains == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_AggregationResult__contains, aggregateMetric); + return (JniResult){.result = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_AggregationResult__getMetric = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregationResult__getMetric(jobject self_, jobject aggregateMetric) { + load_env(); + load_class_gr(&_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); + if (_c_AggregationResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__getMetric, + "getMetric", + "(Landroidx/health/connect/client/aggregate/" + "AggregateMetric;)Ljava/lang/Object;"); + if (_m_AggregationResult__getMetric == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_AggregationResult__getMetric, aggregateMetric); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jmethodID _m_AggregationResult__get0 = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregationResult__get0(jobject self_, jobject aggregateMetric) { + load_env(); + load_class_gr(&_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); + if (_c_AggregationResult == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__get0, "get", + "(Landroidx/health/connect/client/aggregate/" + "AggregateMetric;)Ljava/lang/Object;"); + if (_m_AggregationResult__get0 == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_AggregationResult__get0, aggregateMetric); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +// androidx.health.connect.client.aggregate.AggregateMetric +jclass _c_AggregateMetric = NULL; + +jmethodID _m_AggregateMetric__ctor = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateMetric__ctor(jobject converter, + jobject string, + jobject aggregationType, + jobject string1) { + load_env(); + load_class_gr(&_c_AggregateMetric, + "androidx/health/connect/client/aggregate/AggregateMetric"); + if (_c_AggregateMetric == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_method( + _c_AggregateMetric, &_m_AggregateMetric__ctor, "", + "(Landroidx/health/connect/client/aggregate/" + "AggregateMetric$Converter;Ljava/lang/String;Landroidx/health/connect/" + "client/aggregate/AggregateMetric$AggregationType;Ljava/lang/String;)V"); + if (_m_AggregateMetric__ctor == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_AggregateMetric, _m_AggregateMetric__ctor, + converter, string, aggregationType, string1); + return (JniResult){.result = {.l = to_global_ref(_result)}, + .exception = check_exception()}; +} + +jfieldID _f_AggregateMetric__Companion = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric__Companion() { + load_env(); + load_class_gr(&_c_AggregateMetric, + "androidx/health/connect/client/aggregate/AggregateMetric"); + if (_c_AggregateMetric == NULL) + return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_static_field( + _c_AggregateMetric, &_f_AggregateMetric__Companion, "Companion", + "Landroidx/health/connect/client/aggregate/AggregateMetric$Companion;"); + jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric, _f_AggregateMetric__Companion)); + return (JniResult){.result = {.l = _result}, .exception = check_exception()}; +} diff --git a/experimental/pedometer/src/health_connect/include/BUILD.gn b/experimental/pedometer/src/health_connect/include/BUILD.gn new file mode 100644 index 000000000..2b10262f8 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +import("../../sdk_args.gni") + +# This rule copies header files to include/ +copy("copy_headers") { + visibility = [ "../../sdk:copy_headers" ] + + sources = [ + "dart_api.h", + "dart_api_dl.c", + "dart_api_dl.h", + "dart_native_api.h", + "dart_tools_api.h", + "dart_version.h", + "internal/dart_api_dl_impl.h", + ] + + outputs = + [ "$root_out_dir/$dart_sdk_output/include/{{source_target_relative}}" ] +} diff --git a/experimental/pedometer/src/health_connect/include/analyze_snapshot_api.h b/experimental/pedometer/src/health_connect/include/analyze_snapshot_api.h new file mode 100644 index 000000000..0e68d5ccb --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/analyze_snapshot_api.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_ +#define RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_ + +#include + +namespace dart { +namespace snapshot_analyzer { +typedef struct { + const uint8_t* vm_snapshot_data; + const uint8_t* vm_snapshot_instructions; + const uint8_t* vm_isolate_data; + const uint8_t* vm_isolate_instructions; +} Dart_SnapshotAnalyzerInformation; + +void Dart_DumpSnapshotInformationAsJson(char** buffer, + intptr_t* buffer_length, + Dart_SnapshotAnalyzerInformation* info); + +void Dart_DumpSnapshotInformationPP(Dart_SnapshotAnalyzerInformation* info); + +} // namespace snapshot_analyzer +} // namespace dart + +#endif // RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/bin/dart_io_api.h b/experimental/pedometer/src/health_connect/include/bin/dart_io_api.h new file mode 100644 index 000000000..cc647976c --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/bin/dart_io_api.h @@ -0,0 +1,69 @@ +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNTIME_INCLUDE_BIN_DART_IO_API_H_ +#define RUNTIME_INCLUDE_BIN_DART_IO_API_H_ + +#include "dart_tools_api.h" + +namespace dart { +namespace bin { + +// Bootstraps 'dart:io'. +void BootstrapDartIo(); + +// Cleans up 'dart:io'. +void CleanupDartIo(); + +// Lets dart:io know where the system temporary directory is located. +// Currently only wired up on Android. +void SetSystemTempDirectory(const char* system_temp); + +// Tells the system whether to capture Stdout events. +void SetCaptureStdout(bool value); + +// Tells the system whether to capture Stderr events. +void SetCaptureStderr(bool value); + +// Should Stdout events be captured? +bool ShouldCaptureStdout(); + +// Should Stderr events be captured? +bool ShouldCaptureStderr(); + +// Set the executable name used by Platform.executable. +void SetExecutableName(const char* executable_name); + +// Set the arguments used by Platform.executableArguments. +void SetExecutableArguments(int script_index, char** argv); + +// Set dart:io implementation specific fields of Dart_EmbedderInformation. +void GetIOEmbedderInformation(Dart_EmbedderInformation* info); + +// Appropriate to assign to Dart_InitializeParams.file_open/read/write/close. +void* OpenFile(const char* name, bool write); +void ReadFile(uint8_t** data, intptr_t* file_len, void* stream); +void WriteFile(const void* buffer, intptr_t num_bytes, void* stream); +void CloseFile(void* stream); + +// Generates 'length' random bytes into 'buffer'. Returns true on success +// and false on failure. This is appropriate to assign to +// Dart_InitializeParams.entropy_source. +bool GetEntropy(uint8_t* buffer, intptr_t length); + +// Performs a lookup of the I/O Dart_NativeFunction with a specified 'name' and +// 'argument_count'. Returns NULL if no I/O native function with a matching +// name and parameter count is found. +Dart_NativeFunction LookupIONative(Dart_Handle name, + int argument_count, + bool* auto_setup_scope); + +// Returns the symbol for I/O native function 'nf'. Returns NULL if 'nf' is not +// a valid I/O native function. +const uint8_t* LookupIONativeSymbol(Dart_NativeFunction nf); + +} // namespace bin +} // namespace dart + +#endif // RUNTIME_INCLUDE_BIN_DART_IO_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/dart_api.h b/experimental/pedometer/src/health_connect/include/dart_api.h new file mode 100644 index 000000000..741447a06 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_api.h @@ -0,0 +1,4098 @@ +/* + * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNTIME_INCLUDE_DART_API_H_ +#define RUNTIME_INCLUDE_DART_API_H_ + +/** \mainpage Dart Embedding API Reference + * + * This reference describes the Dart Embedding API, which is used to embed the + * Dart Virtual Machine within C/C++ applications. + * + * This reference is generated from the header include/dart_api.h. + */ + +/* __STDC_FORMAT_MACROS has to be defined before including to + * enable platform independent printf format specifiers. */ +#ifndef __STDC_FORMAT_MACROS +#define __STDC_FORMAT_MACROS +#endif + +#include +#include +#include + +#ifdef __cplusplus +#define DART_EXTERN_C extern "C" +#else +#define DART_EXTERN_C extern +#endif + +#if defined(__CYGWIN__) +#error Tool chain and platform not supported. +#elif defined(_WIN32) +#if defined(DART_SHARED_LIB) +#define DART_EXPORT DART_EXTERN_C __declspec(dllexport) +#else +#define DART_EXPORT DART_EXTERN_C +#endif +#else +#if __GNUC__ >= 4 +#if defined(DART_SHARED_LIB) +#define DART_EXPORT \ + DART_EXTERN_C __attribute__((visibility("default"))) __attribute((used)) +#else +#define DART_EXPORT DART_EXTERN_C +#endif +#else +#error Tool chain not supported. +#endif +#endif + +#if __GNUC__ +#define DART_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#elif _MSC_VER +#define DART_WARN_UNUSED_RESULT _Check_return_ +#else +#define DART_WARN_UNUSED_RESULT +#endif + +/* + * ======= + * Handles + * ======= + */ + +/** + * An isolate is the unit of concurrency in Dart. Each isolate has + * its own memory and thread of control. No state is shared between + * isolates. Instead, isolates communicate by message passing. + * + * Each thread keeps track of its current isolate, which is the + * isolate which is ready to execute on the current thread. The + * current isolate may be NULL, in which case no isolate is ready to + * execute. Most of the Dart apis require there to be a current + * isolate in order to function without error. The current isolate is + * set by any call to Dart_CreateIsolateGroup or Dart_EnterIsolate. + */ +typedef struct _Dart_Isolate* Dart_Isolate; +typedef struct _Dart_IsolateGroup* Dart_IsolateGroup; + +/** + * An object reference managed by the Dart VM garbage collector. + * + * Because the garbage collector may move objects, it is unsafe to + * refer to objects directly. Instead, we refer to objects through + * handles, which are known to the garbage collector and updated + * automatically when the object is moved. Handles should be passed + * by value (except in cases like out-parameters) and should never be + * allocated on the heap. + * + * Most functions in the Dart Embedding API return a handle. When a + * function completes normally, this will be a valid handle to an + * object in the Dart VM heap. This handle may represent the result of + * the operation or it may be a special valid handle used merely to + * indicate successful completion. Note that a valid handle may in + * some cases refer to the null object. + * + * --- Error handles --- + * + * When a function encounters a problem that prevents it from + * completing normally, it returns an error handle (See Dart_IsError). + * An error handle has an associated error message that gives more + * details about the problem (See Dart_GetError). + * + * There are four kinds of error handles that can be produced, + * depending on what goes wrong: + * + * - Api error handles are produced when an api function is misused. + * This happens when a Dart embedding api function is called with + * invalid arguments or in an invalid context. + * + * - Unhandled exception error handles are produced when, during the + * execution of Dart code, an exception is thrown but not caught. + * Prototypically this would occur during a call to Dart_Invoke, but + * it can occur in any function which triggers the execution of Dart + * code (for example, Dart_ToString). + * + * An unhandled exception error provides access to an exception and + * stacktrace via the functions Dart_ErrorGetException and + * Dart_ErrorGetStackTrace. + * + * - Compilation error handles are produced when, during the execution + * of Dart code, a compile-time error occurs. As above, this can + * occur in any function which triggers the execution of Dart code. + * + * - Fatal error handles are produced when the system wants to shut + * down the current isolate. + * + * --- Propagating errors --- + * + * When an error handle is returned from the top level invocation of + * Dart code in a program, the embedder must handle the error as they + * see fit. Often, the embedder will print the error message produced + * by Dart_Error and exit the program. + * + * When an error is returned while in the body of a native function, + * it can be propagated up the call stack by calling + * Dart_PropagateError, Dart_SetReturnValue, or Dart_ThrowException. + * Errors should be propagated unless there is a specific reason not + * to. If an error is not propagated then it is ignored. For + * example, if an unhandled exception error is ignored, that + * effectively "catches" the unhandled exception. Fatal errors must + * always be propagated. + * + * When an error is propagated, any current scopes created by + * Dart_EnterScope will be exited. + * + * Using Dart_SetReturnValue to propagate an exception is somewhat + * more convenient than using Dart_PropagateError, and should be + * preferred for reasons discussed below. + * + * Dart_PropagateError and Dart_ThrowException do not return. Instead + * they transfer control non-locally using a setjmp-like mechanism. + * This can be inconvenient if you have resources that you need to + * clean up before propagating the error. + * + * When relying on Dart_PropagateError, we often return error handles + * rather than propagating them from helper functions. Consider the + * following contrived example: + * + * 1 Dart_Handle isLongStringHelper(Dart_Handle arg) { + * 2 intptr_t* length = 0; + * 3 result = Dart_StringLength(arg, &length); + * 4 if (Dart_IsError(result)) { + * 5 return result; + * 6 } + * 7 return Dart_NewBoolean(length > 100); + * 8 } + * 9 + * 10 void NativeFunction_isLongString(Dart_NativeArguments args) { + * 11 Dart_EnterScope(); + * 12 AllocateMyResource(); + * 13 Dart_Handle arg = Dart_GetNativeArgument(args, 0); + * 14 Dart_Handle result = isLongStringHelper(arg); + * 15 if (Dart_IsError(result)) { + * 16 FreeMyResource(); + * 17 Dart_PropagateError(result); + * 18 abort(); // will not reach here + * 19 } + * 20 Dart_SetReturnValue(result); + * 21 FreeMyResource(); + * 22 Dart_ExitScope(); + * 23 } + * + * In this example, we have a native function which calls a helper + * function to do its work. On line 5, the helper function could call + * Dart_PropagateError, but that would not give the native function a + * chance to call FreeMyResource(), causing a leak. Instead, the + * helper function returns the error handle to the caller, giving the + * caller a chance to clean up before propagating the error handle. + * + * When an error is propagated by calling Dart_SetReturnValue, the + * native function will be allowed to complete normally and then the + * exception will be propagated only once the native call + * returns. This can be convenient, as it allows the C code to clean + * up normally. + * + * The example can be written more simply using Dart_SetReturnValue to + * propagate the error. + * + * 1 Dart_Handle isLongStringHelper(Dart_Handle arg) { + * 2 intptr_t* length = 0; + * 3 result = Dart_StringLength(arg, &length); + * 4 if (Dart_IsError(result)) { + * 5 return result + * 6 } + * 7 return Dart_NewBoolean(length > 100); + * 8 } + * 9 + * 10 void NativeFunction_isLongString(Dart_NativeArguments args) { + * 11 Dart_EnterScope(); + * 12 AllocateMyResource(); + * 13 Dart_Handle arg = Dart_GetNativeArgument(args, 0); + * 14 Dart_SetReturnValue(isLongStringHelper(arg)); + * 15 FreeMyResource(); + * 16 Dart_ExitScope(); + * 17 } + * + * In this example, the call to Dart_SetReturnValue on line 14 will + * either return the normal return value or the error (potentially + * generated on line 3). The call to FreeMyResource on line 15 will + * execute in either case. + * + * --- Local and persistent handles --- + * + * Local handles are allocated within the current scope (see + * Dart_EnterScope) and go away when the current scope exits. Unless + * otherwise indicated, callers should assume that all functions in + * the Dart embedding api return local handles. + * + * Persistent handles are allocated within the current isolate. They + * can be used to store objects across scopes. Persistent handles have + * the lifetime of the current isolate unless they are explicitly + * deallocated (see Dart_DeletePersistentHandle). + * The type Dart_Handle represents a handle (both local and persistent). + * The type Dart_PersistentHandle is a Dart_Handle and it is used to + * document that a persistent handle is expected as a parameter to a call + * or the return value from a call is a persistent handle. + * + * FinalizableHandles are persistent handles which are auto deleted when + * the object is garbage collected. It is never safe to use these handles + * unless you know the object is still reachable. + * + * WeakPersistentHandles are persistent handles which are automatically set + * to point Dart_Null when the object is garbage collected. They are not auto + * deleted, so it is safe to use them after the object has become unreachable. + */ +typedef struct _Dart_Handle* Dart_Handle; +typedef Dart_Handle Dart_PersistentHandle; +typedef struct _Dart_WeakPersistentHandle* Dart_WeakPersistentHandle; +typedef struct _Dart_FinalizableHandle* Dart_FinalizableHandle; +// These structs are versioned by DART_API_DL_MAJOR_VERSION, bump the +// version when changing this struct. + +typedef void (*Dart_HandleFinalizer)(void* isolate_callback_data, void* peer); + +/** + * Is this an error handle? + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsError(Dart_Handle handle); + +/** + * Is this an api error handle? + * + * Api error handles are produced when an api function is misused. + * This happens when a Dart embedding api function is called with + * invalid arguments or in an invalid context. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsApiError(Dart_Handle handle); + +/** + * Is this an unhandled exception error handle? + * + * Unhandled exception error handles are produced when, during the + * execution of Dart code, an exception is thrown but not caught. + * This can occur in any function which triggers the execution of Dart + * code. + * + * See Dart_ErrorGetException and Dart_ErrorGetStackTrace. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsUnhandledExceptionError(Dart_Handle handle); + +/** + * Is this a compilation error handle? + * + * Compilation error handles are produced when, during the execution + * of Dart code, a compile-time error occurs. This can occur in any + * function which triggers the execution of Dart code. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsCompilationError(Dart_Handle handle); + +/** + * Is this a fatal error handle? + * + * Fatal error handles are produced when the system wants to shut down + * the current isolate. + * + * Requires there to be a current isolate. + */ +DART_EXPORT bool Dart_IsFatalError(Dart_Handle handle); + +/** + * Gets the error message from an error handle. + * + * Requires there to be a current isolate. + * + * \return A C string containing an error message if the handle is + * error. An empty C string ("") if the handle is valid. This C + * String is scope allocated and is only valid until the next call + * to Dart_ExitScope. +*/ +DART_EXPORT const char* Dart_GetError(Dart_Handle handle); + +/** + * Is this an error handle for an unhandled exception? + */ +DART_EXPORT bool Dart_ErrorHasException(Dart_Handle handle); + +/** + * Gets the exception Object from an unhandled exception error handle. + */ +DART_EXPORT Dart_Handle Dart_ErrorGetException(Dart_Handle handle); + +/** + * Gets the stack trace Object from an unhandled exception error handle. + */ +DART_EXPORT Dart_Handle Dart_ErrorGetStackTrace(Dart_Handle handle); + +/** + * Produces an api error handle with the provided error message. + * + * Requires there to be a current isolate. + * + * \param error the error message. + */ +DART_EXPORT Dart_Handle Dart_NewApiError(const char* error); +DART_EXPORT Dart_Handle Dart_NewCompilationError(const char* error); + +/** + * Produces a new unhandled exception error handle. + * + * Requires there to be a current isolate. + * + * \param exception An instance of a Dart object to be thrown or + * an ApiError or CompilationError handle. + * When an ApiError or CompilationError handle is passed in + * a string object of the error message is created and it becomes + * the Dart object to be thrown. + */ +DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception); + +/** + * Propagates an error. + * + * If the provided handle is an unhandled exception error, this + * function will cause the unhandled exception to be rethrown. This + * will proceed in the standard way, walking up Dart frames until an + * appropriate 'catch' block is found, executing 'finally' blocks, + * etc. + * + * If the error is not an unhandled exception error, we will unwind + * the stack to the next C frame. Intervening Dart frames will be + * discarded; specifically, 'finally' blocks will not execute. This + * is the standard way that compilation errors (and the like) are + * handled by the Dart runtime. + * + * In either case, when an error is propagated any current scopes + * created by Dart_EnterScope will be exited. + * + * See the additional discussion under "Propagating Errors" at the + * beginning of this file. + * + * \param handle An error handle (See Dart_IsError) + * + * On success, this function does not return. On failure, the + * process is terminated. + */ +DART_EXPORT void Dart_PropagateError(Dart_Handle handle); + +/** + * Converts an object to a string. + * + * May generate an unhandled exception error. + * + * \return The converted string if no error occurs during + * the conversion. If an error does occur, an error handle is + * returned. + */ +DART_EXPORT Dart_Handle Dart_ToString(Dart_Handle object); + +/** + * Checks to see if two handles refer to identically equal objects. + * + * If both handles refer to instances, this is equivalent to using the top-level + * function identical() from dart:core. Otherwise, returns whether the two + * argument handles refer to the same object. + * + * \param obj1 An object to be compared. + * \param obj2 An object to be compared. + * + * \return True if the objects are identically equal. False otherwise. + */ +DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2); + +/** + * Allocates a handle in the current scope from a persistent handle. + */ +DART_EXPORT Dart_Handle Dart_HandleFromPersistent(Dart_PersistentHandle object); + +/** + * Allocates a handle in the current scope from a weak persistent handle. + * + * This will be a handle to Dart_Null if the object has been garbage collected. + */ +DART_EXPORT Dart_Handle +Dart_HandleFromWeakPersistent(Dart_WeakPersistentHandle object); + +/** + * Allocates a persistent handle for an object. + * + * This handle has the lifetime of the current isolate unless it is + * explicitly deallocated by calling Dart_DeletePersistentHandle. + * + * Requires there to be a current isolate. + */ +DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object); + +/** + * Assign value of local handle to a persistent handle. + * + * Requires there to be a current isolate. + * + * \param obj1 A persistent handle whose value needs to be set. + * \param obj2 An object whose value needs to be set to the persistent handle. + */ +DART_EXPORT void Dart_SetPersistentHandle(Dart_PersistentHandle obj1, + Dart_Handle obj2); + +/** + * Deallocates a persistent handle. + * + * Requires there to be a current isolate group. + */ +DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object); + +/** + * Allocates a weak persistent handle for an object. + * + * This handle has the lifetime of the current isolate. The handle can also be + * explicitly deallocated by calling Dart_DeleteWeakPersistentHandle. + * + * If the object becomes unreachable the callback is invoked with the peer as + * argument. The callback can be executed on any thread, will have a current + * isolate group, but will not have a current isolate. The callback can only + * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. This + * gives the embedder the ability to cleanup data associated with the object. + * The handle will point to the Dart_Null object after the finalizer has been + * run. It is illegal to call into the VM with any other Dart_* functions from + * the callback. If the handle is deleted before the object becomes + * unreachable, the callback is never invoked. + * + * Requires there to be a current isolate. + * + * \param object An object with identity. + * \param peer A pointer to a native object or NULL. This value is + * provided to callback when it is invoked. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A function pointer that will be invoked sometime + * after the object is garbage collected, unless the handle has been deleted. + * A valid callback needs to be specified it cannot be NULL. + * + * \return The weak persistent handle or NULL. NULL is returned in case of bad + * parameters. + */ +DART_EXPORT Dart_WeakPersistentHandle +Dart_NewWeakPersistentHandle(Dart_Handle object, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Deletes the given weak persistent [object] handle. + * + * Requires there to be a current isolate group. + */ +DART_EXPORT void Dart_DeleteWeakPersistentHandle( + Dart_WeakPersistentHandle object); + +/** + * Updates the external memory size for the given weak persistent handle. + * + * May trigger garbage collection. + */ +DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object, + intptr_t external_allocation_size); + +/** + * Allocates a finalizable handle for an object. + * + * This handle has the lifetime of the current isolate group unless the object + * pointed to by the handle is garbage collected, in this case the VM + * automatically deletes the handle after invoking the callback associated + * with the handle. The handle can also be explicitly deallocated by + * calling Dart_DeleteFinalizableHandle. + * + * If the object becomes unreachable the callback is invoked with the + * the peer as argument. The callback can be executed on any thread, will have + * an isolate group, but will not have a current isolate. The callback can only + * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. + * This gives the embedder the ability to cleanup data associated with the + * object and clear out any cached references to the handle. All references to + * this handle after the callback will be invalid. It is illegal to call into + * the VM with any other Dart_* functions from the callback. If the handle is + * deleted before the object becomes unreachable, the callback is never + * invoked. + * + * Requires there to be a current isolate. + * + * \param object An object with identity. + * \param peer A pointer to a native object or NULL. This value is + * provided to callback when it is invoked. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A function pointer that will be invoked sometime + * after the object is garbage collected, unless the handle has been deleted. + * A valid callback needs to be specified it cannot be NULL. + * + * \return The finalizable handle or NULL. NULL is returned in case of bad + * parameters. + */ +DART_EXPORT Dart_FinalizableHandle +Dart_NewFinalizableHandle(Dart_Handle object, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Deletes the given finalizable [object] handle. + * + * The caller has to provide the actual Dart object the handle was created from + * to prove the object (and therefore the finalizable handle) is still alive. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_DeleteFinalizableHandle(Dart_FinalizableHandle object, + Dart_Handle strong_ref_to_object); + +/** + * Updates the external memory size for the given finalizable handle. + * + * The caller has to provide the actual Dart object the handle was created from + * to prove the object (and therefore the finalizable handle) is still alive. + * + * May trigger garbage collection. + */ +DART_EXPORT void Dart_UpdateFinalizableExternalSize( + Dart_FinalizableHandle object, + Dart_Handle strong_ref_to_object, + intptr_t external_allocation_size); + +/* + * ========================== + * Initialization and Globals + * ========================== + */ + +/** + * Gets the version string for the Dart VM. + * + * The version of the Dart VM can be accessed without initializing the VM. + * + * \return The version string for the embedded Dart VM. + */ +DART_EXPORT const char* Dart_VersionString(void); + +/** + * Isolate specific flags are set when creating a new isolate using the + * Dart_IsolateFlags structure. + * + * Current version of flags is encoded in a 32-bit integer with 16 bits used + * for each part. + */ + +#define DART_FLAGS_CURRENT_VERSION (0x0000000c) + +typedef struct { + int32_t version; + bool enable_asserts; + bool use_field_guards; + bool use_osr; + bool obfuscate; + bool load_vmservice_library; + bool copy_parent_code; + bool null_safety; + bool is_system_isolate; + bool snapshot_is_dontneed_safe; + bool branch_coverage; +} Dart_IsolateFlags; + +/** + * Initialize Dart_IsolateFlags with correct version and default values. + */ +DART_EXPORT void Dart_IsolateFlagsInitialize(Dart_IsolateFlags* flags); + +/** + * An isolate creation and initialization callback function. + * + * This callback, provided by the embedder, is called when the VM + * needs to create an isolate. The callback should create an isolate + * by calling Dart_CreateIsolateGroup and load any scripts required for + * execution. + * + * This callback may be called on a different thread than the one + * running the parent isolate. + * + * When the function returns NULL, it is the responsibility of this + * function to ensure that Dart_ShutdownIsolate has been called if + * required (for example, if the isolate was created successfully by + * Dart_CreateIsolateGroup() but the root library fails to load + * successfully, then the function should call Dart_ShutdownIsolate + * before returning). + * + * When the function returns NULL, the function should set *error to + * a malloc-allocated buffer containing a useful error message. The + * caller of this function (the VM) will make sure that the buffer is + * freed. + * + * \param script_uri The uri of the main source file or snapshot to load. + * Either the URI of the parent isolate set in Dart_CreateIsolateGroup for + * Isolate.spawn, or the argument to Isolate.spawnUri canonicalized by the + * library tag handler of the parent isolate. + * The callback is responsible for loading the program by a call to + * Dart_LoadScriptFromKernel. + * \param main The name of the main entry point this isolate will + * eventually run. This is provided for advisory purposes only to + * improve debugging messages. The main function is not invoked by + * this function. + * \param package_root Ignored. + * \param package_config Uri of the package configuration file (either in format + * of .packages or .dart_tool/package_config.json) for this isolate + * to resolve package imports against. If this parameter is not passed the + * package resolution of the parent isolate should be used. + * \param flags Default flags for this isolate being spawned. Either inherited + * from the spawning isolate or passed as parameters when spawning the + * isolate from Dart code. + * \param isolate_data The isolate data which was passed to the + * parent isolate when it was created by calling Dart_CreateIsolateGroup(). + * \param error A structure into which the embedder can place a + * C string containing an error message in the case of failures. + * + * \return The embedder returns NULL if the creation and + * initialization was not successful and the isolate if successful. + */ +typedef Dart_Isolate (*Dart_IsolateGroupCreateCallback)( + const char* script_uri, + const char* main, + const char* package_root, + const char* package_config, + Dart_IsolateFlags* flags, + void* isolate_data, + char** error); + +/** + * An isolate initialization callback function. + * + * This callback, provided by the embedder, is called when the VM has created an + * isolate within an existing isolate group (i.e. from the same source as an + * existing isolate). + * + * The callback should setup native resolvers and might want to set a custom + * message handler via [Dart_SetMessageNotifyCallback] and mark the isolate as + * runnable. + * + * This callback may be called on a different thread than the one + * running the parent isolate. + * + * When the function returns `false`, it is the responsibility of this + * function to ensure that `Dart_ShutdownIsolate` has been called. + * + * When the function returns `false`, the function should set *error to + * a malloc-allocated buffer containing a useful error message. The + * caller of this function (the VM) will make sure that the buffer is + * freed. + * + * \param child_isolate_data The callback data to associate with the new + * child isolate. + * \param error A structure into which the embedder can place a + * C string containing an error message in the case the initialization fails. + * + * \return The embedder returns true if the initialization was successful and + * false otherwise (in which case the VM will terminate the isolate). + */ +typedef bool (*Dart_InitializeIsolateCallback)(void** child_isolate_data, + char** error); + +/** + * An isolate shutdown callback function. + * + * This callback, provided by the embedder, is called before the vm + * shuts down an isolate. The isolate being shutdown will be the current + * isolate. It is safe to run Dart code. + * + * This function should be used to dispose of native resources that + * are allocated to an isolate in order to avoid leaks. + * + * \param isolate_group_data The same callback data which was passed to the + * isolate group when it was created. + * \param isolate_data The same callback data which was passed to the isolate + * when it was created. + */ +typedef void (*Dart_IsolateShutdownCallback)(void* isolate_group_data, + void* isolate_data); + +/** + * An isolate cleanup callback function. + * + * This callback, provided by the embedder, is called after the vm + * shuts down an isolate. There will be no current isolate and it is *not* + * safe to run Dart code. + * + * This function should be used to dispose of native resources that + * are allocated to an isolate in order to avoid leaks. + * + * \param isolate_group_data The same callback data which was passed to the + * isolate group when it was created. + * \param isolate_data The same callback data which was passed to the isolate + * when it was created. + */ +typedef void (*Dart_IsolateCleanupCallback)(void* isolate_group_data, + void* isolate_data); + +/** + * An isolate group cleanup callback function. + * + * This callback, provided by the embedder, is called after the vm + * shuts down an isolate group. + * + * This function should be used to dispose of native resources that + * are allocated to an isolate in order to avoid leaks. + * + * \param isolate_group_data The same callback data which was passed to the + * isolate group when it was created. + * + */ +typedef void (*Dart_IsolateGroupCleanupCallback)(void* isolate_group_data); + +/** + * A thread start callback function. + * This callback, provided by the embedder, is called after a thread in the + * vm thread pool starts. + * This function could be used to adjust thread priority or attach native + * resources to the thread. + */ +typedef void (*Dart_ThreadStartCallback)(void); + +/** + * A thread death callback function. + * This callback, provided by the embedder, is called before a thread in the + * vm thread pool exits. + * This function could be used to dispose of native resources that + * are associated and attached to the thread, in order to avoid leaks. + */ +typedef void (*Dart_ThreadExitCallback)(void); + +/** + * Opens a file for reading or writing. + * + * Callback provided by the embedder for file operations. If the + * embedder does not allow file operations this callback can be + * NULL. + * + * \param name The name of the file to open. + * \param write A boolean variable which indicates if the file is to + * opened for writing. If there is an existing file it needs to truncated. + */ +typedef void* (*Dart_FileOpenCallback)(const char* name, bool write); + +/** + * Read contents of file. + * + * Callback provided by the embedder for file operations. If the + * embedder does not allow file operations this callback can be + * NULL. + * + * \param data Buffer allocated in the callback into which the contents + * of the file are read into. It is the responsibility of the caller to + * free this buffer. + * \param file_length A variable into which the length of the file is returned. + * In the case of an error this value would be -1. + * \param stream Handle to the opened file. + */ +typedef void (*Dart_FileReadCallback)(uint8_t** data, + intptr_t* file_length, + void* stream); + +/** + * Write data into file. + * + * Callback provided by the embedder for file operations. If the + * embedder does not allow file operations this callback can be + * NULL. + * + * \param data Buffer which needs to be written into the file. + * \param length Length of the buffer. + * \param stream Handle to the opened file. + */ +typedef void (*Dart_FileWriteCallback)(const void* data, + intptr_t length, + void* stream); + +/** + * Closes the opened file. + * + * Callback provided by the embedder for file operations. If the + * embedder does not allow file operations this callback can be + * NULL. + * + * \param stream Handle to the opened file. + */ +typedef void (*Dart_FileCloseCallback)(void* stream); + +typedef bool (*Dart_EntropySource)(uint8_t* buffer, intptr_t length); + +/** + * Callback provided by the embedder that is used by the vmservice isolate + * to request the asset archive. The asset archive must be an uncompressed tar + * archive that is stored in a Uint8List. + * + * If the embedder has no vmservice isolate assets, the callback can be NULL. + * + * \return The embedder must return a handle to a Uint8List containing an + * uncompressed tar archive or null. + */ +typedef Dart_Handle (*Dart_GetVMServiceAssetsArchive)(void); + +/** + * The current version of the Dart_InitializeFlags. Should be incremented every + * time Dart_InitializeFlags changes in a binary incompatible way. + */ +#define DART_INITIALIZE_PARAMS_CURRENT_VERSION (0x00000007) + +/** Forward declaration */ +struct Dart_CodeObserver; + +/** + * Callback provided by the embedder that is used by the VM to notify on code + * object creation, *before* it is invoked the first time. + * This is useful for embedders wanting to e.g. keep track of PCs beyond + * the lifetime of the garbage collected code objects. + * Note that an address range may be used by more than one code object over the + * lifecycle of a process. Clients of this function should record timestamps for + * these compilation events and when collecting PCs to disambiguate reused + * address ranges. + */ +typedef void (*Dart_OnNewCodeCallback)(struct Dart_CodeObserver* observer, + const char* name, + uintptr_t base, + uintptr_t size); + +typedef struct Dart_CodeObserver { + void* data; + + Dart_OnNewCodeCallback on_new_code; +} Dart_CodeObserver; + +/** + * Optional callback provided by the embedder that is used by the VM to + * implement registration of kernel blobs for the subsequent Isolate.spawnUri + * If no callback is provided, the registration of kernel blobs will throw + * an error. + * + * \param kernel_buffer A buffer which contains a kernel program. Callback + * should copy the contents of `kernel_buffer` as + * it may be freed immediately after registration. + * \param kernel_buffer_size The size of `kernel_buffer`. + * + * \return A C string representing URI which can be later used + * to spawn a new isolate. This C String should be scope allocated + * or owned by the embedder. + * Returns NULL if embedder runs out of memory. + */ +typedef const char* (*Dart_RegisterKernelBlobCallback)( + const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size); + +/** + * Optional callback provided by the embedder that is used by the VM to + * unregister kernel blobs. + * If no callback is provided, the unregistration of kernel blobs will throw + * an error. + * + * \param kernel_blob_uri URI of the kernel blob to unregister. + */ +typedef void (*Dart_UnregisterKernelBlobCallback)(const char* kernel_blob_uri); + +/** + * Describes how to initialize the VM. Used with Dart_Initialize. + */ +typedef struct { + /** + * Identifies the version of the struct used by the client. + * should be initialized to DART_INITIALIZE_PARAMS_CURRENT_VERSION. + */ + int32_t version; + + /** + * A buffer containing snapshot data, or NULL if no snapshot is provided. + * + * If provided, the buffer must remain valid until Dart_Cleanup returns. + */ + const uint8_t* vm_snapshot_data; + + /** + * A buffer containing a snapshot of precompiled instructions, or NULL if + * no snapshot is provided. + * + * If provided, the buffer must remain valid until Dart_Cleanup returns. + */ + const uint8_t* vm_snapshot_instructions; + + /** + * A function to be called during isolate group creation. + * See Dart_IsolateGroupCreateCallback. + */ + Dart_IsolateGroupCreateCallback create_group; + + /** + * A function to be called during isolate + * initialization inside an existing isolate group. + * See Dart_InitializeIsolateCallback. + */ + Dart_InitializeIsolateCallback initialize_isolate; + + /** + * A function to be called right before an isolate is shutdown. + * See Dart_IsolateShutdownCallback. + */ + Dart_IsolateShutdownCallback shutdown_isolate; + + /** + * A function to be called after an isolate was shutdown. + * See Dart_IsolateCleanupCallback. + */ + Dart_IsolateCleanupCallback cleanup_isolate; + + /** + * A function to be called after an isolate group is + * shutdown. See Dart_IsolateGroupCleanupCallback. + */ + Dart_IsolateGroupCleanupCallback cleanup_group; + + Dart_ThreadStartCallback thread_start; + Dart_ThreadExitCallback thread_exit; + Dart_FileOpenCallback file_open; + Dart_FileReadCallback file_read; + Dart_FileWriteCallback file_write; + Dart_FileCloseCallback file_close; + Dart_EntropySource entropy_source; + + /** + * A function to be called by the service isolate when it requires the + * vmservice assets archive. See Dart_GetVMServiceAssetsArchive. + */ + Dart_GetVMServiceAssetsArchive get_service_assets; + + bool start_kernel_isolate; + + /** + * An external code observer callback function. The observer can be invoked + * as early as during the Dart_Initialize() call. + */ + Dart_CodeObserver* code_observer; + + /** + * Kernel blob registration callback function. See Dart_RegisterKernelBlobCallback. + */ + Dart_RegisterKernelBlobCallback register_kernel_blob; + + /** + * Kernel blob unregistration callback function. See Dart_UnregisterKernelBlobCallback. + */ + Dart_UnregisterKernelBlobCallback unregister_kernel_blob; +} Dart_InitializeParams; + +/** + * Initializes the VM. + * + * \param params A struct containing initialization information. The version + * field of the struct must be DART_INITIALIZE_PARAMS_CURRENT_VERSION. + * + * \return NULL if initialization is successful. Returns an error message + * otherwise. The caller is responsible for freeing the error message. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_Initialize( + Dart_InitializeParams* params); + +/** + * Cleanup state in the VM before process termination. + * + * \return NULL if cleanup is successful. Returns an error message otherwise. + * The caller is responsible for freeing the error message. + * + * NOTE: This function must not be called on a thread that was created by the VM + * itself. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_Cleanup(void); + +/** + * Sets command line flags. Should be called before Dart_Initialize. + * + * \param argc The length of the arguments array. + * \param argv An array of arguments. + * + * \return NULL if successful. Returns an error message otherwise. + * The caller is responsible for freeing the error message. + * + * NOTE: This call does not store references to the passed in c-strings. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_SetVMFlags(int argc, + const char** argv); + +/** + * Returns true if the named VM flag is of boolean type, specified, and set to + * true. + * + * \param flag_name The name of the flag without leading punctuation + * (example: "enable_asserts"). + */ +DART_EXPORT bool Dart_IsVMFlagSet(const char* flag_name); + +/* + * ======== + * Isolates + * ======== + */ + +/** + * Creates a new isolate. The new isolate becomes the current isolate. + * + * A snapshot can be used to restore the VM quickly to a saved state + * and is useful for fast startup. If snapshot data is provided, the + * isolate will be started using that snapshot data. Requires a core snapshot or + * an app snapshot created by Dart_CreateSnapshot or + * Dart_CreatePrecompiledSnapshot* from a VM with the same version. + * + * Requires there to be no current isolate. + * + * \param script_uri The main source file or snapshot this isolate will load. + * The VM will provide this URI to the Dart_IsolateGroupCreateCallback when a + * child isolate is created by Isolate.spawn. The embedder should use a URI + * that allows it to load the same program into such a child isolate. + * \param name A short name for the isolate to improve debugging messages. + * Typically of the format 'foo.dart:main()'. + * \param isolate_snapshot_data Buffer containing the snapshot data of the + * isolate or NULL if no snapshot is provided. If provided, the buffer must + * remain valid until the isolate shuts down. + * \param isolate_snapshot_instructions Buffer containing the snapshot + * instructions of the isolate or NULL if no snapshot is provided. If + * provided, the buffer must remain valid until the isolate shuts down. + * \param flags Pointer to VM specific flags or NULL for default flags. + * \param isolate_group_data Embedder group data. This data can be obtained + * by calling Dart_IsolateGroupData and will be passed to the + * Dart_IsolateShutdownCallback, Dart_IsolateCleanupCallback, and + * Dart_IsolateGroupCleanupCallback. + * \param isolate_data Embedder data. This data will be passed to + * the Dart_IsolateGroupCreateCallback when new isolates are spawned from + * this parent isolate. + * \param error Returns NULL if creation is successful, an error message + * otherwise. The caller is responsible for calling free() on the error + * message. + * + * \return The new isolate on success, or NULL if isolate creation failed. + */ +DART_EXPORT Dart_Isolate +Dart_CreateIsolateGroup(const char* script_uri, + const char* name, + const uint8_t* isolate_snapshot_data, + const uint8_t* isolate_snapshot_instructions, + Dart_IsolateFlags* flags, + void* isolate_group_data, + void* isolate_data, + char** error); +/** + * Creates a new isolate inside the isolate group of [group_member]. + * + * Requires there to be no current isolate. + * + * \param group_member An isolate from the same group into which the newly created + * isolate should be born into. Other threads may not have entered / enter this + * member isolate. + * \param name A short name for the isolate for debugging purposes. + * \param shutdown_callback A callback to be called when the isolate is being + * shutdown (may be NULL). + * \param cleanup_callback A callback to be called when the isolate is being + * cleaned up (may be NULL). + * \param isolate_data The embedder-specific data associated with this isolate. + * \param error Set to NULL if creation is successful, set to an error + * message otherwise. The caller is responsible for calling free() on the + * error message. + * + * \return The newly created isolate on success, or NULL if isolate creation + * failed. + * + * If successful, the newly created isolate will become the current isolate. + */ +DART_EXPORT Dart_Isolate +Dart_CreateIsolateInGroup(Dart_Isolate group_member, + const char* name, + Dart_IsolateShutdownCallback shutdown_callback, + Dart_IsolateCleanupCallback cleanup_callback, + void* child_isolate_data, + char** error); + +/* TODO(turnidge): Document behavior when there is already a current + * isolate. */ + +/** + * Creates a new isolate from a Dart Kernel file. The new isolate + * becomes the current isolate. + * + * Requires there to be no current isolate. + * + * \param script_uri The main source file or snapshot this isolate will load. + * The VM will provide this URI to the Dart_IsolateGroupCreateCallback when a + * child isolate is created by Isolate.spawn. The embedder should use a URI that + * allows it to load the same program into such a child isolate. + * \param name A short name for the isolate to improve debugging messages. + * Typically of the format 'foo.dart:main()'. + * \param kernel_buffer A buffer which contains a kernel/DIL program. Must + * remain valid until isolate shutdown. + * \param kernel_buffer_size The size of `kernel_buffer`. + * \param flags Pointer to VM specific flags or NULL for default flags. + * \param isolate_group_data Embedder group data. This data can be obtained + * by calling Dart_IsolateGroupData and will be passed to the + * Dart_IsolateShutdownCallback, Dart_IsolateCleanupCallback, and + * Dart_IsolateGroupCleanupCallback. + * \param isolate_data Embedder data. This data will be passed to + * the Dart_IsolateGroupCreateCallback when new isolates are spawned from + * this parent isolate. + * \param error Returns NULL if creation is successful, an error message + * otherwise. The caller is responsible for calling free() on the error + * message. + * + * \return The new isolate on success, or NULL if isolate creation failed. + */ +DART_EXPORT Dart_Isolate +Dart_CreateIsolateGroupFromKernel(const char* script_uri, + const char* name, + const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size, + Dart_IsolateFlags* flags, + void* isolate_group_data, + void* isolate_data, + char** error); +/** + * Shuts down the current isolate. After this call, the current isolate is NULL. + * Any current scopes created by Dart_EnterScope will be exited. Invokes the + * shutdown callback and any callbacks of remaining weak persistent handles. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_ShutdownIsolate(void); +/* TODO(turnidge): Document behavior when there is no current isolate. */ + +/** + * Returns the current isolate. Will return NULL if there is no + * current isolate. + */ +DART_EXPORT Dart_Isolate Dart_CurrentIsolate(void); + +/** + * Returns the callback data associated with the current isolate. This + * data was set when the isolate got created or initialized. + */ +DART_EXPORT void* Dart_CurrentIsolateData(void); + +/** + * Returns the callback data associated with the given isolate. This + * data was set when the isolate got created or initialized. + */ +DART_EXPORT void* Dart_IsolateData(Dart_Isolate isolate); + +/** + * Returns the current isolate group. Will return NULL if there is no + * current isolate group. + */ +DART_EXPORT Dart_IsolateGroup Dart_CurrentIsolateGroup(void); + +/** + * Returns the callback data associated with the current isolate group. This + * data was passed to the isolate group when it was created. + */ +DART_EXPORT void* Dart_CurrentIsolateGroupData(void); + +/** + * Gets an id that uniquely identifies current isolate group. + * + * It is the responsibility of the caller to free the returned ID. + */ +typedef int64_t Dart_IsolateGroupId; +DART_EXPORT Dart_IsolateGroupId Dart_CurrentIsolateGroupId(); + +/** + * Returns the callback data associated with the specified isolate group. This + * data was passed to the isolate when it was created. + * The embedder is responsible for ensuring the consistency of this data + * with respect to the lifecycle of an isolate group. + */ +DART_EXPORT void* Dart_IsolateGroupData(Dart_Isolate isolate); + +/** + * Returns the debugging name for the current isolate. + * + * This name is unique to each isolate and should only be used to make + * debugging messages more comprehensible. + */ +DART_EXPORT Dart_Handle Dart_DebugName(void); + +/** + * Returns the ID for an isolate which is used to query the service protocol. + * + * It is the responsibility of the caller to free the returned ID. + */ +DART_EXPORT const char* Dart_IsolateServiceId(Dart_Isolate isolate); + +/** + * Enters an isolate. After calling this function, + * the current isolate will be set to the provided isolate. + * + * Requires there to be no current isolate. Multiple threads may not be in + * the same isolate at once. + */ +DART_EXPORT void Dart_EnterIsolate(Dart_Isolate isolate); + +/** + * Kills the given isolate. + * + * This function has the same effect as dart:isolate's + * Isolate.kill(priority:immediate). + * It can interrupt ordinary Dart code but not native code. If the isolate is + * in the middle of a long running native function, the isolate will not be + * killed until control returns to Dart. + * + * Does not require a current isolate. It is safe to kill the current isolate if + * there is one. + */ +DART_EXPORT void Dart_KillIsolate(Dart_Isolate isolate); + +/** + * Notifies the VM that the embedder expects to be idle until |deadline|. The VM + * may use this time to perform garbage collection or other tasks to avoid + * delays during execution of Dart code in the future. + * + * |deadline| is measured in microseconds against the system's monotonic time. + * This clock can be accessed via Dart_TimelineGetMicros(). + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_NotifyIdle(int64_t deadline); + +/** + * Notifies the VM that the embedder expects the application's working set has + * recently shrunk significantly and is not expected to rise in the near future. + * The VM may spend O(heap-size) time performing clean up work. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_NotifyDestroyed(void); + +/** + * Notifies the VM that the system is running low on memory. + * + * Does not require a current isolate. Only valid after calling Dart_Initialize. + */ +DART_EXPORT void Dart_NotifyLowMemory(void); + +typedef enum { + /** + * Balanced + */ + Dart_PerformanceMode_Default, + /** + * Optimize for low latency, at the expense of throughput and memory overhead + * by performing work in smaller batches (requiring more overhead) or by + * delaying work (requiring more memory). An embedder should not remain in + * this mode indefinitely. + */ + Dart_PerformanceMode_Latency, + /** + * Optimize for high throughput, at the expense of latency and memory overhead + * by performing work in larger batches with more intervening growth. + */ + Dart_PerformanceMode_Throughput, + /** + * Optimize for low memory, at the expensive of throughput and latency by more + * frequently performing work. + */ + Dart_PerformanceMode_Memory, +} Dart_PerformanceMode; + +/** + * Set the desired performance trade-off. + * + * Requires a current isolate. + * + * Returns the previous performance mode. + */ +DART_EXPORT Dart_PerformanceMode +Dart_SetPerformanceMode(Dart_PerformanceMode mode); + +/** + * Starts the CPU sampling profiler. + */ +DART_EXPORT void Dart_StartProfiling(void); + +/** + * Stops the CPU sampling profiler. + * + * Note that some profile samples might still be taken after this fucntion + * returns due to the asynchronous nature of the implementation on some + * platforms. + */ +DART_EXPORT void Dart_StopProfiling(void); + +/** + * Notifies the VM that the current thread should not be profiled until a + * matching call to Dart_ThreadEnableProfiling is made. + * + * NOTE: By default, if a thread has entered an isolate it will be profiled. + * This function should be used when an embedder knows a thread is about + * to make a blocking call and wants to avoid unnecessary interrupts by + * the profiler. + */ +DART_EXPORT void Dart_ThreadDisableProfiling(void); + +/** + * Notifies the VM that the current thread should be profiled. + * + * NOTE: It is only legal to call this function *after* calling + * Dart_ThreadDisableProfiling. + * + * NOTE: By default, if a thread has entered an isolate it will be profiled. + */ +DART_EXPORT void Dart_ThreadEnableProfiling(void); + +/** + * Register symbol information for the Dart VM's profiler and crash dumps. + * + * This consumes the output of //topaz/runtime/dart/profiler_symbols, which + * should be treated as opaque. + */ +DART_EXPORT void Dart_AddSymbols(const char* dso_name, + void* buffer, + intptr_t buffer_size); + +/** + * Exits an isolate. After this call, Dart_CurrentIsolate will + * return NULL. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_ExitIsolate(void); +/* TODO(turnidge): We don't want users of the api to be able to exit a + * "pure" dart isolate. Implement and document. */ + +/** + * Creates a full snapshot of the current isolate heap. + * + * A full snapshot is a compact representation of the dart vm isolate heap + * and dart isolate heap states. These snapshots are used to initialize + * the vm isolate on startup and fast initialization of an isolate. + * A Snapshot of the heap is created before any dart code has executed. + * + * Requires there to be a current isolate. Not available in the precompiled + * runtime (check Dart_IsPrecompiledRuntime). + * + * \param vm_snapshot_data_buffer Returns a pointer to a buffer containing the + * vm snapshot. This buffer is scope allocated and is only valid + * until the next call to Dart_ExitScope. + * \param vm_snapshot_data_size Returns the size of vm_snapshot_data_buffer. + * \param isolate_snapshot_data_buffer Returns a pointer to a buffer containing + * the isolate snapshot. This buffer is scope allocated and is only valid + * until the next call to Dart_ExitScope. + * \param isolate_snapshot_data_size Returns the size of + * isolate_snapshot_data_buffer. + * \param is_core Create a snapshot containing core libraries. + * Such snapshot should be agnostic to null safety mode. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateSnapshot(uint8_t** vm_snapshot_data_buffer, + intptr_t* vm_snapshot_data_size, + uint8_t** isolate_snapshot_data_buffer, + intptr_t* isolate_snapshot_data_size, + bool is_core); + +/** + * Returns whether the buffer contains a kernel file. + * + * \param buffer Pointer to a buffer that might contain a kernel binary. + * \param buffer_size Size of the buffer. + * + * \return Whether the buffer contains a kernel binary (full or partial). + */ +DART_EXPORT bool Dart_IsKernel(const uint8_t* buffer, intptr_t buffer_size); + +/** + * Make isolate runnable. + * + * When isolates are spawned, this function is used to indicate that + * the creation and initialization (including script loading) of the + * isolate is complete and the isolate can start. + * This function expects there to be no current isolate. + * + * \param isolate The isolate to be made runnable. + * + * \return NULL if successful. Returns an error message otherwise. The caller + * is responsible for freeing the error message. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_IsolateMakeRunnable( + Dart_Isolate isolate); + +/* + * ================== + * Messages and Ports + * ================== + */ + +/** + * A port is used to send or receive inter-isolate messages + */ +typedef int64_t Dart_Port; + +/** + * ILLEGAL_PORT is a port number guaranteed never to be associated with a valid + * port. + */ +#define ILLEGAL_PORT ((Dart_Port)0) + +/** + * A message notification callback. + * + * This callback allows the embedder to provide a custom wakeup mechanism for + * the delivery of inter-isolate messages. This function is called once per + * message on an arbitrary thread. It is the responsibility of the embedder to + * eventually call Dart_HandleMessage once per callback received with the + * destination isolate set as the current isolate to process the message. + */ +typedef void (*Dart_MessageNotifyCallback)(Dart_Isolate destination_isolate); + +/** + * Allows embedders to provide a custom wakeup mechanism for the delivery of + * inter-isolate messages. This setting only applies to the current isolate. + * + * This mechanism is optional: if not provided, the isolate will be scheduled on + * a VM-managed thread pool. An embedder should provide this callback if it + * wants to run an isolate on a specific thread or to interleave handling of + * inter-isolate messages with other event sources. + * + * Most embedders will only call this function once, before isolate + * execution begins. If this function is called after isolate + * execution begins, the embedder is responsible for threading issues. + */ +DART_EXPORT void Dart_SetMessageNotifyCallback( + Dart_MessageNotifyCallback message_notify_callback); +/* TODO(turnidge): Consider moving this to isolate creation so that it + * is impossible to mess up. */ + +/** + * Query the current message notify callback for the isolate. + * + * \return The current message notify callback for the isolate. + */ +DART_EXPORT Dart_MessageNotifyCallback Dart_GetMessageNotifyCallback(void); + +/** + * The VM's default message handler supports pausing an isolate before it + * processes the first message and right after the it processes the isolate's + * final message. This can be controlled for all isolates by two VM flags: + * + * `--pause-isolates-on-start` + * `--pause-isolates-on-exit` + * + * Additionally, Dart_SetShouldPauseOnStart and Dart_SetShouldPauseOnExit can be + * used to control this behaviour on a per-isolate basis. + * + * When an embedder is using a Dart_MessageNotifyCallback the embedder + * needs to cooperate with the VM so that the service protocol can report + * accurate information about isolates and so that tools such as debuggers + * work reliably. + * + * The following functions can be used to implement pausing on start and exit. + */ + +/** + * If the VM flag `--pause-isolates-on-start` was passed this will be true. + * + * \return A boolean value indicating if pause on start was requested. + */ +DART_EXPORT bool Dart_ShouldPauseOnStart(void); + +/** + * Override the VM flag `--pause-isolates-on-start` for the current isolate. + * + * \param should_pause Should the isolate be paused on start? + * + * NOTE: This must be called before Dart_IsolateMakeRunnable. + */ +DART_EXPORT void Dart_SetShouldPauseOnStart(bool should_pause); + +/** + * Is the current isolate paused on start? + * + * \return A boolean value indicating if the isolate is paused on start. + */ +DART_EXPORT bool Dart_IsPausedOnStart(void); + +/** + * Called when the embedder has paused the current isolate on start and when + * the embedder has resumed the isolate. + * + * \param paused Is the isolate paused on start? + */ +DART_EXPORT void Dart_SetPausedOnStart(bool paused); + +/** + * If the VM flag `--pause-isolates-on-exit` was passed this will be true. + * + * \return A boolean value indicating if pause on exit was requested. + */ +DART_EXPORT bool Dart_ShouldPauseOnExit(void); + +/** + * Override the VM flag `--pause-isolates-on-exit` for the current isolate. + * + * \param should_pause Should the isolate be paused on exit? + * + */ +DART_EXPORT void Dart_SetShouldPauseOnExit(bool should_pause); + +/** + * Is the current isolate paused on exit? + * + * \return A boolean value indicating if the isolate is paused on exit. + */ +DART_EXPORT bool Dart_IsPausedOnExit(void); + +/** + * Called when the embedder has paused the current isolate on exit and when + * the embedder has resumed the isolate. + * + * \param paused Is the isolate paused on exit? + */ +DART_EXPORT void Dart_SetPausedOnExit(bool paused); + +/** + * Called when the embedder has caught a top level unhandled exception error + * in the current isolate. + * + * NOTE: It is illegal to call this twice on the same isolate without first + * clearing the sticky error to null. + * + * \param error The unhandled exception error. + */ +DART_EXPORT void Dart_SetStickyError(Dart_Handle error); + +/** + * Does the current isolate have a sticky error? + */ +DART_EXPORT bool Dart_HasStickyError(void); + +/** + * Gets the sticky error for the current isolate. + * + * \return A handle to the sticky error object or null. + */ +DART_EXPORT Dart_Handle Dart_GetStickyError(void); + +/** + * Handles the next pending message for the current isolate. + * + * May generate an unhandled exception error. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_HandleMessage(void); + +/** + * Drains the microtask queue, then blocks the calling thread until the current + * isolate receives a message, then handles all messages. + * + * \param timeout_millis When non-zero, the call returns after the indicated + number of milliseconds even if no message was received. + * \return A valid handle if no error occurs, otherwise an error handle. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_WaitForEvent(int64_t timeout_millis); + +/** + * Handles any pending messages for the vm service for the current + * isolate. + * + * This function may be used by an embedder at a breakpoint to avoid + * pausing the vm service. + * + * This function can indirectly cause the message notify callback to + * be called. + * + * \return true if the vm service requests the program resume + * execution, false otherwise + */ +DART_EXPORT bool Dart_HandleServiceMessages(void); + +/** + * Does the current isolate have pending service messages? + * + * \return true if the isolate has pending service messages, false otherwise. + */ +DART_EXPORT bool Dart_HasServiceMessages(void); + +/** + * Processes any incoming messages for the current isolate. + * + * This function may only be used when the embedder has not provided + * an alternate message delivery mechanism with + * Dart_SetMessageCallbacks. It is provided for convenience. + * + * This function waits for incoming messages for the current + * isolate. As new messages arrive, they are handled using + * Dart_HandleMessage. The routine exits when all ports to the + * current isolate are closed. + * + * \return A valid handle if the run loop exited successfully. If an + * exception or other error occurs while processing messages, an + * error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_RunLoop(void); + +/** + * Lets the VM run message processing for the isolate. + * + * This function expects there to a current isolate and the current isolate + * must not have an active api scope. The VM will take care of making the + * isolate runnable (if not already), handles its message loop and will take + * care of shutting the isolate down once it's done. + * + * \param errors_are_fatal Whether uncaught errors should be fatal. + * \param on_error_port A port to notify on uncaught errors (or ILLEGAL_PORT). + * \param on_exit_port A port to notify on exit (or ILLEGAL_PORT). + * \param error A non-NULL pointer which will hold an error message if the call + * fails. The error has to be free()ed by the caller. + * + * \return If successful the VM takes owernship of the isolate and takes care + * of its message loop. If not successful the caller retains owernship of the + * isolate. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT bool Dart_RunLoopAsync( + bool errors_are_fatal, + Dart_Port on_error_port, + Dart_Port on_exit_port, + char** error); + +/* TODO(turnidge): Should this be removed from the public api? */ + +/** + * Gets the main port id for the current isolate. + */ +DART_EXPORT Dart_Port Dart_GetMainPortId(void); + +/** + * Does the current isolate have live ReceivePorts? + * + * A ReceivePort is live when it has not been closed. + */ +DART_EXPORT bool Dart_HasLivePorts(void); + +/** + * Posts a message for some isolate. The message is a serialized + * object. + * + * Requires there to be a current isolate. + * + * For posting messages outside of an isolate see \ref Dart_PostCObject. + * + * \param port_id The destination port. + * \param object An object from the current isolate. + * + * \return True if the message was posted. + */ +DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle object); + +/** + * Returns a new SendPort with the provided port id. + * + * \param port_id The destination port. + * + * \return A new SendPort if no errors occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id); + +/** + * Gets the SendPort id for the provided SendPort. + * \param port A SendPort object whose id is desired. + * \param port_id Returns the id of the SendPort. + * \return Success if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_SendPortGetId(Dart_Handle port, + Dart_Port* port_id); + +/* + * ====== + * Scopes + * ====== + */ + +/** + * Enters a new scope. + * + * All new local handles will be created in this scope. Additionally, + * some functions may return "scope allocated" memory which is only + * valid within this scope. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_EnterScope(void); + +/** + * Exits a scope. + * + * The previous scope (if any) becomes the current scope. + * + * Requires there to be a current isolate. + */ +DART_EXPORT void Dart_ExitScope(void); + +/** + * The Dart VM uses "zone allocation" for temporary structures. Zones + * support very fast allocation of small chunks of memory. The chunks + * cannot be deallocated individually, but instead zones support + * deallocating all chunks in one fast operation. + * + * This function makes it possible for the embedder to allocate + * temporary data in the VMs zone allocator. + * + * Zone allocation is possible: + * 1. when inside a scope where local handles can be allocated + * 2. when processing a message from a native port in a native port + * handler + * + * All the memory allocated this way will be reclaimed either on the + * next call to Dart_ExitScope or when the native port handler exits. + * + * \param size Size of the memory to allocate. + * + * \return A pointer to the allocated memory. NULL if allocation + * failed. Failure might due to is no current VM zone. + */ +DART_EXPORT uint8_t* Dart_ScopeAllocate(intptr_t size); + +/* + * ======= + * Objects + * ======= + */ + +/** + * Returns the null object. + * + * \return A handle to the null object. + */ +DART_EXPORT Dart_Handle Dart_Null(void); + +/** + * Is this object null? + */ +DART_EXPORT bool Dart_IsNull(Dart_Handle object); + +/** + * Returns the empty string object. + * + * \return A handle to the empty string object. + */ +DART_EXPORT Dart_Handle Dart_EmptyString(void); + +/** + * Returns types that are not classes, and which therefore cannot be looked up + * as library members by Dart_GetType. + * + * \return A handle to the dynamic, void or Never type. + */ +DART_EXPORT Dart_Handle Dart_TypeDynamic(void); +DART_EXPORT Dart_Handle Dart_TypeVoid(void); +DART_EXPORT Dart_Handle Dart_TypeNever(void); + +/** + * Checks if the two objects are equal. + * + * The result of the comparison is returned through the 'equal' + * parameter. The return value itself is used to indicate success or + * failure, not equality. + * + * May generate an unhandled exception error. + * + * \param obj1 An object to be compared. + * \param obj2 An object to be compared. + * \param equal Returns the result of the equality comparison. + * + * \return A valid handle if no error occurs during the comparison. + */ +DART_EXPORT Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, + Dart_Handle obj2, + bool* equal); + +/** + * Is this object an instance of some type? + * + * The result of the test is returned through the 'instanceof' parameter. + * The return value itself is used to indicate success or failure. + * + * \param object An object. + * \param type A type. + * \param instanceof Return true if 'object' is an instance of type 'type'. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_ObjectIsType(Dart_Handle object, + Dart_Handle type, + bool* instanceof); + +/** + * Query object type. + * + * \param object Some Object. + * + * \return true if Object is of the specified type. + */ +DART_EXPORT bool Dart_IsInstance(Dart_Handle object); +DART_EXPORT bool Dart_IsNumber(Dart_Handle object); +DART_EXPORT bool Dart_IsInteger(Dart_Handle object); +DART_EXPORT bool Dart_IsDouble(Dart_Handle object); +DART_EXPORT bool Dart_IsBoolean(Dart_Handle object); +DART_EXPORT bool Dart_IsString(Dart_Handle object); +DART_EXPORT bool Dart_IsStringLatin1(Dart_Handle object); /* (ISO-8859-1) */ +DART_EXPORT bool Dart_IsExternalString(Dart_Handle object); +DART_EXPORT bool Dart_IsList(Dart_Handle object); +DART_EXPORT bool Dart_IsMap(Dart_Handle object); +DART_EXPORT bool Dart_IsLibrary(Dart_Handle object); +DART_EXPORT bool Dart_IsType(Dart_Handle handle); +DART_EXPORT bool Dart_IsFunction(Dart_Handle handle); +DART_EXPORT bool Dart_IsVariable(Dart_Handle handle); +DART_EXPORT bool Dart_IsTypeVariable(Dart_Handle handle); +DART_EXPORT bool Dart_IsClosure(Dart_Handle object); +DART_EXPORT bool Dart_IsTypedData(Dart_Handle object); +DART_EXPORT bool Dart_IsByteBuffer(Dart_Handle object); +DART_EXPORT bool Dart_IsFuture(Dart_Handle object); + +/* + * ========= + * Instances + * ========= + */ + +/* + * For the purposes of the embedding api, not all objects returned are + * Dart language objects. Within the api, we use the term 'Instance' + * to indicate handles which refer to true Dart language objects. + * + * TODO(turnidge): Reorganize the "Object" section above, pulling down + * any functions that more properly belong here. */ + +/** + * Gets the type of a Dart language object. + * + * \param instance Some Dart object. + * + * \return If no error occurs, the type is returned. Otherwise an + * error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance); + +/** + * Returns the name for the provided class type. + * + * \return A valid string handle if no error occurs during the + * operation. + */ +DART_EXPORT Dart_Handle Dart_ClassName(Dart_Handle cls_type); + +/** + * Returns the name for the provided function or method. + * + * \return A valid string handle if no error occurs during the + * operation. + */ +DART_EXPORT Dart_Handle Dart_FunctionName(Dart_Handle function); + +/** + * Returns a handle to the owner of a function. + * + * The owner of an instance method or a static method is its defining + * class. The owner of a top-level function is its defining + * library. The owner of the function of a non-implicit closure is the + * function of the method or closure that defines the non-implicit + * closure. + * + * \return A valid handle to the owner of the function, or an error + * handle if the argument is not a valid handle to a function. + */ +DART_EXPORT Dart_Handle Dart_FunctionOwner(Dart_Handle function); + +/** + * Determines whether a function handle referes to a static function + * of method. + * + * For the purposes of the embedding API, a top-level function is + * implicitly declared static. + * + * \param function A handle to a function or method declaration. + * \param is_static Returns whether the function or method is declared static. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_FunctionIsStatic(Dart_Handle function, + bool* is_static); + +/** + * Is this object a closure resulting from a tear-off (closurized method)? + * + * Returns true for closures produced when an ordinary method is accessed + * through a getter call. Returns false otherwise, in particular for closures + * produced from local function declarations. + * + * \param object Some Object. + * + * \return true if Object is a tear-off. + */ +DART_EXPORT bool Dart_IsTearOff(Dart_Handle object); + +/** + * Retrieves the function of a closure. + * + * \return A handle to the function of the closure, or an error handle if the + * argument is not a closure. + */ +DART_EXPORT Dart_Handle Dart_ClosureFunction(Dart_Handle closure); + +/** + * Returns a handle to the library which contains class. + * + * \return A valid handle to the library with owns class, null if the class + * has no library or an error handle if the argument is not a valid handle + * to a class type. + */ +DART_EXPORT Dart_Handle Dart_ClassLibrary(Dart_Handle cls_type); + +/* + * ============================= + * Numbers, Integers and Doubles + * ============================= + */ + +/** + * Does this Integer fit into a 64-bit signed integer? + * + * \param integer An integer. + * \param fits Returns true if the integer fits into a 64-bit signed integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer, + bool* fits); + +/** + * Does this Integer fit into a 64-bit unsigned integer? + * + * \param integer An integer. + * \param fits Returns true if the integer fits into a 64-bit unsigned integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerFitsIntoUint64(Dart_Handle integer, + bool* fits); + +/** + * Returns an Integer with the provided value. + * + * \param value The value of the integer. + * + * \return The Integer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value); + +/** + * Returns an Integer with the provided value. + * + * \param value The unsigned value of the integer. + * + * \return The Integer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value); + +/** + * Returns an Integer with the provided value. + * + * \param value The value of the integer represented as a C string + * containing a hexadecimal number. + * + * \return The Integer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* value); + +/** + * Gets the value of an Integer. + * + * The integer must fit into a 64-bit signed integer, otherwise an error occurs. + * + * \param integer An Integer. + * \param value Returns the value of the Integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer, + int64_t* value); + +/** + * Gets the value of an Integer. + * + * The integer must fit into a 64-bit unsigned integer, otherwise an + * error occurs. + * + * \param integer An Integer. + * \param value Returns the value of the Integer. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerToUint64(Dart_Handle integer, + uint64_t* value); + +/** + * Gets the value of an integer as a hexadecimal C string. + * + * \param integer An Integer. + * \param value Returns the value of the Integer as a hexadecimal C + * string. This C string is scope allocated and is only valid until + * the next call to Dart_ExitScope. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer, + const char** value); + +/** + * Returns a Double with the provided value. + * + * \param value A double. + * + * \return The Double object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewDouble(double value); + +/** + * Gets the value of a Double + * + * \param double_obj A Double + * \param value Returns the value of the Double. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj, double* value); + +/** + * Returns a closure of static function 'function_name' in the class 'class_name' + * in the exported namespace of specified 'library'. + * + * \param library Library object + * \param cls_type Type object representing a Class + * \param function_name Name of the static function in the class + * + * \return A valid Dart instance if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_GetStaticMethodClosure(Dart_Handle library, + Dart_Handle cls_type, + Dart_Handle function_name); + +/* + * ======== + * Booleans + * ======== + */ + +/** + * Returns the True object. + * + * Requires there to be a current isolate. + * + * \return A handle to the True object. + */ +DART_EXPORT Dart_Handle Dart_True(void); + +/** + * Returns the False object. + * + * Requires there to be a current isolate. + * + * \return A handle to the False object. + */ +DART_EXPORT Dart_Handle Dart_False(void); + +/** + * Returns a Boolean with the provided value. + * + * \param value true or false. + * + * \return The Boolean object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewBoolean(bool value); + +/** + * Gets the value of a Boolean + * + * \param boolean_obj A Boolean + * \param value Returns the value of the Boolean. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj, bool* value); + +/* + * ======= + * Strings + * ======= + */ + +/** + * Gets the length of a String. + * + * \param str A String. + * \param length Returns the length of the String. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* length); + +/** + * Returns a String built from the provided C string + * (There is an implicit assumption that the C string passed in contains + * UTF-8 encoded characters and '\0' is considered as a termination + * character). + * + * \param str A C String + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str); +/* TODO(turnidge): Document what happens when we run out of memory + * during this call. */ + +/** + * Returns a String built from an array of UTF-8 encoded characters. + * + * \param utf8_array An array of UTF-8 encoded characters. + * \param length The length of the codepoints array. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, + intptr_t length); + +/** + * Returns a String built from an array of UTF-16 encoded characters. + * + * \param utf16_array An array of UTF-16 encoded characters. + * \param length The length of the codepoints array. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array, + intptr_t length); + +/** + * Returns a String built from an array of UTF-32 encoded characters. + * + * \param utf32_array An array of UTF-32 encoded characters. + * \param length The length of the codepoints array. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array, + intptr_t length); + +/** + * Returns a String which references an external array of + * Latin-1 (ISO-8859-1) encoded characters. + * + * \param latin1_array Array of Latin-1 encoded characters. This must not move. + * \param length The length of the characters array. + * \param peer An external pointer to associate with this string. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A callback to be called when this string is finalized. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle +Dart_NewExternalLatin1String(const uint8_t* latin1_array, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Returns a String which references an external array of UTF-16 encoded + * characters. + * + * \param utf16_array An array of UTF-16 encoded characters. This must not move. + * \param length The length of the characters array. + * \param peer An external pointer to associate with this string. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A callback to be called when this string is finalized. + * + * \return The String object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle +Dart_NewExternalUTF16String(const uint16_t* utf16_array, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Gets the C string representation of a String. + * (It is a sequence of UTF-8 encoded values with a '\0' termination.) + * + * \param str A string. + * \param cstr Returns the String represented as a C string. + * This C string is scope allocated and is only valid until + * the next call to Dart_ExitScope. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle str, + const char** cstr); + +/** + * Gets a UTF-8 encoded representation of a String. + * + * Any unpaired surrogate code points in the string will be converted as + * replacement characters (U+FFFD, 0xEF 0xBF 0xBD in UTF-8). If you need + * to preserve unpaired surrogates, use the Dart_StringToUTF16 function. + * + * \param str A string. + * \param utf8_array Returns the String represented as UTF-8 code + * units. This UTF-8 array is scope allocated and is only valid + * until the next call to Dart_ExitScope. + * \param length Used to return the length of the array which was + * actually used. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str, + uint8_t** utf8_array, + intptr_t* length); + +/** + * Gets the data corresponding to the string object. This function returns + * the data only for Latin-1 (ISO-8859-1) string objects. For all other + * string objects it returns an error. + * + * \param str A string. + * \param latin1_array An array allocated by the caller, used to return + * the string data. + * \param length Used to pass in the length of the provided array. + * Used to return the length of the array which was actually used. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToLatin1(Dart_Handle str, + uint8_t* latin1_array, + intptr_t* length); + +/** + * Gets the UTF-16 encoded representation of a string. + * + * \param str A string. + * \param utf16_array An array allocated by the caller, used to return + * the array of UTF-16 encoded characters. + * \param length Used to pass in the length of the provided array. + * Used to return the length of the array which was actually used. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str, + uint16_t* utf16_array, + intptr_t* length); + +/** + * Gets the storage size in bytes of a String. + * + * \param str A String. + * \param size Returns the storage size in bytes of the String. + * This is the size in bytes needed to store the String. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_StringStorageSize(Dart_Handle str, intptr_t* size); + +/** + * Retrieves some properties associated with a String. + * Properties retrieved are: + * - character size of the string (one or two byte) + * - length of the string + * - peer pointer of string if it is an external string. + * \param str A String. + * \param char_size Returns the character size of the String. + * \param str_len Returns the length of the String. + * \param peer Returns the peer pointer associated with the String or 0 if + * there is no peer pointer for it. + * \return Success if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_StringGetProperties(Dart_Handle str, + intptr_t* char_size, + intptr_t* str_len, + void** peer); + +/* + * ===== + * Lists + * ===== + */ + +/** + * Returns a List of the desired length. + * + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewList(intptr_t length); + +typedef enum { + Dart_CoreType_Dynamic, + Dart_CoreType_Int, + Dart_CoreType_String, +} Dart_CoreType_Id; + +// TODO(bkonyi): convert this to use nullable types once NNBD is enabled. +/** + * Returns a List of the desired length with the desired legacy element type. + * + * \param element_type_id The type of elements of the list. + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns an error + * handle. + */ +DART_EXPORT Dart_Handle Dart_NewListOf(Dart_CoreType_Id element_type_id, + intptr_t length); + +/** + * Returns a List of the desired length with the desired element type. + * + * \param element_type Handle to a nullable type object. E.g., from + * Dart_GetType or Dart_GetNullableType. + * + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewListOfType(Dart_Handle element_type, + intptr_t length); + +/** + * Returns a List of the desired length with the desired element type, filled + * with the provided object. + * + * \param element_type Handle to a type object. E.g., from Dart_GetType. + * + * \param fill_object Handle to an object of type 'element_type' that will be + * used to populate the list. This parameter can only be Dart_Null() if the + * length of the list is 0 or 'element_type' is a nullable type. + * + * \param length The length of the list. + * + * \return The List object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewListOfTypeFilled(Dart_Handle element_type, + Dart_Handle fill_object, + intptr_t length); + +/** + * Gets the length of a List. + * + * May generate an unhandled exception error. + * + * \param list A List. + * \param length Returns the length of the List. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_ListLength(Dart_Handle list, intptr_t* length); + +/** + * Gets the Object at some index of a List. + * + * If the index is out of bounds, an error occurs. + * + * May generate an unhandled exception error. + * + * \param list A List. + * \param index A valid index into the List. + * + * \return The Object in the List at the specified index if no error + * occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index); + +/** +* Gets a range of Objects from a List. +* +* If any of the requested index values are out of bounds, an error occurs. +* +* May generate an unhandled exception error. +* +* \param list A List. +* \param offset The offset of the first item to get. +* \param length The number of items to get. +* \param result A pointer to fill with the objects. +* +* \return Success if no error occurs during the operation. +*/ +DART_EXPORT Dart_Handle Dart_ListGetRange(Dart_Handle list, + intptr_t offset, + intptr_t length, + Dart_Handle* result); + +/** + * Sets the Object at some index of a List. + * + * If the index is out of bounds, an error occurs. + * + * May generate an unhandled exception error. + * + * \param list A List. + * \param index A valid index into the List. + * \param value The Object to put in the List. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list, + intptr_t index, + Dart_Handle value); + +/** + * May generate an unhandled exception error. + */ +DART_EXPORT Dart_Handle Dart_ListGetAsBytes(Dart_Handle list, + intptr_t offset, + uint8_t* native_array, + intptr_t length); + +/** + * May generate an unhandled exception error. + */ +DART_EXPORT Dart_Handle Dart_ListSetAsBytes(Dart_Handle list, + intptr_t offset, + const uint8_t* native_array, + intptr_t length); + +/* + * ==== + * Maps + * ==== + */ + +/** + * Gets the Object at some key of a Map. + * + * May generate an unhandled exception error. + * + * \param map A Map. + * \param key An Object. + * + * \return The value in the map at the specified key, null if the map does not + * contain the key, or an error handle. + */ +DART_EXPORT Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key); + +/** + * Returns whether the Map contains a given key. + * + * May generate an unhandled exception error. + * + * \param map A Map. + * + * \return A handle on a boolean indicating whether map contains the key. + * Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key); + +/** + * Gets the list of keys of a Map. + * + * May generate an unhandled exception error. + * + * \param map A Map. + * + * \return The list of key Objects if no error occurs. Otherwise returns an + * error handle. + */ +DART_EXPORT Dart_Handle Dart_MapKeys(Dart_Handle map); + +/* + * ========== + * Typed Data + * ========== + */ + +typedef enum { + Dart_TypedData_kByteData = 0, + Dart_TypedData_kInt8, + Dart_TypedData_kUint8, + Dart_TypedData_kUint8Clamped, + Dart_TypedData_kInt16, + Dart_TypedData_kUint16, + Dart_TypedData_kInt32, + Dart_TypedData_kUint32, + Dart_TypedData_kInt64, + Dart_TypedData_kUint64, + Dart_TypedData_kFloat32, + Dart_TypedData_kFloat64, + Dart_TypedData_kInt32x4, + Dart_TypedData_kFloat32x4, + Dart_TypedData_kFloat64x2, + Dart_TypedData_kInvalid +} Dart_TypedData_Type; + +/** + * Return type if this object is a TypedData object. + * + * \return kInvalid if the object is not a TypedData object or the appropriate + * Dart_TypedData_Type. + */ +DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object); + +/** + * Return type if this object is an external TypedData object. + * + * \return kInvalid if the object is not an external TypedData object or + * the appropriate Dart_TypedData_Type. + */ +DART_EXPORT Dart_TypedData_Type +Dart_GetTypeOfExternalTypedData(Dart_Handle object); + +/** + * Returns a TypedData object of the desired length and type. + * + * \param type The type of the TypedData object. + * \param length The length of the TypedData object (length in type units). + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, + intptr_t length); + +/** + * Returns a TypedData object which references an external data array. + * + * \param type The type of the data array. + * \param data A data array. This array must not move. + * \param length The length of the data array (length in type units). + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewExternalTypedData(Dart_TypedData_Type type, + void* data, + intptr_t length); + +/** + * Returns a TypedData object which references an external data array. + * + * \param type The type of the data array. + * \param data A data array. This array must not move. + * \param length The length of the data array (length in type units). + * \param peer A pointer to a native object or NULL. This value is + * provided to callback when it is invoked. + * \param external_allocation_size The number of externally allocated + * bytes for peer. Used to inform the garbage collector. + * \param callback A function pointer that will be invoked sometime + * after the object is garbage collected, unless the handle has been deleted. + * A valid callback needs to be specified it cannot be NULL. + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle +Dart_NewExternalTypedDataWithFinalizer(Dart_TypedData_Type type, + void* data, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); +DART_EXPORT Dart_Handle Dart_NewUnmodifiableExternalTypedDataWithFinalizer( + Dart_TypedData_Type type, + const void* data, + intptr_t length, + void* peer, + intptr_t external_allocation_size, + Dart_HandleFinalizer callback); + +/** + * Returns a ByteBuffer object for the typed data. + * + * \param typed_data The TypedData object. + * + * \return The ByteBuffer object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewByteBuffer(Dart_Handle typed_data); + +/** + * Acquires access to the internal data address of a TypedData object. + * + * \param object The typed data object whose internal data address is to + * be accessed. + * \param type The type of the object is returned here. + * \param data The internal data address is returned here. + * \param len Size of the typed array is returned here. + * + * Notes: + * When the internal address of the object is acquired any calls to a + * Dart API function that could potentially allocate an object or run + * any Dart code will return an error. + * + * Any Dart API functions for accessing the data should not be called + * before the corresponding release. In particular, the object should + * not be acquired again before its release. This leads to undefined + * behavior. + * + * \return Success if the internal data address is acquired successfully. + * Otherwise, returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, + Dart_TypedData_Type* type, + void** data, + intptr_t* len); + +/** + * Releases access to the internal data address that was acquired earlier using + * Dart_TypedDataAcquireData. + * + * \param object The typed data object whose internal data address is to be + * released. + * + * \return Success if the internal data address is released successfully. + * Otherwise, returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object); + +/** + * Returns the TypedData object associated with the ByteBuffer object. + * + * \param byte_buffer The ByteBuffer object. + * + * \return The TypedData object if no error occurs. Otherwise returns + * an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetDataFromByteBuffer(Dart_Handle byte_buffer); + +/* + * ============================================================ + * Invoking Constructors, Methods, Closures and Field accessors + * ============================================================ + */ + +/** + * Invokes a constructor, creating a new object. + * + * This function allows hidden constructors (constructors with leading + * underscores) to be called. + * + * \param type Type of object to be constructed. + * \param constructor_name The name of the constructor to invoke. Use + * Dart_Null() or Dart_EmptyString() to invoke the unnamed constructor. + * This name should not include the name of the class. + * \param number_of_arguments Size of the arguments array. + * \param arguments An array of arguments to the constructor. + * + * \return If the constructor is called and completes successfully, + * then the new object. If an error occurs during execution, then an + * error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_New(Dart_Handle type, + Dart_Handle constructor_name, + int number_of_arguments, + Dart_Handle* arguments); + +/** + * Allocate a new object without invoking a constructor. + * + * \param type The type of an object to be allocated. + * + * \return The new object. If an error occurs during execution, then an + * error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_Allocate(Dart_Handle type); + +/** + * Allocate a new object without invoking a constructor, and sets specified + * native fields. + * + * \param type The type of an object to be allocated. + * \param num_native_fields The number of native fields to set. + * \param native_fields An array containing the value of native fields. + * + * \return The new object. If an error occurs during execution, then an + * error handle is returned. + */ +DART_EXPORT Dart_Handle +Dart_AllocateWithNativeFields(Dart_Handle type, + intptr_t num_native_fields, + const intptr_t* native_fields); + +/** + * Invokes a method or function. + * + * The 'target' parameter may be an object, type, or library. If + * 'target' is an object, then this function will invoke an instance + * method. If 'target' is a type, then this function will invoke a + * static method. If 'target' is a library, then this function will + * invoke a top-level function from that library. + * NOTE: This API call cannot be used to invoke methods of a type object. + * + * This function ignores visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param target An object, type, or library. + * \param name The name of the function or method to invoke. + * \param number_of_arguments Size of the arguments array. + * \param arguments An array of arguments to the function. + * + * \return If the function or method is called and completes + * successfully, then the return value is returned. If an error + * occurs during execution, then an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_Invoke(Dart_Handle target, + Dart_Handle name, + int number_of_arguments, + Dart_Handle* arguments); +/* TODO(turnidge): Document how to invoke operators. */ + +/** + * Invokes a Closure with the given arguments. + * + * May generate an unhandled exception error. + * + * \return If no error occurs during execution, then the result of + * invoking the closure is returned. If an error occurs during + * execution, then an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_InvokeClosure(Dart_Handle closure, + int number_of_arguments, + Dart_Handle* arguments); + +/** + * Invokes a Generative Constructor on an object that was previously + * allocated using Dart_Allocate/Dart_AllocateWithNativeFields. + * + * The 'object' parameter must be an object. + * + * This function ignores visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param object An object. + * \param name The name of the constructor to invoke. + * Use Dart_Null() or Dart_EmptyString() to invoke the unnamed constructor. + * \param number_of_arguments Size of the arguments array. + * \param arguments An array of arguments to the function. + * + * \return If the constructor is called and completes + * successfully, then the object is returned. If an error + * occurs during execution, then an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_InvokeConstructor(Dart_Handle object, + Dart_Handle name, + int number_of_arguments, + Dart_Handle* arguments); + +/** + * Gets the value of a field. + * + * The 'container' parameter may be an object, type, or library. If + * 'container' is an object, then this function will access an + * instance field. If 'container' is a type, then this function will + * access a static field. If 'container' is a library, then this + * function will access a top-level variable. + * NOTE: This API call cannot be used to access fields of a type object. + * + * This function ignores field visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param container An object, type, or library. + * \param name A field name. + * + * \return If no error occurs, then the value of the field is + * returned. Otherwise an error handle is returned. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_GetField(Dart_Handle container, Dart_Handle name); + +/** + * Sets the value of a field. + * + * The 'container' parameter may actually be an object, type, or + * library. If 'container' is an object, then this function will + * access an instance field. If 'container' is a type, then this + * function will access a static field. If 'container' is a library, + * then this function will access a top-level variable. + * NOTE: This API call cannot be used to access fields of a type object. + * + * This function ignores field visibility (leading underscores in names). + * + * May generate an unhandled exception error. + * + * \param container An object, type, or library. + * \param name A field name. + * \param value The new field value. + * + * \return A valid handle if no error occurs. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_SetField(Dart_Handle container, Dart_Handle name, Dart_Handle value); + +/* + * ========== + * Exceptions + * ========== + */ + +/* + * TODO(turnidge): Remove these functions from the api and replace all + * uses with Dart_NewUnhandledExceptionError. */ + +/** + * Throws an exception. + * + * This function causes a Dart language exception to be thrown. This + * will proceed in the standard way, walking up Dart frames until an + * appropriate 'catch' block is found, executing 'finally' blocks, + * etc. + * + * If an error handle is passed into this function, the error is + * propagated immediately. See Dart_PropagateError for a discussion + * of error propagation. + * + * If successful, this function does not return. Note that this means + * that the destructors of any stack-allocated C++ objects will not be + * called. If there are no Dart frames on the stack, an error occurs. + * + * \return An error handle if the exception was not thrown. + * Otherwise the function does not return. + */ +DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception); + +/** + * Rethrows an exception. + * + * Rethrows an exception, unwinding all dart frames on the stack. If + * successful, this function does not return. Note that this means + * that the destructors of any stack-allocated C++ objects will not be + * called. If there are no Dart frames on the stack, an error occurs. + * + * \return An error handle if the exception was not thrown. + * Otherwise the function does not return. + */ +DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, + Dart_Handle stacktrace); + +/* + * =========================== + * Native fields and functions + * =========================== + */ + +/** + * Gets the number of native instance fields in an object. + */ +DART_EXPORT Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj, + int* count); + +/** + * Gets the value of a native field. + * + * TODO(turnidge): Document. + */ +DART_EXPORT Dart_Handle Dart_GetNativeInstanceField(Dart_Handle obj, + int index, + intptr_t* value); + +/** + * Sets the value of a native field. + * + * TODO(turnidge): Document. + */ +DART_EXPORT Dart_Handle Dart_SetNativeInstanceField(Dart_Handle obj, + int index, + intptr_t value); + +/** + * The arguments to a native function. + * + * This object is passed to a native function to represent its + * arguments and return value. It allows access to the arguments to a + * native function by index. It also allows the return value of a + * native function to be set. + */ +typedef struct _Dart_NativeArguments* Dart_NativeArguments; + +/** + * Extracts current isolate group data from the native arguments structure. + */ +DART_EXPORT void* Dart_GetNativeIsolateGroupData(Dart_NativeArguments args); + +typedef enum { + Dart_NativeArgument_kBool = 0, + Dart_NativeArgument_kInt32, + Dart_NativeArgument_kUint32, + Dart_NativeArgument_kInt64, + Dart_NativeArgument_kUint64, + Dart_NativeArgument_kDouble, + Dart_NativeArgument_kString, + Dart_NativeArgument_kInstance, + Dart_NativeArgument_kNativeFields, +} Dart_NativeArgument_Type; + +typedef struct _Dart_NativeArgument_Descriptor { + uint8_t type; + uint8_t index; +} Dart_NativeArgument_Descriptor; + +typedef union _Dart_NativeArgument_Value { + bool as_bool; + int32_t as_int32; + uint32_t as_uint32; + int64_t as_int64; + uint64_t as_uint64; + double as_double; + struct { + Dart_Handle dart_str; + void* peer; + } as_string; + struct { + intptr_t num_fields; + intptr_t* values; + } as_native_fields; + Dart_Handle as_instance; +} Dart_NativeArgument_Value; + +enum { + kNativeArgNumberPos = 0, + kNativeArgNumberSize = 8, + kNativeArgTypePos = kNativeArgNumberPos + kNativeArgNumberSize, + kNativeArgTypeSize = 8, +}; + +#define BITMASK(size) ((1 << size) - 1) +#define DART_NATIVE_ARG_DESCRIPTOR(type, position) \ + (((type & BITMASK(kNativeArgTypeSize)) << kNativeArgTypePos) | \ + (position & BITMASK(kNativeArgNumberSize))) + +/** + * Gets the native arguments based on the types passed in and populates + * the passed arguments buffer with appropriate native values. + * + * \param args the Native arguments block passed into the native call. + * \param num_arguments length of argument descriptor array and argument + * values array passed in. + * \param arg_descriptors an array that describes the arguments that + * need to be retrieved. For each argument to be retrieved the descriptor + * contains the argument number (0, 1 etc.) and the argument type + * described using Dart_NativeArgument_Type, e.g: + * DART_NATIVE_ARG_DESCRIPTOR(Dart_NativeArgument_kBool, 1) indicates + * that the first argument is to be retrieved and it should be a boolean. + * \param arg_values array into which the native arguments need to be + * extracted into, the array is allocated by the caller (it could be + * stack allocated to avoid the malloc/free performance overhead). + * + * \return Success if all the arguments could be extracted correctly, + * returns an error handle if there were any errors while extracting the + * arguments (mismatched number of arguments, incorrect types, etc.). + */ +DART_EXPORT Dart_Handle +Dart_GetNativeArguments(Dart_NativeArguments args, + int num_arguments, + const Dart_NativeArgument_Descriptor* arg_descriptors, + Dart_NativeArgument_Value* arg_values); + +/** + * Gets the native argument at some index. + */ +DART_EXPORT Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, + int index); +/* TODO(turnidge): Specify the behavior of an out-of-bounds access. */ + +/** + * Gets the number of native arguments. + */ +DART_EXPORT int Dart_GetNativeArgumentCount(Dart_NativeArguments args); + +/** + * Gets all the native fields of the native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param num_fields size of the intptr_t array 'field_values' passed in. + * \param field_values intptr_t array in which native field values are returned. + * \return Success if the native fields where copied in successfully. Otherwise + * returns an error handle. On success the native field values are copied + * into the 'field_values' array, if the argument at 'arg_index' is a + * null object then 0 is copied as the native field values into the + * 'field_values' array. + */ +DART_EXPORT Dart_Handle +Dart_GetNativeFieldsOfArgument(Dart_NativeArguments args, + int arg_index, + int num_fields, + intptr_t* field_values); + +/** + * Gets the native field of the receiver. + */ +DART_EXPORT Dart_Handle Dart_GetNativeReceiver(Dart_NativeArguments args, + intptr_t* value); + +/** + * Gets a string native argument at some index. + * \param args Native arguments structure. + * \param arg_index Index of the desired argument in the structure above. + * \param peer Returns the peer pointer if the string argument has one. + * \return Success if the string argument has a peer, if it does not + * have a peer then the String object is returned. Otherwise returns + * an error handle (argument is not a String object). + */ +DART_EXPORT Dart_Handle Dart_GetNativeStringArgument(Dart_NativeArguments args, + int arg_index, + void** peer); + +/** + * Gets an integer native argument at some index. + * \param args Native arguments structure. + * \param index Index of the desired argument in the structure above. + * \param value Returns the integer value if the argument is an Integer. + * \return Success if no error occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetNativeIntegerArgument(Dart_NativeArguments args, + int index, + int64_t* value); + +/** + * Gets a boolean native argument at some index. + * \param args Native arguments structure. + * \param index Index of the desired argument in the structure above. + * \param value Returns the boolean value if the argument is a Boolean. + * \return Success if no error occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetNativeBooleanArgument(Dart_NativeArguments args, + int index, + bool* value); + +/** + * Gets a double native argument at some index. + * \param args Native arguments structure. + * \param index Index of the desired argument in the structure above. + * \param value Returns the double value if the argument is a double. + * \return Success if no error occurs. Otherwise returns an error handle. + */ +DART_EXPORT Dart_Handle Dart_GetNativeDoubleArgument(Dart_NativeArguments args, + int index, + double* value); + +/** + * Sets the return value for a native function. + * + * If retval is an Error handle, then error will be propagated once + * the native functions exits. See Dart_PropagateError for a + * discussion of how different types of errors are propagated. + */ +DART_EXPORT void Dart_SetReturnValue(Dart_NativeArguments args, + Dart_Handle retval); + +DART_EXPORT void Dart_SetWeakHandleReturnValue(Dart_NativeArguments args, + Dart_WeakPersistentHandle rval); + +DART_EXPORT void Dart_SetBooleanReturnValue(Dart_NativeArguments args, + bool retval); + +DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args, + int64_t retval); + +DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args, + double retval); + +/** + * A native function. + */ +typedef void (*Dart_NativeFunction)(Dart_NativeArguments arguments); + +/** + * Native entry resolution callback. + * + * For libraries and scripts which have native functions, the embedder + * can provide a native entry resolver. This callback is used to map a + * name/arity to a Dart_NativeFunction. If no function is found, the + * callback should return NULL. + * + * The parameters to the native resolver function are: + * \param name a Dart string which is the name of the native function. + * \param num_of_arguments is the number of arguments expected by the + * native function. + * \param auto_setup_scope is a boolean flag that can be set by the resolver + * to indicate if this function needs a Dart API scope (see Dart_EnterScope/ + * Dart_ExitScope) to be setup automatically by the VM before calling into + * the native function. By default most native functions would require this + * to be true but some light weight native functions which do not call back + * into the VM through the Dart API may not require a Dart scope to be + * setup automatically. + * + * \return A valid Dart_NativeFunction which resolves to a native entry point + * for the native function. + * + * See Dart_SetNativeResolver. + */ +typedef Dart_NativeFunction (*Dart_NativeEntryResolver)(Dart_Handle name, + int num_of_arguments, + bool* auto_setup_scope); +/* TODO(turnidge): Consider renaming to NativeFunctionResolver or + * NativeResolver. */ + +/** + * Native entry symbol lookup callback. + * + * For libraries and scripts which have native functions, the embedder + * can provide a callback for mapping a native entry to a symbol. This callback + * maps a native function entry PC to the native function name. If no native + * entry symbol can be found, the callback should return NULL. + * + * The parameters to the native reverse resolver function are: + * \param nf A Dart_NativeFunction. + * + * \return A const UTF-8 string containing the symbol name or NULL. + * + * See Dart_SetNativeResolver. + */ +typedef const uint8_t* (*Dart_NativeEntrySymbol)(Dart_NativeFunction nf); + +/** + * FFI Native C function pointer resolver callback. + * + * See Dart_SetFfiNativeResolver. + */ +typedef void* (*Dart_FfiNativeResolver)(const char* name, uintptr_t args_n); + +/* + * =========== + * Environment + * =========== + */ + +/** + * An environment lookup callback function. + * + * \param name The name of the value to lookup in the environment. + * + * \return A valid handle to a string if the name exists in the + * current environment or Dart_Null() if not. + */ +typedef Dart_Handle (*Dart_EnvironmentCallback)(Dart_Handle name); + +/** + * Sets the environment callback for the current isolate. This + * callback is used to lookup environment values by name in the + * current environment. This enables the embedder to supply values for + * the const constructors bool.fromEnvironment, int.fromEnvironment + * and String.fromEnvironment. + */ +DART_EXPORT Dart_Handle +Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback); + +/** + * Sets the callback used to resolve native functions for a library. + * + * \param library A library. + * \param resolver A native entry resolver. + * + * \return A valid handle if the native resolver was set successfully. + */ +DART_EXPORT Dart_Handle +Dart_SetNativeResolver(Dart_Handle library, + Dart_NativeEntryResolver resolver, + Dart_NativeEntrySymbol symbol); +/* TODO(turnidge): Rename to Dart_LibrarySetNativeResolver? */ + +/** + * Returns the callback used to resolve native functions for a library. + * + * \param library A library. + * \param resolver a pointer to a Dart_NativeEntryResolver + * + * \return A valid handle if the library was found. + */ +DART_EXPORT Dart_Handle +Dart_GetNativeResolver(Dart_Handle library, Dart_NativeEntryResolver* resolver); + +/** + * Returns the callback used to resolve native function symbols for a library. + * + * \param library A library. + * \param resolver a pointer to a Dart_NativeEntrySymbol. + * + * \return A valid handle if the library was found. + */ +DART_EXPORT Dart_Handle Dart_GetNativeSymbol(Dart_Handle library, + Dart_NativeEntrySymbol* resolver); + +/** + * Sets the callback used to resolve FFI native functions for a library. + * The resolved functions are expected to be a C function pointer of the + * correct signature (as specified in the `@FfiNative()` function + * annotation in Dart code). + * + * NOTE: This is an experimental feature and might change in the future. + * + * \param library A library. + * \param resolver A native function resolver. + * + * \return A valid handle if the native resolver was set successfully. + */ +DART_EXPORT Dart_Handle +Dart_SetFfiNativeResolver(Dart_Handle library, Dart_FfiNativeResolver resolver); + +/* + * ===================== + * Scripts and Libraries + * ===================== + */ + +typedef enum { + Dart_kCanonicalizeUrl = 0, + Dart_kImportTag, + Dart_kKernelTag, +} Dart_LibraryTag; + +/** + * The library tag handler is a multi-purpose callback provided by the + * embedder to the Dart VM. The embedder implements the tag handler to + * provide the ability to load Dart scripts and imports. + * + * -- TAGS -- + * + * Dart_kCanonicalizeUrl + * + * This tag indicates that the embedder should canonicalize 'url' with + * respect to 'library'. For most embedders, the + * Dart_DefaultCanonicalizeUrl function is a sufficient implementation + * of this tag. The return value should be a string holding the + * canonicalized url. + * + * Dart_kImportTag + * + * This tag is used to load a library from IsolateMirror.loadUri. The embedder + * should call Dart_LoadLibraryFromKernel to provide the library to the VM. The + * return value should be an error or library (the result from + * Dart_LoadLibraryFromKernel). + * + * Dart_kKernelTag + * + * This tag is used to load the intermediate file (kernel) generated by + * the Dart front end. This tag is typically used when a 'hot-reload' + * of an application is needed and the VM is 'use dart front end' mode. + * The dart front end typically compiles all the scripts, imports and part + * files into one intermediate file hence we don't use the source/import or + * script tags. The return value should be an error or a TypedData containing + * the kernel bytes. + * + */ +typedef Dart_Handle (*Dart_LibraryTagHandler)( + Dart_LibraryTag tag, + Dart_Handle library_or_package_map_url, + Dart_Handle url); + +/** + * Sets library tag handler for the current isolate. This handler is + * used to handle the various tags encountered while loading libraries + * or scripts in the isolate. + * + * \param handler Handler code to be used for handling the various tags + * encountered while loading libraries or scripts in the isolate. + * + * \return If no error occurs, the handler is set for the isolate. + * Otherwise an error handle is returned. + * + * TODO(turnidge): Document. + */ +DART_EXPORT Dart_Handle +Dart_SetLibraryTagHandler(Dart_LibraryTagHandler handler); + +/** + * Handles deferred loading requests. When this handler is invoked, it should + * eventually load the deferred loading unit with the given id and call + * Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError. It is + * recommended that the loading occur asynchronously, but it is permitted to + * call Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError before the + * handler returns. + * + * If an error is returned, it will be propagated through + * `prefix.loadLibrary()`. This is useful for synchronous + * implementations, which must propagate any unwind errors from + * Dart_DeferredLoadComplete or Dart_DeferredLoadComplete. Otherwise the handler + * should return a non-error such as `Dart_Null()`. + */ +typedef Dart_Handle (*Dart_DeferredLoadHandler)(intptr_t loading_unit_id); + +/** + * Sets the deferred load handler for the current isolate. This handler is + * used to handle loading deferred imports in an AppJIT or AppAOT program. + */ +DART_EXPORT Dart_Handle +Dart_SetDeferredLoadHandler(Dart_DeferredLoadHandler handler); + +/** + * Notifies the VM that a deferred load completed successfully. This function + * will eventually cause the corresponding `prefix.loadLibrary()` futures to + * complete. + * + * Requires the current isolate to be the same current isolate during the + * invocation of the Dart_DeferredLoadHandler. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_DeferredLoadComplete(intptr_t loading_unit_id, + const uint8_t* snapshot_data, + const uint8_t* snapshot_instructions); + +/** + * Notifies the VM that a deferred load failed. This function + * will eventually cause the corresponding `prefix.loadLibrary()` futures to + * complete with an error. + * + * If `transient` is true, future invocations of `prefix.loadLibrary()` will + * trigger new load requests. If false, futures invocation will complete with + * the same error. + * + * Requires the current isolate to be the same current isolate during the + * invocation of the Dart_DeferredLoadHandler. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_DeferredLoadCompleteError(intptr_t loading_unit_id, + const char* error_message, + bool transient); + +/** + * Canonicalizes a url with respect to some library. + * + * The url is resolved with respect to the library's url and some url + * normalizations are performed. + * + * This canonicalization function should be sufficient for most + * embedders to implement the Dart_kCanonicalizeUrl tag. + * + * \param base_url The base url relative to which the url is + * being resolved. + * \param url The url being resolved and canonicalized. This + * parameter is a string handle. + * + * \return If no error occurs, a String object is returned. Otherwise + * an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url, + Dart_Handle url); + +/** + * Loads the root library for the current isolate. + * + * Requires there to be no current root library. + * + * \param kernel_buffer A buffer which contains a kernel binary (see + * pkg/kernel/binary.md). Must remain valid until isolate group shutdown. + * \param kernel_size Length of the passed in buffer. + * + * \return A handle to the root library, or an error. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_LoadScriptFromKernel(const uint8_t* kernel_buffer, intptr_t kernel_size); + +/** + * Gets the library for the root script for the current isolate. + * + * If the root script has not yet been set for the current isolate, + * this function returns Dart_Null(). This function never returns an + * error handle. + * + * \return Returns the root Library for the current isolate or Dart_Null(). + */ +DART_EXPORT Dart_Handle Dart_RootLibrary(void); + +/** + * Sets the root library for the current isolate. + * + * \return Returns an error handle if `library` is not a library handle. + */ +DART_EXPORT Dart_Handle Dart_SetRootLibrary(Dart_Handle library); + +/** + * Lookup or instantiate a legacy type by name and type arguments from a + * Library. + * + * \param library The library containing the class or interface. + * \param class_name The class name for the type. + * \param number_of_type_arguments Number of type arguments. + * For non parametric types the number of type arguments would be 0. + * \param type_arguments Pointer to an array of type arguments. + * For non parameteric types a NULL would be passed in for this argument. + * + * \return If no error occurs, the type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library, + Dart_Handle class_name, + intptr_t number_of_type_arguments, + Dart_Handle* type_arguments); + +/** + * Lookup or instantiate a nullable type by name and type arguments from + * Library. + * + * \param library The library containing the class or interface. + * \param class_name The class name for the type. + * \param number_of_type_arguments Number of type arguments. + * For non parametric types the number of type arguments would be 0. + * \param type_arguments Pointer to an array of type arguments. + * For non parameteric types a NULL would be passed in for this argument. + * + * \return If no error occurs, the type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_GetNullableType(Dart_Handle library, + Dart_Handle class_name, + intptr_t number_of_type_arguments, + Dart_Handle* type_arguments); + +/** + * Lookup or instantiate a non-nullable type by name and type arguments from + * Library. + * + * \param library The library containing the class or interface. + * \param class_name The class name for the type. + * \param number_of_type_arguments Number of type arguments. + * For non parametric types the number of type arguments would be 0. + * \param type_arguments Pointer to an array of type arguments. + * For non parameteric types a NULL would be passed in for this argument. + * + * \return If no error occurs, the type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle +Dart_GetNonNullableType(Dart_Handle library, + Dart_Handle class_name, + intptr_t number_of_type_arguments, + Dart_Handle* type_arguments); + +/** + * Creates a nullable version of the provided type. + * + * \param type The type to be converted to a nullable type. + * + * \return If no error occurs, a nullable type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_TypeToNullableType(Dart_Handle type); + +/** + * Creates a non-nullable version of the provided type. + * + * \param type The type to be converted to a non-nullable type. + * + * \return If no error occurs, a non-nullable type is returned. + * Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_TypeToNonNullableType(Dart_Handle type); + +/** + * A type's nullability. + * + * \param type A Dart type. + * \param result An out parameter containing the result of the check. True if + * the type is of the specified nullability, false otherwise. + * + * \return Returns an error handle if type is not of type Type. + */ +DART_EXPORT Dart_Handle Dart_IsNullableType(Dart_Handle type, bool* result); +DART_EXPORT Dart_Handle Dart_IsNonNullableType(Dart_Handle type, bool* result); +DART_EXPORT Dart_Handle Dart_IsLegacyType(Dart_Handle type, bool* result); + +/** + * Lookup a class or interface by name from a Library. + * + * \param library The library containing the class or interface. + * \param class_name The name of the class or interface. + * + * \return If no error occurs, the class or interface is + * returned. Otherwise an error handle is returned. + */ +DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library, + Dart_Handle class_name); +/* TODO(asiva): The above method needs to be removed once all uses + * of it are removed from the embedder code. */ + +/** + * Returns an import path to a Library, such as "file:///test.dart" or + * "dart:core". + */ +DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library); + +/** + * Returns a URL from which a Library was loaded. + */ +DART_EXPORT Dart_Handle Dart_LibraryResolvedUrl(Dart_Handle library); + +/** + * \return An array of libraries. + */ +DART_EXPORT Dart_Handle Dart_GetLoadedLibraries(void); + +DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url); +/* TODO(turnidge): Consider returning Dart_Null() when the library is + * not found to distinguish that from a true error case. */ + +/** + * Report an loading error for the library. + * + * \param library The library that failed to load. + * \param error The Dart error instance containing the load error. + * + * \return If the VM handles the error, the return value is + * a null handle. If it doesn't handle the error, the error + * object is returned. + */ +DART_EXPORT Dart_Handle Dart_LibraryHandleError(Dart_Handle library, + Dart_Handle error); + +/** + * Called by the embedder to load a partial program. Does not set the root + * library. + * + * \param kernel_buffer A buffer which contains a kernel binary (see + * pkg/kernel/binary.md). Must remain valid until isolate shutdown. + * \param kernel_buffer_size Length of the passed in buffer. + * + * \return A handle to the main library of the compilation unit, or an error. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_LoadLibraryFromKernel(const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size); + +/** + * Indicates that all outstanding load requests have been satisfied. + * This finalizes all the new classes loaded and optionally completes + * deferred library futures. + * + * Requires there to be a current isolate. + * + * \param complete_futures Specify true if all deferred library + * futures should be completed, false otherwise. + * + * \return Success if all classes have been finalized and deferred library + * futures are completed. Otherwise, returns an error. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_FinalizeLoading(bool complete_futures); + +/* + * ===== + * Peers + * ===== + */ + +/** + * The peer field is a lazily allocated field intended for storage of + * an uncommonly used values. Most instances types can have a peer + * field allocated. The exceptions are subtypes of Null, num, and + * bool. + */ + +/** + * Returns the value of peer field of 'object' in 'peer'. + * + * \param object An object. + * \param peer An out parameter that returns the value of the peer + * field. + * + * \return Returns an error if 'object' is a subtype of Null, num, or + * bool. + */ +DART_EXPORT Dart_Handle Dart_GetPeer(Dart_Handle object, void** peer); + +/** + * Sets the value of the peer field of 'object' to the value of + * 'peer'. + * + * \param object An object. + * \param peer A value to store in the peer field. + * + * \return Returns an error if 'object' is a subtype of Null, num, or + * bool. + */ +DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer); + +/* + * ====== + * Kernel + * ====== + */ + +/** + * Experimental support for Dart to Kernel parser isolate. + * + * TODO(hausner): Document finalized interface. + * + */ + +// TODO(33433): Remove kernel service from the embedding API. + +typedef enum { + Dart_KernelCompilationStatus_Unknown = -1, + Dart_KernelCompilationStatus_Ok = 0, + Dart_KernelCompilationStatus_Error = 1, + Dart_KernelCompilationStatus_Crash = 2, + Dart_KernelCompilationStatus_MsgFailed = 3, +} Dart_KernelCompilationStatus; + +typedef struct { + Dart_KernelCompilationStatus status; + bool null_safety; + char* error; + uint8_t* kernel; + intptr_t kernel_size; +} Dart_KernelCompilationResult; + +typedef enum { + Dart_KernelCompilationVerbosityLevel_Error = 0, + Dart_KernelCompilationVerbosityLevel_Warning, + Dart_KernelCompilationVerbosityLevel_Info, + Dart_KernelCompilationVerbosityLevel_All, +} Dart_KernelCompilationVerbosityLevel; + +DART_EXPORT bool Dart_IsKernelIsolate(Dart_Isolate isolate); +DART_EXPORT bool Dart_KernelIsolateIsRunning(void); +DART_EXPORT Dart_Port Dart_KernelPort(void); + +/** + * Compiles the given `script_uri` to a kernel file. + * + * \param platform_kernel A buffer containing the kernel of the platform (e.g. + * `vm_platform_strong.dill`). The VM does not take ownership of this memory. + * + * \param platform_kernel_size The length of the platform_kernel buffer. + * + * \param snapshot_compile Set to `true` when the compilation is for a snapshot. + * This is used by the frontend to determine if compilation related information + * should be printed to console (e.g., null safety mode). + * + * \param verbosity Specifies the logging behavior of the kernel compilation + * service. + * + * \return Returns the result of the compilation. + * + * On a successful compilation the returned [Dart_KernelCompilationResult] has + * a status of [Dart_KernelCompilationStatus_Ok] and the `kernel`/`kernel_size` + * fields are set. The caller takes ownership of the malloc()ed buffer. + * + * On a failed compilation the `error` might be set describing the reason for + * the failed compilation. The caller takes ownership of the malloc()ed + * error. + * + * Requires there to be a current isolate. + */ +DART_EXPORT Dart_KernelCompilationResult +Dart_CompileToKernel(const char* script_uri, + const uint8_t* platform_kernel, + const intptr_t platform_kernel_size, + bool incremental_compile, + bool snapshot_compile, + const char* package_config, + Dart_KernelCompilationVerbosityLevel verbosity); + +/** + * Compiles the given `script_uri` to a kernel file. + * + * \param platform_kernel A buffer containing the kernel of the platform (e.g. + * `vm_platform_strong.dill`). The VM does not take ownership of this memory. + * + * \param platform_kernel_size The length of the platform_kernel buffer. + * + * \param snapshot_compile Set to `true` when the compilation is for a snapshot. + * This is used by the frontend to determine if compilation related information + * should be printed to console (e.g., null safety mode). + * + * \param null_safety Provides null-safety mode setting for the compiler. + * + * \param verbosity Specifies the logging behavior of the kernel compilation + * service. + * + * \return Returns the result of the compilation. + * + * On a successful compilation the returned [Dart_KernelCompilationResult] has + * a status of [Dart_KernelCompilationStatus_Ok] and the `kernel`/`kernel_size` + * fields are set. The caller takes ownership of the malloc()ed buffer. + * + * On a failed compilation the `error` might be set describing the reason for + * the failed compilation. The caller takes ownership of the malloc()ed + * error. + */ +DART_EXPORT Dart_KernelCompilationResult +Dart_CompileToKernelWithGivenNullsafety( + const char* script_uri, + const uint8_t* platform_kernel, + const intptr_t platform_kernel_size, + bool snapshot_compile, + const char* package_config, + const bool null_safety, + Dart_KernelCompilationVerbosityLevel verbosity); + +typedef struct { + const char* uri; + const char* source; +} Dart_SourceFile; + +DART_EXPORT Dart_KernelCompilationResult Dart_KernelListDependencies(void); + +/** + * Sets the kernel buffer which will be used to load Dart SDK sources + * dynamically at runtime. + * + * \param platform_kernel A buffer containing kernel which has sources for the + * Dart SDK populated. Note: The VM does not take ownership of this memory. + * + * \param platform_kernel_size The length of the platform_kernel buffer. + */ +DART_EXPORT void Dart_SetDartLibrarySourcesKernel( + const uint8_t* platform_kernel, + const intptr_t platform_kernel_size); + +/** + * Detect the null safety opt-in status. + * + * When running from source, it is based on the opt-in status of `script_uri`. + * When running from a kernel buffer, it is based on the mode used when + * generating `kernel_buffer`. + * When running from an appJIT or AOT snapshot, it is based on the mode used + * when generating `snapshot_data`. + * + * \param script_uri Uri of the script that contains the source code + * + * \param package_config Uri of the package configuration file (either in format + * of .packages or .dart_tool/package_config.json) for the null safety + * detection to resolve package imports against. If this parameter is not + * passed the package resolution of the parent isolate should be used. + * + * \param original_working_directory current working directory when the VM + * process was launched, this is used to correctly resolve the path specified + * for package_config. + * + * \param snapshot_data Buffer containing the snapshot data of the + * isolate or NULL if no snapshot is provided. If provided, the buffers must + * remain valid until the isolate shuts down. + * + * \param snapshot_instructions Buffer containing the snapshot instructions of + * the isolate or NULL if no snapshot is provided. If provided, the buffers + * must remain valid until the isolate shuts down. + * + * \param kernel_buffer A buffer which contains a kernel/DIL program. Must + * remain valid until isolate shutdown. + * + * \param kernel_buffer_size The size of `kernel_buffer`. + * + * \return Returns true if the null safety is opted in by the input being + * run `script_uri`, `snapshot_data` or `kernel_buffer`. + * + */ +DART_EXPORT bool Dart_DetectNullSafety(const char* script_uri, + const char* package_config, + const char* original_working_directory, + const uint8_t* snapshot_data, + const uint8_t* snapshot_instructions, + const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size); + +#define DART_KERNEL_ISOLATE_NAME "kernel-service" + +/* + * ======= + * Service + * ======= + */ + +#define DART_VM_SERVICE_ISOLATE_NAME "vm-service" + +/** + * Returns true if isolate is the service isolate. + * + * \param isolate An isolate + * + * \return Returns true if 'isolate' is the service isolate. + */ +DART_EXPORT bool Dart_IsServiceIsolate(Dart_Isolate isolate); + +/** + * Writes the CPU profile to the timeline as a series of 'instant' events. + * + * Note that this is an expensive operation. + * + * \param main_port The main port of the Isolate whose profile samples to write. + * \param error An optional error, must be free()ed by caller. + * + * \return Returns true if the profile is successfully written and false + * otherwise. + */ +DART_EXPORT bool Dart_WriteProfileToTimeline(Dart_Port main_port, char** error); + +/* + * ============== + * Precompilation + * ============== + */ + +/** + * Compiles all functions reachable from entry points and marks + * the isolate to disallow future compilation. + * + * Entry points should be specified using `@pragma("vm:entry-point")` + * annotation. + * + * \return An error handle if a compilation error or runtime error running const + * constructors was encountered. + */ +DART_EXPORT Dart_Handle Dart_Precompile(void); + +typedef void (*Dart_CreateLoadingUnitCallback)( + void* callback_data, + intptr_t loading_unit_id, + void** write_callback_data, + void** write_debug_callback_data); +typedef void (*Dart_StreamingWriteCallback)(void* callback_data, + const uint8_t* buffer, + intptr_t size); +typedef void (*Dart_StreamingCloseCallback)(void* callback_data); + +DART_EXPORT Dart_Handle Dart_LoadingUnitLibraryUris(intptr_t loading_unit_id); + +// On Darwin systems, 'dlsym' adds an '_' to the beginning of the symbol name. +// Use the '...CSymbol' definitions for resolving through 'dlsym'. The actual +// symbol names in the objects are given by the '...AsmSymbol' definitions. +#if defined(__APPLE__) +#define kSnapshotBuildIdCSymbol "kDartSnapshotBuildId" +#define kVmSnapshotDataCSymbol "kDartVmSnapshotData" +#define kVmSnapshotInstructionsCSymbol "kDartVmSnapshotInstructions" +#define kVmSnapshotBssCSymbol "kDartVmSnapshotBss" +#define kIsolateSnapshotDataCSymbol "kDartIsolateSnapshotData" +#define kIsolateSnapshotInstructionsCSymbol "kDartIsolateSnapshotInstructions" +#define kIsolateSnapshotBssCSymbol "kDartIsolateSnapshotBss" +#else +#define kSnapshotBuildIdCSymbol "_kDartSnapshotBuildId" +#define kVmSnapshotDataCSymbol "_kDartVmSnapshotData" +#define kVmSnapshotInstructionsCSymbol "_kDartVmSnapshotInstructions" +#define kVmSnapshotBssCSymbol "_kDartVmSnapshotBss" +#define kIsolateSnapshotDataCSymbol "_kDartIsolateSnapshotData" +#define kIsolateSnapshotInstructionsCSymbol "_kDartIsolateSnapshotInstructions" +#define kIsolateSnapshotBssCSymbol "_kDartIsolateSnapshotBss" +#endif + +#define kSnapshotBuildIdAsmSymbol "_kDartSnapshotBuildId" +#define kVmSnapshotDataAsmSymbol "_kDartVmSnapshotData" +#define kVmSnapshotInstructionsAsmSymbol "_kDartVmSnapshotInstructions" +#define kVmSnapshotBssAsmSymbol "_kDartVmSnapshotBss" +#define kIsolateSnapshotDataAsmSymbol "_kDartIsolateSnapshotData" +#define kIsolateSnapshotInstructionsAsmSymbol \ + "_kDartIsolateSnapshotInstructions" +#define kIsolateSnapshotBssAsmSymbol "_kDartIsolateSnapshotBss" + +/** + * Creates a precompiled snapshot. + * - A root library must have been loaded. + * - Dart_Precompile must have been called. + * + * Outputs an assembly file defining the symbols listed in the definitions + * above. + * + * The assembly should be compiled as a static or shared library and linked or + * loaded by the embedder. Running this snapshot requires a VM compiled with + * DART_PRECOMPILED_SNAPSHOT. The kDartVmSnapshotData and + * kDartVmSnapshotInstructions should be passed to Dart_Initialize. The + * kDartIsolateSnapshotData and kDartIsolateSnapshotInstructions should be + * passed to Dart_CreateIsolateGroup. + * + * The callback will be invoked one or more times to provide the assembly code. + * + * If stripped is true, then the assembly code will not include DWARF + * debugging sections. + * + * If debug_callback_data is provided, debug_callback_data will be used with + * the callback to provide separate debugging information. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsAssembly(Dart_StreamingWriteCallback callback, + void* callback_data, + bool stripped, + void* debug_callback_data); +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsAssemblies( + Dart_CreateLoadingUnitCallback next_callback, + void* next_callback_data, + bool stripped, + Dart_StreamingWriteCallback write_callback, + Dart_StreamingCloseCallback close_callback); + +/** + * Creates a precompiled snapshot. + * - A root library must have been loaded. + * - Dart_Precompile must have been called. + * + * Outputs an ELF shared library defining the symbols + * - _kDartVmSnapshotData + * - _kDartVmSnapshotInstructions + * - _kDartIsolateSnapshotData + * - _kDartIsolateSnapshotInstructions + * + * The shared library should be dynamically loaded by the embedder. + * Running this snapshot requires a VM compiled with DART_PRECOMPILED_SNAPSHOT. + * The kDartVmSnapshotData and kDartVmSnapshotInstructions should be passed to + * Dart_Initialize. The kDartIsolateSnapshotData and + * kDartIsolateSnapshotInstructions should be passed to Dart_CreateIsolate. + * + * The callback will be invoked one or more times to provide the binary output. + * + * If stripped is true, then the binary output will not include DWARF + * debugging sections. + * + * If debug_callback_data is provided, debug_callback_data will be used with + * the callback to provide separate debugging information. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsElf(Dart_StreamingWriteCallback callback, + void* callback_data, + bool stripped, + void* debug_callback_data); +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppAOTSnapshotAsElfs(Dart_CreateLoadingUnitCallback next_callback, + void* next_callback_data, + bool stripped, + Dart_StreamingWriteCallback write_callback, + Dart_StreamingCloseCallback close_callback); + +/** + * Like Dart_CreateAppAOTSnapshotAsAssembly, but only includes + * kDartVmSnapshotData and kDartVmSnapshotInstructions. It also does + * not strip DWARF information from the generated assembly or allow for + * separate debug information. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateVMAOTSnapshotAsAssembly(Dart_StreamingWriteCallback callback, + void* callback_data); + +/** + * Sorts the class-ids in depth first traversal order of the inheritance + * tree. This is a costly operation, but it can make method dispatch + * more efficient and is done before writing snapshots. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_SortClasses(void); + +/** + * Creates a snapshot that caches compiled code and type feedback for faster + * startup and quicker warmup in a subsequent process. + * + * Outputs a snapshot in two pieces. The pieces should be passed to + * Dart_CreateIsolateGroup in a VM using the same VM snapshot pieces used in the + * current VM. The instructions piece must be loaded with read and execute + * permissions; the data piece may be loaded as read-only. + * + * - Requires the VM to have not been started with --precompilation. + * - Not supported when targeting IA32. + * - The VM writing the snapshot and the VM reading the snapshot must be the + * same version, must be built in the same DEBUG/RELEASE/PRODUCT mode, must + * be targeting the same architecture, and must both be in checked mode or + * both in unchecked mode. + * + * The buffers are scope allocated and are only valid until the next call to + * Dart_ExitScope. + * + * \return A valid handle if no error occurs during the operation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_data_buffer, + intptr_t* isolate_snapshot_data_size, + uint8_t** isolate_snapshot_instructions_buffer, + intptr_t* isolate_snapshot_instructions_size); + +/** + * Like Dart_CreateAppJITSnapshotAsBlobs, but also creates a new VM snapshot. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_CreateCoreJITSnapshotAsBlobs( + uint8_t** vm_snapshot_data_buffer, + intptr_t* vm_snapshot_data_size, + uint8_t** vm_snapshot_instructions_buffer, + intptr_t* vm_snapshot_instructions_size, + uint8_t** isolate_snapshot_data_buffer, + intptr_t* isolate_snapshot_data_size, + uint8_t** isolate_snapshot_instructions_buffer, + intptr_t* isolate_snapshot_instructions_size); + +/** + * Get obfuscation map for precompiled code. + * + * Obfuscation map is encoded as a JSON array of pairs (original name, + * obfuscated name). + * + * \return Returns an error handler if the VM was built in a mode that does not + * support obfuscation. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle +Dart_GetObfuscationMap(uint8_t** buffer, intptr_t* buffer_length); + +/** + * Returns whether the VM only supports running from precompiled snapshots and + * not from any other kind of snapshot or from source (that is, the VM was + * compiled with DART_PRECOMPILED_RUNTIME). + */ +DART_EXPORT bool Dart_IsPrecompiledRuntime(void); + +/** + * Print a native stack trace. Used for crash handling. + * + * If context is NULL, prints the current stack trace. Otherwise, context + * should be a CONTEXT* (Windows) or ucontext_t* (POSIX) from a signal handler + * running on the current thread. + */ +DART_EXPORT void Dart_DumpNativeStackTrace(void* context); + +/** + * Indicate that the process is about to abort, and the Dart VM should not + * attempt to cleanup resources. + */ +DART_EXPORT void Dart_PrepareToAbort(void); + +#endif /* INCLUDE_DART_API_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/dart_api_dl.c b/experimental/pedometer/src/health_connect/include/dart_api_dl.c new file mode 100644 index 000000000..c4a68f444 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_api_dl.c @@ -0,0 +1,59 @@ +/* + * 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. + */ + +#include "dart_api_dl.h" /* NOLINT */ +#include "dart_version.h" /* NOLINT */ +#include "internal/dart_api_dl_impl.h" /* NOLINT */ + +#include + +#define DART_API_DL_DEFINITIONS(name, R, A) name##_Type name##_DL = NULL; + +DART_API_ALL_DL_SYMBOLS(DART_API_DL_DEFINITIONS) + +#undef DART_API_DL_DEFINITIONS + +typedef void* DartApiEntry_function; + +DartApiEntry_function FindFunctionPointer(const DartApiEntry* entries, + const char* name) { + while (entries->name != NULL) { + if (strcmp(entries->name, name) == 0) return entries->function; + entries++; + } + return NULL; +} + +intptr_t Dart_InitializeApiDL(void* data) { + DartApi* dart_api_data = (DartApi*)data; + + if (dart_api_data->major != DART_API_DL_MAJOR_VERSION) { + // If the DartVM we're running on does not have the same version as this + // file was compiled against, refuse to initialize. The symbols are not + // compatible. + return -1; + } + // Minor versions are allowed to be different. + // If the DartVM has a higher minor version, it will provide more symbols + // than we initialize here. + // If the DartVM has a lower minor version, it will not provide all symbols. + // In that case, we leave the missing symbols un-initialized. Those symbols + // should not be used by the Dart and native code. The client is responsible + // for checking the minor version number himself based on which symbols it + // is using. + // (If we would error out on this case, recompiling native code against a + // newer SDK would break all uses on older SDKs, which is too strict.) + + const DartApiEntry* dart_api_function_pointers = dart_api_data->functions; + +#define DART_API_DL_INIT(name, R, A) \ + name##_DL = \ + (name##_Type)(FindFunctionPointer(dart_api_function_pointers, #name)); + DART_API_ALL_DL_SYMBOLS(DART_API_DL_INIT) +#undef DART_API_DL_INIT + + return 0; +} diff --git a/experimental/pedometer/src/health_connect/include/dart_api_dl.h b/experimental/pedometer/src/health_connect/include/dart_api_dl.h new file mode 100644 index 000000000..804b2811c --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_api_dl.h @@ -0,0 +1,150 @@ +/* + * 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. + */ + +#ifndef RUNTIME_INCLUDE_DART_API_DL_H_ +#define RUNTIME_INCLUDE_DART_API_DL_H_ + +#include "dart_api.h" /* NOLINT */ +#include "dart_native_api.h" /* NOLINT */ + +/** \mainpage Dynamically Linked Dart API + * + * This exposes a subset of symbols from dart_api.h and dart_native_api.h + * available in every Dart embedder through dynamic linking. + * + * All symbols are postfixed with _DL to indicate that they are dynamically + * linked and to prevent conflicts with the original symbol. + * + * Link `dart_api_dl.c` file into your library and invoke + * `Dart_InitializeApiDL` with `NativeApi.initializeApiDLData`. + */ + +DART_EXPORT intptr_t Dart_InitializeApiDL(void* data); + +// ============================================================================ +// IMPORTANT! Never update these signatures without properly updating +// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION. +// +// Verbatim copy of `dart_native_api.h` and `dart_api.h` symbol names and types +// to trigger compile-time errors if the sybols in those files are updated +// without updating these. +// +// Function return and argument types, and typedefs are carbon copied. Structs +// are typechecked nominally in C/C++, so they are not copied, instead a +// comment is added to their definition. +typedef int64_t Dart_Port_DL; + +typedef void (*Dart_NativeMessageHandler_DL)(Dart_Port_DL dest_port_id, + Dart_CObject* message); + +// dart_native_api.h symbols can be called on any thread. +#define DART_NATIVE_API_DL_SYMBOLS(F) \ + /***** dart_native_api.h *****/ \ + /* Dart_Port */ \ + F(Dart_PostCObject, bool, (Dart_Port_DL port_id, Dart_CObject * message)) \ + F(Dart_PostInteger, bool, (Dart_Port_DL port_id, int64_t message)) \ + F(Dart_NewNativePort, Dart_Port_DL, \ + (const char* name, Dart_NativeMessageHandler_DL handler, \ + bool handle_concurrently)) \ + F(Dart_CloseNativePort, bool, (Dart_Port_DL native_port_id)) + +// dart_api.h symbols can only be called on Dart threads. +#define DART_API_DL_SYMBOLS(F) \ + /***** dart_api.h *****/ \ + /* Errors */ \ + F(Dart_IsError, bool, (Dart_Handle handle)) \ + F(Dart_IsApiError, bool, (Dart_Handle handle)) \ + F(Dart_IsUnhandledExceptionError, bool, (Dart_Handle handle)) \ + F(Dart_IsCompilationError, bool, (Dart_Handle handle)) \ + F(Dart_IsFatalError, bool, (Dart_Handle handle)) \ + F(Dart_GetError, const char*, (Dart_Handle handle)) \ + F(Dart_ErrorHasException, bool, (Dart_Handle handle)) \ + F(Dart_ErrorGetException, Dart_Handle, (Dart_Handle handle)) \ + F(Dart_ErrorGetStackTrace, Dart_Handle, (Dart_Handle handle)) \ + F(Dart_NewApiError, Dart_Handle, (const char* error)) \ + F(Dart_NewCompilationError, Dart_Handle, (const char* error)) \ + F(Dart_NewUnhandledExceptionError, Dart_Handle, (Dart_Handle exception)) \ + F(Dart_PropagateError, void, (Dart_Handle handle)) \ + /* Dart_Handle, Dart_PersistentHandle, Dart_WeakPersistentHandle */ \ + F(Dart_HandleFromPersistent, Dart_Handle, (Dart_PersistentHandle object)) \ + F(Dart_HandleFromWeakPersistent, Dart_Handle, \ + (Dart_WeakPersistentHandle object)) \ + F(Dart_NewPersistentHandle, Dart_PersistentHandle, (Dart_Handle object)) \ + F(Dart_SetPersistentHandle, void, \ + (Dart_PersistentHandle obj1, Dart_Handle obj2)) \ + F(Dart_DeletePersistentHandle, void, (Dart_PersistentHandle object)) \ + F(Dart_NewWeakPersistentHandle, Dart_WeakPersistentHandle, \ + (Dart_Handle object, void* peer, intptr_t external_allocation_size, \ + Dart_HandleFinalizer callback)) \ + F(Dart_DeleteWeakPersistentHandle, void, (Dart_WeakPersistentHandle object)) \ + F(Dart_UpdateExternalSize, void, \ + (Dart_WeakPersistentHandle object, intptr_t external_allocation_size)) \ + F(Dart_NewFinalizableHandle, Dart_FinalizableHandle, \ + (Dart_Handle object, void* peer, intptr_t external_allocation_size, \ + Dart_HandleFinalizer callback)) \ + F(Dart_DeleteFinalizableHandle, void, \ + (Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object)) \ + F(Dart_UpdateFinalizableExternalSize, void, \ + (Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object, \ + intptr_t external_allocation_size)) \ + /* Dart_Port */ \ + F(Dart_Post, bool, (Dart_Port_DL port_id, Dart_Handle object)) \ + F(Dart_NewSendPort, Dart_Handle, (Dart_Port_DL port_id)) \ + F(Dart_SendPortGetId, Dart_Handle, \ + (Dart_Handle port, Dart_Port_DL * port_id)) \ + /* Scopes */ \ + F(Dart_EnterScope, void, (void)) \ + F(Dart_ExitScope, void, (void)) + +#define DART_API_ALL_DL_SYMBOLS(F) \ + DART_NATIVE_API_DL_SYMBOLS(F) \ + DART_API_DL_SYMBOLS(F) +// IMPORTANT! Never update these signatures without properly updating +// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION. +// +// End of verbatim copy. +// ============================================================================ + +// Copy of definition of DART_EXPORT without 'used' attribute. +// +// The 'used' attribute cannot be used with DART_API_ALL_DL_SYMBOLS because +// they are not function declarations, but variable declarations with a +// function pointer type. +// +// The function pointer variables are initialized with the addresses of the +// functions in the VM. If we were to use function declarations instead, we +// would need to forward the call to the VM adding indirection. +#if defined(__CYGWIN__) +#error Tool chain and platform not supported. +#elif defined(_WIN32) +#if defined(DART_SHARED_LIB) +#define DART_EXPORT_DL DART_EXTERN_C __declspec(dllexport) +#else +#define DART_EXPORT_DL DART_EXTERN_C +#endif +#else +#if __GNUC__ >= 4 +#if defined(DART_SHARED_LIB) +#define DART_EXPORT_DL DART_EXTERN_C __attribute__((visibility("default"))) +#else +#define DART_EXPORT_DL DART_EXTERN_C +#endif +#else +#error Tool chain not supported. +#endif +#endif + +#define DART_API_DL_DECLARATIONS(name, R, A) \ + typedef R(*name##_Type) A; \ + DART_EXPORT_DL name##_Type name##_DL; + +DART_API_ALL_DL_SYMBOLS(DART_API_DL_DECLARATIONS) + +#undef DART_API_DL_DECLARATIONS + +#undef DART_EXPORT_DL + +#endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/dart_embedder_api.h b/experimental/pedometer/src/health_connect/include/dart_embedder_api.h new file mode 100644 index 000000000..e565ebf6e --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_embedder_api.h @@ -0,0 +1,108 @@ +// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNTIME_INCLUDE_DART_EMBEDDER_API_H_ +#define RUNTIME_INCLUDE_DART_EMBEDDER_API_H_ + +#include "include/dart_api.h" +#include "include/dart_tools_api.h" + +namespace dart { +namespace embedder { + +// Initialize all subsystems of the embedder. +// +// Must be called before the `Dart_Initialize()` call to initialize the +// Dart VM. +// +// Returns true on success and false otherwise, in which case error would +// contain error message. +DART_WARN_UNUSED_RESULT bool InitOnce(char** error); + +// Cleans up all subsystems of the embedder. +// +// Must be called after the `Dart_Cleanup()` call to initialize the +// Dart VM. +void Cleanup(); + +// Common arguments that are passed to isolate creation callback and to +// API methods that create isolates. +struct IsolateCreationData { + // URI for the main script that will be running in the isolate. + const char* script_uri; + + // Advisory name of the main method that will be run by isolate. + // Only used for error messages. + const char* main; + + // Isolate creation flags. Might be absent. + Dart_IsolateFlags* flags; + + // Isolate group callback data. + void* isolate_group_data; + + // Isolate callback data. + void* isolate_data; +}; + +// Create and initialize kernel-service isolate. This method should be used +// when VM invokes isolate creation callback with DART_KERNEL_ISOLATE_NAME as +// script_uri. +// The isolate is created from the given snapshot (might be kernel data or +// app-jit snapshot). +DART_WARN_UNUSED_RESULT Dart_Isolate +CreateKernelServiceIsolate(const IsolateCreationData& data, + const uint8_t* buffer, + intptr_t buffer_size, + char** error); + +// Service isolate configuration. +struct VmServiceConfiguration { + enum { + kBindHttpServerToAFreePort = 0, + kDoNotAutoStartHttpServer = -1 + }; + + // Address to which HTTP server will be bound. + const char* ip; + + // Default port. See enum above for special values. + int port; + + // If non-null, connection information for the VM service will be output to a + // file in JSON format at the location specified. + const char* write_service_info_filename; + + // TODO(vegorov) document these ones. + bool dev_mode; + bool deterministic; + bool disable_auth_codes; +}; + +// Create and initialize vm-service isolate from the given AOT snapshot, which +// is expected to contain all necessary 'vm-service' libraries. +// This method should be used when VM invokes isolate creation callback with +// DART_VM_SERVICE_ISOLATE_NAME as script_uri. +DART_WARN_UNUSED_RESULT Dart_Isolate +CreateVmServiceIsolate(const IsolateCreationData& data, + const VmServiceConfiguration& config, + const uint8_t* isolate_data, + const uint8_t* isolate_instr, + char** error); + +// Create and initialize vm-service isolate from the given kernel binary, which +// is expected to contain all necessary 'vm-service' libraries. +// This method should be used when VM invokes isolate creation callback with +// DART_VM_SERVICE_ISOLATE_NAME as script_uri. +DART_WARN_UNUSED_RESULT Dart_Isolate +CreateVmServiceIsolateFromKernel(const IsolateCreationData& data, + const VmServiceConfiguration& config, + const uint8_t* kernel_buffer, + intptr_t kernel_buffer_size, + char** error); + +} // namespace embedder +} // namespace dart + +#endif // RUNTIME_INCLUDE_DART_EMBEDDER_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/dart_native_api.h b/experimental/pedometer/src/health_connect/include/dart_native_api.h new file mode 100644 index 000000000..318a4b735 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_native_api.h @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNTIME_INCLUDE_DART_NATIVE_API_H_ +#define RUNTIME_INCLUDE_DART_NATIVE_API_H_ + +#include "dart_api.h" /* NOLINT */ + +/* + * ========================================== + * Message sending/receiving from native code + * ========================================== + */ + +/** + * A Dart_CObject is used for representing Dart objects as native C + * data outside the Dart heap. These objects are totally detached from + * the Dart heap. Only a subset of the Dart objects have a + * representation as a Dart_CObject. + * + * The string encoding in the 'value.as_string' is UTF-8. + * + * All the different types from dart:typed_data are exposed as type + * kTypedData. The specific type from dart:typed_data is in the type + * field of the as_typed_data structure. The length in the + * as_typed_data structure is always in bytes. + * + * The data for kTypedData is copied on message send and ownership remains with + * the caller. The ownership of data for kExternalTyped is passed to the VM on + * message send and returned when the VM invokes the + * Dart_HandleFinalizer callback; a non-NULL callback must be provided. + * + * Note that Dart_CObject_kNativePointer is intended for internal use by + * dart:io implementation and has no connection to dart:ffi Pointer class. + * It represents a pointer to a native resource of a known type. + * The receiving side will only see this pointer as an integer and will not + * see the specified finalizer. + * The specified finalizer will only be invoked if the message is not delivered. + */ +typedef enum { + Dart_CObject_kNull = 0, + Dart_CObject_kBool, + Dart_CObject_kInt32, + Dart_CObject_kInt64, + Dart_CObject_kDouble, + Dart_CObject_kString, + Dart_CObject_kArray, + Dart_CObject_kTypedData, + Dart_CObject_kExternalTypedData, + Dart_CObject_kUnmodifiableExternalTypedData, + Dart_CObject_kSendPort, + Dart_CObject_kCapability, + Dart_CObject_kNativePointer, + Dart_CObject_kUnsupported, + Dart_CObject_kNumberOfTypes +} Dart_CObject_Type; + +typedef struct _Dart_CObject { + Dart_CObject_Type type; + union { + bool as_bool; + int32_t as_int32; + int64_t as_int64; + double as_double; + char* as_string; + struct { + Dart_Port id; + Dart_Port origin_id; + } as_send_port; + struct { + int64_t id; + } as_capability; + struct { + intptr_t length; + struct _Dart_CObject** values; + } as_array; + struct { + Dart_TypedData_Type type; + intptr_t length; /* in elements, not bytes */ + const uint8_t* values; + } as_typed_data; + struct { + Dart_TypedData_Type type; + intptr_t length; /* in elements, not bytes */ + uint8_t* data; + void* peer; + Dart_HandleFinalizer callback; + } as_external_typed_data; + struct { + intptr_t ptr; + intptr_t size; + Dart_HandleFinalizer callback; + } as_native_pointer; + } value; +} Dart_CObject; +// This struct is versioned by DART_API_DL_MAJOR_VERSION, bump the version when +// changing this struct. + +/** + * Posts a message on some port. The message will contain the Dart_CObject + * object graph rooted in 'message'. + * + * While the message is being sent the state of the graph of Dart_CObject + * structures rooted in 'message' should not be accessed, as the message + * generation will make temporary modifications to the data. When the message + * has been sent the graph will be fully restored. + * + * If true is returned, the message was enqueued, and finalizers for external + * typed data will eventually run, even if the receiving isolate shuts down + * before processing the message. If false is returned, the message was not + * enqueued and ownership of external typed data in the message remains with the + * caller. + * + * This function may be called on any thread when the VM is running (that is, + * after Dart_Initialize has returned and before Dart_Cleanup has been called). + * + * \param port_id The destination port. + * \param message The message to send. + * + * \return True if the message was posted. + */ +DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message); + +/** + * Posts a message on some port. The message will contain the integer 'message'. + * + * \param port_id The destination port. + * \param message The message to send. + * + * \return True if the message was posted. + */ +DART_EXPORT bool Dart_PostInteger(Dart_Port port_id, int64_t message); + +/** + * A native message handler. + * + * This handler is associated with a native port by calling + * Dart_NewNativePort. + * + * The message received is decoded into the message structure. The + * lifetime of the message data is controlled by the caller. All the + * data references from the message are allocated by the caller and + * will be reclaimed when returning to it. + */ +typedef void (*Dart_NativeMessageHandler)(Dart_Port dest_port_id, + Dart_CObject* message); + +/** + * Creates a new native port. When messages are received on this + * native port, then they will be dispatched to the provided native + * message handler. + * + * \param name The name of this port in debugging messages. + * \param handler The C handler to run when messages arrive on the port. + * \param handle_concurrently Is it okay to process requests on this + * native port concurrently? + * + * \return If successful, returns the port id for the native port. In + * case of error, returns ILLEGAL_PORT. + */ +DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, + Dart_NativeMessageHandler handler, + bool handle_concurrently); +/* TODO(turnidge): Currently handle_concurrently is ignored. */ + +/** + * Closes the native port with the given id. + * + * The port must have been allocated by a call to Dart_NewNativePort. + * + * \param native_port_id The id of the native port to close. + * + * \return Returns true if the port was closed successfully. + */ +DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id); + +/* + * ================== + * Verification Tools + * ================== + */ + +/** + * Forces all loaded classes and functions to be compiled eagerly in + * the current isolate.. + * + * TODO(turnidge): Document. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_CompileAll(void); + +/** + * Finalizes all classes. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_FinalizeAllClasses(void); + +/* This function is intentionally undocumented. + * + * It should not be used outside internal tests. + */ +DART_EXPORT void* Dart_ExecuteInternalCommand(const char* command, void* arg); + +#endif /* INCLUDE_DART_NATIVE_API_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/dart_tools_api.h b/experimental/pedometer/src/health_connect/include/dart_tools_api.h new file mode 100644 index 000000000..90687f601 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_tools_api.h @@ -0,0 +1,620 @@ +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNTIME_INCLUDE_DART_TOOLS_API_H_ +#define RUNTIME_INCLUDE_DART_TOOLS_API_H_ + +#include "dart_api.h" /* NOLINT */ + +/** \mainpage Dart Tools Embedding API Reference + * + * This reference describes the Dart embedding API for tools. Tools include + * a debugger, service protocol, and timeline. + * + * NOTE: The APIs described in this file are unstable and subject to change. + * + * This reference is generated from the header include/dart_tools_api.h. + */ + +/* + * ======== + * Debugger + * ======== + */ + +/** + * ILLEGAL_ISOLATE_ID is a number guaranteed never to be associated with a + * valid isolate. + */ +#define ILLEGAL_ISOLATE_ID ILLEGAL_PORT + +/** + * ILLEGAL_ISOLATE_GROUP_ID is a number guaranteed never to be associated with a + * valid isolate group. + */ +#define ILLEGAL_ISOLATE_GROUP_ID 0 + +/* + * ======= + * Service + * ======= + */ + +/** + * A service request callback function. + * + * These callbacks, registered by the embedder, are called when the VM receives + * a service request it can't handle and the service request command name + * matches one of the embedder registered handlers. + * + * The return value of the callback indicates whether the response + * should be used as a regular result or an error result. + * Specifically, if the callback returns true, a regular JSON-RPC + * response is built in the following way: + * + * { + * "jsonrpc": "2.0", + * "result": , + * "id": , + * } + * + * If the callback returns false, a JSON-RPC error is built like this: + * + * { + * "jsonrpc": "2.0", + * "error": , + * "id": , + * } + * + * \param method The rpc method name. + * \param param_keys Service requests can have key-value pair parameters. The + * keys and values are flattened and stored in arrays. + * \param param_values The values associated with the keys. + * \param num_params The length of the param_keys and param_values arrays. + * \param user_data The user_data pointer registered with this handler. + * \param result A C string containing a valid JSON object. The returned + * pointer will be freed by the VM by calling free. + * + * \return True if the result is a regular JSON-RPC response, false if the + * result is a JSON-RPC error. + */ +typedef bool (*Dart_ServiceRequestCallback)(const char* method, + const char** param_keys, + const char** param_values, + intptr_t num_params, + void* user_data, + const char** json_object); + +/** + * Register a Dart_ServiceRequestCallback to be called to handle + * requests for the named rpc on a specific isolate. The callback will + * be invoked with the current isolate set to the request target. + * + * \param method The name of the method that this callback is responsible for. + * \param callback The callback to invoke. + * \param user_data The user data passed to the callback. + * + * NOTE: If multiple callbacks with the same name are registered, only + * the last callback registered will be remembered. + */ +DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( + const char* method, + Dart_ServiceRequestCallback callback, + void* user_data); + +/** + * Register a Dart_ServiceRequestCallback to be called to handle + * requests for the named rpc. The callback will be invoked without a + * current isolate. + * + * \param method The name of the command that this callback is responsible for. + * \param callback The callback to invoke. + * \param user_data The user data passed to the callback. + * + * NOTE: If multiple callbacks with the same name are registered, only + * the last callback registered will be remembered. + */ +DART_EXPORT void Dart_RegisterRootServiceRequestCallback( + const char* method, + Dart_ServiceRequestCallback callback, + void* user_data); + +/** + * Embedder information which can be requested by the VM for internal or + * reporting purposes. + * + * The pointers in this structure are not going to be cached or freed by the VM. + */ + + #define DART_EMBEDDER_INFORMATION_CURRENT_VERSION (0x00000001) + +typedef struct { + int32_t version; + const char* name; // [optional] The name of the embedder + int64_t current_rss; // [optional] the current RSS of the embedder + int64_t max_rss; // [optional] the maximum RSS of the embedder +} Dart_EmbedderInformation; + +/** + * Callback provided by the embedder that is used by the VM to request + * information. + * + * \return Returns a pointer to a Dart_EmbedderInformation structure. + * The embedder keeps the ownership of the structure and any field in it. + * The embedder must ensure that the structure will remain valid until the + * next invokation of the callback. + */ +typedef void (*Dart_EmbedderInformationCallback)( + Dart_EmbedderInformation* info); + +/** + * Register a Dart_ServiceRequestCallback to be called to handle + * requests for the named rpc. The callback will be invoked without a + * current isolate. + * + * \param method The name of the command that this callback is responsible for. + * \param callback The callback to invoke. + * \param user_data The user data passed to the callback. + * + * NOTE: If multiple callbacks are registered, only the last callback registered + * will be remembered. + */ +DART_EXPORT void Dart_SetEmbedderInformationCallback( + Dart_EmbedderInformationCallback callback); + +/** + * Invoke a vm-service method and wait for its result. + * + * \param request_json The utf8-encoded json-rpc request. + * \param request_json_length The length of the json-rpc request. + * + * \param response_json The returned utf8-encoded json response, must be + * free()ed by caller. + * \param response_json_length The length of the returned json response. + * \param error An optional error, must be free()ed by caller. + * + * \return Whether the call was successfully performed. + * + * NOTE: This method does not need a current isolate and must not have the + * vm-isolate being the current isolate. It must be called after + * Dart_Initialize() and before Dart_Cleanup(). + */ +DART_EXPORT bool Dart_InvokeVMServiceMethod(uint8_t* request_json, + intptr_t request_json_length, + uint8_t** response_json, + intptr_t* response_json_length, + char** error); + +/* + * ======== + * Event Streams + * ======== + */ + +/** + * A callback invoked when the VM service gets a request to listen to + * some stream. + * + * \return Returns true iff the embedder supports the named stream id. + */ +typedef bool (*Dart_ServiceStreamListenCallback)(const char* stream_id); + +/** + * A callback invoked when the VM service gets a request to cancel + * some stream. + */ +typedef void (*Dart_ServiceStreamCancelCallback)(const char* stream_id); + +/** + * Adds VM service stream callbacks. + * + * \param listen_callback A function pointer to a listen callback function. + * A listen callback function should not be already set when this function + * is called. A NULL value removes the existing listen callback function + * if any. + * + * \param cancel_callback A function pointer to a cancel callback function. + * A cancel callback function should not be already set when this function + * is called. A NULL value removes the existing cancel callback function + * if any. + * + * \return Success if the callbacks were added. Otherwise, returns an + * error handle. + */ +DART_EXPORT char* Dart_SetServiceStreamCallbacks( + Dart_ServiceStreamListenCallback listen_callback, + Dart_ServiceStreamCancelCallback cancel_callback); + +/** + * Sends a data event to clients of the VM Service. + * + * A data event is used to pass an array of bytes to subscribed VM + * Service clients. For example, in the standalone embedder, this is + * function used to provide WriteEvents on the Stdout and Stderr + * streams. + * + * If the embedder passes in a stream id for which no client is + * subscribed, then the event is ignored. + * + * \param stream_id The id of the stream on which to post the event. + * + * \param event_kind A string identifying what kind of event this is. + * For example, 'WriteEvent'. + * + * \param bytes A pointer to an array of bytes. + * + * \param bytes_length The length of the byte array. + * + * \return NULL if the arguments are well formed. Otherwise, returns an + * error string. The caller is responsible for freeing the error message. + */ +DART_EXPORT char* Dart_ServiceSendDataEvent(const char* stream_id, + const char* event_kind, + const uint8_t* bytes, + intptr_t bytes_length); + +/** + * Usage statistics for a space/generation at a particular moment in time. + * + * \param used Amount of memory used, in bytes. + * + * \param capacity Memory capacity, in bytes. + * + * \param external External memory, in bytes. + * + * \param collections How many times the garbage collector has run in this + * space. + * + * \param time Cumulative time spent collecting garbage in this space, in + * seconds. + * + * \param avg_collection_period Average time between garbage collector running + * in this space, in milliseconds. + */ +typedef struct { + intptr_t used; + intptr_t capacity; + intptr_t external; + intptr_t collections; + double time; + double avg_collection_period; +} Dart_GCStats; + +/** + * A Garbage Collection event with memory usage statistics. + * + * \param type The event type. Static lifetime. + * + * \param reason The reason for the GC event. Static lifetime. + * + * \param new_space Data for New Space. + * + * \param old_space Data for Old Space. + */ +typedef struct { + const char* type; + const char* reason; + + Dart_IsolateGroupId isolate_group_id; + + Dart_GCStats new_space; + Dart_GCStats old_space; +} Dart_GCEvent; + +/** + * A callback invoked when the VM emits a GC event. + * + * \param event The GC event data. Pointer only valid for the duration of the + * callback. + */ +typedef void (*Dart_GCEventCallback)(Dart_GCEvent* event); + +/** + * Sets the native GC event callback. + * + * \param callback A function pointer to an event handler callback function. + * A NULL value removes the existing listen callback function if any. + */ +DART_EXPORT void Dart_SetGCEventCallback(Dart_GCEventCallback callback); + +/* + * ======== + * Reload support + * ======== + * + * These functions are used to implement reloading in the Dart VM. + * This is an experimental feature, so embedders should be prepared + * for these functions to change. + */ + +/** + * A callback which determines whether the file at some url has been + * modified since some time. If the file cannot be found, true should + * be returned. + */ +typedef bool (*Dart_FileModifiedCallback)(const char* url, int64_t since); + +DART_EXPORT char* Dart_SetFileModifiedCallback( + Dart_FileModifiedCallback file_modified_callback); + +/** + * Returns true if isolate is currently reloading. + */ +DART_EXPORT bool Dart_IsReloading(); + +/* + * ======== + * Timeline + * ======== + */ + +/** + * Enable tracking of specified timeline category. This is operational + * only when systrace timeline functionality is turned on. + * + * \param categories A comma separated list of categories that need to + * be enabled, the categories are + * "all" : All categories + * "API" - Execution of Dart C API functions + * "Compiler" - Execution of Dart JIT compiler + * "CompilerVerbose" - More detailed Execution of Dart JIT compiler + * "Dart" - Execution of Dart code + * "Debugger" - Execution of Dart debugger + * "Embedder" - Execution of Dart embedder code + * "GC" - Execution of Dart Garbage Collector + * "Isolate" - Dart Isolate lifecycle execution + * "VM" - Excution in Dart VM runtime code + * "" - None + * + * When "all" is specified all the categories are enabled. + * When a comma separated list of categories is specified, the categories + * that are specified will be enabled and the rest will be disabled. + * When "" is specified all the categories are disabled. + * The category names are case sensitive. + * eg: Dart_EnableTimelineCategory("all"); + * Dart_EnableTimelineCategory("GC,API,Isolate"); + * Dart_EnableTimelineCategory("GC,Debugger,Dart"); + * + * \return True if the categories were successfully enabled, False otherwise. + */ +DART_EXPORT bool Dart_SetEnabledTimelineCategory(const char* categories); + +/** + * Returns a timestamp in microseconds. This timestamp is suitable for + * passing into the timeline system, and uses the same monotonic clock + * as dart:developer's Timeline.now. + * + * \return A timestamp that can be passed to the timeline system. + */ +DART_EXPORT int64_t Dart_TimelineGetMicros(); + +/** + * Returns a raw timestamp in from the monotonic clock. + * + * \return A raw timestamp from the monotonic clock. + */ +DART_EXPORT int64_t Dart_TimelineGetTicks(); + +/** + * Returns the frequency of the monotonic clock. + * + * \return The frequency of the monotonic clock. + */ +DART_EXPORT int64_t Dart_TimelineGetTicksFrequency(); + +typedef enum { + Dart_Timeline_Event_Begin, // Phase = 'B'. + Dart_Timeline_Event_End, // Phase = 'E'. + Dart_Timeline_Event_Instant, // Phase = 'i'. + Dart_Timeline_Event_Duration, // Phase = 'X'. + Dart_Timeline_Event_Async_Begin, // Phase = 'b'. + Dart_Timeline_Event_Async_End, // Phase = 'e'. + Dart_Timeline_Event_Async_Instant, // Phase = 'n'. + Dart_Timeline_Event_Counter, // Phase = 'C'. + Dart_Timeline_Event_Flow_Begin, // Phase = 's'. + Dart_Timeline_Event_Flow_Step, // Phase = 't'. + Dart_Timeline_Event_Flow_End, // Phase = 'f'. +} Dart_Timeline_Event_Type; + +/** + * Add a timeline event to the embedder stream. + * + * \param label The name of the event. Its lifetime must extend at least until + * Dart_Cleanup. + * \param timestamp0 The first timestamp of the event. + * \param timestamp1_or_async_id The second timestamp of the event or + * the async id. + * \param argument_count The number of argument names and values. + * \param argument_names An array of names of the arguments. The lifetime of the + * names must extend at least until Dart_Cleanup. The array may be reclaimed + * when this call returns. + * \param argument_values An array of values of the arguments. The values and + * the array may be reclaimed when this call returns. + */ +DART_EXPORT void Dart_TimelineEvent(const char* label, + int64_t timestamp0, + int64_t timestamp1_or_async_id, + Dart_Timeline_Event_Type type, + intptr_t argument_count, + const char** argument_names, + const char** argument_values); + +/** + * Associates a name with the current thread. This name will be used to name + * threads in the timeline. Can only be called after a call to Dart_Initialize. + * + * \param name The name of the thread. + */ +DART_EXPORT void Dart_SetThreadName(const char* name); + +typedef struct { + const char* name; + const char* value; +} Dart_TimelineRecorderEvent_Argument; + +#define DART_TIMELINE_RECORDER_CURRENT_VERSION (0x00000001) + +typedef struct { + /* Set to DART_TIMELINE_RECORDER_CURRENT_VERSION */ + int32_t version; + + /* The event's type / phase. */ + Dart_Timeline_Event_Type type; + + /* The event's timestamp according to the same clock as + * Dart_TimelineGetMicros. For a duration event, this is the beginning time. + */ + int64_t timestamp0; + + /* For a duration event, this is the end time. For an async event, this is the + * async id. */ + int64_t timestamp1_or_async_id; + + /* The current isolate of the event, as if by Dart_GetMainPortId, or + * ILLEGAL_PORT if the event had no current isolate. */ + Dart_Port isolate; + + /* The current isolate group of the event, as if by + * Dart_CurrentIsolateGroupId, or ILLEGAL_PORT if the event had no current + * isolate group. */ + Dart_IsolateGroupId isolate_group; + + /* The name / label of the event. */ + const char* label; + + /* The stream / category of the event. */ + const char* stream; + + intptr_t argument_count; + Dart_TimelineRecorderEvent_Argument* arguments; +} Dart_TimelineRecorderEvent; + +/** + * Callback provided by the embedder to handle the completion of timeline + * events. + * + * \param event A timeline event that has just been completed. The VM keeps + * ownership of the event and any field in it (i.e., the embedder should copy + * any values it needs after the callback returns). + */ +typedef void (*Dart_TimelineRecorderCallback)( + Dart_TimelineRecorderEvent* event); + +/** + * Register a `Dart_TimelineRecorderCallback` to be called as timeline events + * are completed. + * + * The callback will be invoked without a current isolate. + * + * The callback will be invoked on the thread completing the event. Because + * `Dart_TimelineEvent` may be called by any thread, the callback may be called + * on any thread. + * + * The callback may be invoked at any time after `Dart_Initialize` is called and + * before `Dart_Cleanup` returns. + * + * If multiple callbacks are registered, only the last callback registered + * will be remembered. Providing a NULL callback will clear the registration + * (i.e., a NULL callback produced a no-op instead of a crash). + * + * Setting a callback is insuffient to receive events through the callback. The + * VM flag `timeline_recorder` must also be set to `callback`. + */ +DART_EXPORT void Dart_SetTimelineRecorderCallback( + Dart_TimelineRecorderCallback callback); + +/* + * ======= + * Metrics + * ======= + */ + +/** + * Return metrics gathered for the VM and individual isolates. + * + * NOTE: Non-heap metrics are not available in PRODUCT builds of Dart. + * Calling the non-heap metric functions on a PRODUCT build might return invalid metrics. + */ +DART_EXPORT int64_t Dart_VMIsolateCountMetric(); // Counter +DART_EXPORT int64_t Dart_VMCurrentRSSMetric(); // Byte +DART_EXPORT int64_t Dart_VMPeakRSSMetric(); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapOldUsedMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapOldUsedMaxMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapOldCapacityMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapOldCapacityMaxMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapOldExternalMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapNewUsedMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapNewUsedMaxMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapNewCapacityMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapNewCapacityMaxMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapNewExternalMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapGlobalUsedMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateGroupHeapGlobalUsedMaxMetric(Dart_IsolateGroup group); // Byte +DART_EXPORT int64_t +Dart_IsolateRunnableLatencyMetric(Dart_Isolate isolate); // Microsecond +DART_EXPORT int64_t +Dart_IsolateRunnableHeapSizeMetric(Dart_Isolate isolate); // Byte + +/* + * ======== + * UserTags + * ======== + */ + +/* + * Gets the current isolate's currently set UserTag instance. + * + * \return The currently set UserTag instance. + */ +DART_EXPORT Dart_Handle Dart_GetCurrentUserTag(); + +/* + * Gets the current isolate's default UserTag instance. + * + * \return The default UserTag with label 'Default' + */ +DART_EXPORT Dart_Handle Dart_GetDefaultUserTag(); + +/* + * Creates a new UserTag instance. + * + * \param label The name of the new UserTag. + * + * \return The newly created UserTag instance or an error handle. + */ +DART_EXPORT Dart_Handle Dart_NewUserTag(const char* label); + +/* + * Updates the current isolate's UserTag to a new value. + * + * \param user_tag The UserTag to be set as the current UserTag. + * + * \return The previously set UserTag instance or an error handle. + */ +DART_EXPORT Dart_Handle Dart_SetCurrentUserTag(Dart_Handle user_tag); + +/* + * Returns the label of a given UserTag instance. + * + * \param user_tag The UserTag from which the label will be retrieved. + * + * \return The UserTag's label. NULL if the user_tag is invalid. The caller is + * responsible for freeing the returned label. + */ +DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_GetUserTagLabel( + Dart_Handle user_tag); + +#endif // RUNTIME_INCLUDE_DART_TOOLS_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/dart_version.h b/experimental/pedometer/src/health_connect/include/dart_version.h new file mode 100644 index 000000000..b3b492439 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/dart_version.h @@ -0,0 +1,16 @@ +/* + * 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. + */ + +#ifndef RUNTIME_INCLUDE_DART_VERSION_H_ +#define RUNTIME_INCLUDE_DART_VERSION_H_ + +// On breaking changes the major version is increased. +// On backwards compatible changes the minor version is increased. +// The versioning covers the symbols exposed in dart_api_dl.h +#define DART_API_DL_MAJOR_VERSION 2 +#define DART_API_DL_MINOR_VERSION 0 + +#endif /* RUNTIME_INCLUDE_DART_VERSION_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/internal/dart_api_dl_impl.h b/experimental/pedometer/src/health_connect/include/internal/dart_api_dl_impl.h new file mode 100644 index 000000000..e4a568931 --- /dev/null +++ b/experimental/pedometer/src/health_connect/include/internal/dart_api_dl_impl.h @@ -0,0 +1,21 @@ +/* + * 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. + */ + +#ifndef RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ +#define RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ + +typedef struct { + const char* name; + void (*function)(void); +} DartApiEntry; + +typedef struct { + const int major; + const int minor; + const DartApiEntry* const functions; +} DartApi; + +#endif /* RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/pedometerHelper.h b/experimental/pedometer/src/pedometerHelper.h new file mode 100644 index 000000000..54ad6f4ee --- /dev/null +++ b/experimental/pedometer/src/pedometerHelper.h @@ -0,0 +1,15 @@ +#import +#import +#import +#import + +#include "dart-sdk/include/dart_api_dl.h" + +@interface PedometerHelper : NSObject + ++ (void) startPedometerWithPort: (Dart_Port) sendPort + pedometer: (CMPedometer*) pedometer + start: (NSDate*) start + end: (NSDate*) end; + +@end diff --git a/experimental/pedometer/src/pedometerHelper.m b/experimental/pedometer/src/pedometerHelper.m new file mode 100644 index 000000000..33cbc7aeb --- /dev/null +++ b/experimental/pedometer/src/pedometerHelper.m @@ -0,0 +1,38 @@ +#import "pedometerHelper.h" +#import +#import +#import +#import + +#include "dart-sdk/include/dart_api_dl.h" + +// Need to import the dart headers to get the definitions Dart_CObject +#include "dart-sdk/include/dart_api_dl.h" + + +// Helper function that takes a pointer to CMPedometer data and converts it to a Dart C Object +static Dart_CObject NSObjectToCObject(CMPedometerData* n) { + Dart_CObject cobj; + cobj.type = Dart_CObject_kInt64; + cobj.value.as_int64 = (int64_t) n; + return cobj; +} + + +@implementation PedometerHelper ++(void)startPedometerWithPort: (Dart_Port) sendPort pedometer: (CMPedometer*) pedometer start: (NSDate*) start end: (NSDate*) end { + + // Start the pedometer + [pedometer queryPedometerDataFromDate:start toDate:end withHandler:^(CMPedometerData *pedometerData, NSError *error) { + if(error == nil){ + pedometerData = [pedometerData retain]; + Dart_CObject data = NSObjectToCObject(pedometerData); + const bool success = Dart_PostCObject_DL(sendPort, &data); + NSAssert(success, @"Couldn't send to Dart@"); + } + else{ + NSLog(@"Error:%@", error); + } + }]; +} +@end diff --git a/experimental/varfont_shader_puzzle/.gitignore b/experimental/varfont_shader_puzzle/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/experimental/varfont_shader_puzzle/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/experimental/varfont_shader_puzzle/.metadata b/experimental/varfont_shader_puzzle/.metadata new file mode 100644 index 000000000..0372c0d84 --- /dev/null +++ b/experimental/varfont_shader_puzzle/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: b938dc13df32cd510844863a66856dd240dc3302 + channel: master + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + - platform: android + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + - platform: ios + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + - platform: linux + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + - platform: macos + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + - platform: web + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + - platform: windows + create_revision: b938dc13df32cd510844863a66856dd240dc3302 + base_revision: b938dc13df32cd510844863a66856dd240dc3302 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/experimental/varfont_shader_puzzle/README.md b/experimental/varfont_shader_puzzle/README.md new file mode 100644 index 000000000..cec255b5c --- /dev/null +++ b/experimental/varfont_shader_puzzle/README.md @@ -0,0 +1,3 @@ +# Type Jam + +A simple typographically-themed puzzle app to explore creative use of variable fonts and shaders in Flutter. diff --git a/null_safety/null_unsafe_app/analysis_options.yaml b/experimental/varfont_shader_puzzle/analysis_options.yaml similarity index 100% rename from null_safety/null_unsafe_app/analysis_options.yaml rename to experimental/varfont_shader_puzzle/analysis_options.yaml diff --git a/experimental/varfont_shader_puzzle/android/.gitignore b/experimental/varfont_shader_puzzle/android/.gitignore new file mode 100644 index 000000000..6f568019d --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/experimental/varfont_shader_puzzle/android/app/build.gradle b/experimental/varfont_shader_puzzle/android/app/build.gradle new file mode 100644 index 000000000..54e8cae96 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.type_jam_github" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml b/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..4873ef591 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/AndroidManifest.xml b/experimental/varfont_shader_puzzle/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c5431455a --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/kotlin/com/example/type_jam_github/MainActivity.kt b/experimental/varfont_shader_puzzle/android/app/src/main/kotlin/com/example/type_jam_github/MainActivity.kt new file mode 100644 index 000000000..f79ea136e --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/main/kotlin/com/example/type_jam_github/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.type_jam_github + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/drawable-v21/launch_background.xml b/experimental/varfont_shader_puzzle/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/drawable/launch_background.xml b/experimental/varfont_shader_puzzle/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..db77bb4b7 Binary files /dev/null and b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..17987b79b Binary files /dev/null and b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..09d439148 Binary files /dev/null and b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..d5f1c8d34 Binary files /dev/null and b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4d6372eeb Binary files /dev/null and b/experimental/varfont_shader_puzzle/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/values-night/styles.xml b/experimental/varfont_shader_puzzle/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/res/values/styles.xml b/experimental/varfont_shader_puzzle/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/profile/AndroidManifest.xml b/experimental/varfont_shader_puzzle/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..4873ef591 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/experimental/varfont_shader_puzzle/android/build.gradle b/experimental/varfont_shader_puzzle/android/build.gradle new file mode 100644 index 000000000..e50c3a02b --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/experimental/varfont_shader_puzzle/android/gradle.properties b/experimental/varfont_shader_puzzle/android/gradle.properties new file mode 100644 index 000000000..94adc3a3f --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/experimental/varfont_shader_puzzle/android/gradle/wrapper/gradle-wrapper.properties b/experimental/varfont_shader_puzzle/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..3c472b99c --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/experimental/varfont_shader_puzzle/android/settings.gradle b/experimental/varfont_shader_puzzle/android/settings.gradle new file mode 100644 index 000000000..44e62bcf0 --- /dev/null +++ b/experimental/varfont_shader_puzzle/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/experimental/varfont_shader_puzzle/assets/fonts/Amstelvar-Roman[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,wdth,wght,opsz].ttf b/experimental/varfont_shader_puzzle/assets/fonts/Amstelvar-Roman[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,wdth,wght,opsz].ttf new file mode 100644 index 000000000..062b4a45a Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/fonts/Amstelvar-Roman[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,wdth,wght,opsz].ttf differ diff --git a/experimental/varfont_shader_puzzle/assets/fonts/Roboto-Bold.ttf b/experimental/varfont_shader_puzzle/assets/fonts/Roboto-Bold.ttf new file mode 100644 index 000000000..43da14d84 Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/fonts/Roboto-Bold.ttf differ diff --git a/experimental/varfont_shader_puzzle/assets/fonts/Roboto-Regular.ttf b/experimental/varfont_shader_puzzle/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 000000000..ddf4bfacb Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/fonts/Roboto-Regular.ttf differ diff --git a/experimental/varfont_shader_puzzle/assets/images/specimen-1-glitch.png b/experimental/varfont_shader_puzzle/assets/images/specimen-1-glitch.png new file mode 100644 index 000000000..3e4f2bbb3 Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/images/specimen-1-glitch.png differ diff --git a/experimental/varfont_shader_puzzle/assets/images/specimen-1.png b/experimental/varfont_shader_puzzle/assets/images/specimen-1.png new file mode 100644 index 000000000..9914ed907 Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/images/specimen-1.png differ diff --git a/experimental/varfont_shader_puzzle/assets/images/specimen-2.png b/experimental/varfont_shader_puzzle/assets/images/specimen-2.png new file mode 100644 index 000000000..01682fb93 Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/images/specimen-2.png differ diff --git a/experimental/varfont_shader_puzzle/assets/images/wallpaper1.png b/experimental/varfont_shader_puzzle/assets/images/wallpaper1.png new file mode 100644 index 000000000..b7d18502b Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/images/wallpaper1.png differ diff --git a/experimental/varfont_shader_puzzle/assets/images/wallpaper2.png b/experimental/varfont_shader_puzzle/assets/images/wallpaper2.png new file mode 100644 index 000000000..01c482730 Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/images/wallpaper2.png differ diff --git a/experimental/varfont_shader_puzzle/assets/images/wallpaper3.png b/experimental/varfont_shader_puzzle/assets/images/wallpaper3.png new file mode 100644 index 000000000..6f4af438c Binary files /dev/null and b/experimental/varfont_shader_puzzle/assets/images/wallpaper3.png differ diff --git a/experimental/varfont_shader_puzzle/ios/.gitignore b/experimental/varfont_shader_puzzle/ios/.gitignore new file mode 100644 index 000000000..7a7f9873a --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/experimental/varfont_shader_puzzle/ios/Flutter/AppFrameworkInfo.plist b/experimental/varfont_shader_puzzle/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..9625e105d --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/experimental/varfont_shader_puzzle/ios/Flutter/Debug.xcconfig b/experimental/varfont_shader_puzzle/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..ec97fc6f3 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/experimental/varfont_shader_puzzle/ios/Flutter/Release.xcconfig b/experimental/varfont_shader_puzzle/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..c4855bfe2 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/experimental/varfont_shader_puzzle/ios/Podfile b/experimental/varfont_shader_puzzle/ios/Podfile new file mode 100644 index 000000000..fdcc671eb --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.pbxproj b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..bef490c99 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,723 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 57600031B42DCD6AF63CDE0B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EC4424E400A59A8E69D1669 /* Pods_Runner.framework */; }; + 6A4FE99498803ED2C0657E40 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2D52775AA04F31BB28C1528 /* Pods_RunnerTests.framework */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0216F236A1CB3538AAF54499 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 16C278FB76AC8CA0A1B9F53C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 2DC679FDBB1D74022B3A8AAB /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4538BA127B499A5077B3DB57 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 59466897B91FAC54FB78DE2C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9EC4424E400A59A8E69D1669 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A2D52775AA04F31BB28C1528 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C5A55D4E52A21B57E8836CE7 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 57600031B42DCD6AF63CDE0B /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D0BE81C82F45E53ACCC734BC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A4FE99498803ED2C0657E40 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 5129060FE3FA8214C53D99E4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9EC4424E400A59A8E69D1669 /* Pods_Runner.framework */, + A2D52775AA04F31BB28C1528 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6AB78BEFECAF31F08BD66F27 /* Pods */ = { + isa = PBXGroup; + children = ( + 4538BA127B499A5077B3DB57 /* Pods-Runner.debug.xcconfig */, + 59466897B91FAC54FB78DE2C /* Pods-Runner.release.xcconfig */, + 0216F236A1CB3538AAF54499 /* Pods-Runner.profile.xcconfig */, + 16C278FB76AC8CA0A1B9F53C /* Pods-RunnerTests.debug.xcconfig */, + C5A55D4E52A21B57E8836CE7 /* Pods-RunnerTests.release.xcconfig */, + 2DC679FDBB1D74022B3A8AAB /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 6AB78BEFECAF31F08BD66F27 /* Pods */, + 5129060FE3FA8214C53D99E4 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 15B3F777D583A1AB4057956A /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + D0BE81C82F45E53ACCC734BC /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 57CD11B33734046FDAD63F9C /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + BCE75509FAF8D589BBA11536 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 15B3F777D583A1AB4057956A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 57CD11B33734046FDAD63F9C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + BCE75509FAF8D589BBA11536 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 16C278FB76AC8CA0A1B9F53C /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C5A55D4E52A21B57E8836CE7 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2DC679FDBB1D74022B3A8AAB /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..e42adcb34 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/null_safety/null_unsafe_app/ios/Runner.xcworkspace/contents.xcworkspacedata b/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from null_safety/null_unsafe_app/ios/Runner.xcworkspace/contents.xcworkspacedata rename to experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner/AppDelegate.swift b/experimental/varfont_shader_puzzle/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..70693e4a8 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 000000000..dc9ada472 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 000000000..7353c41ec Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 000000000..6ed2d933e Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 000000000..4cd7b0099 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 000000000..fe730945a Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 000000000..321773cd8 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 000000000..502f463a9 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 000000000..e9f5fea27 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 000000000..84ac32ae7 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 000000000..8953cba09 Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 000000000..0467bf12a Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000..0bedcf2fd --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Base.lproj/LaunchScreen.storyboard b/experimental/varfont_shader_puzzle/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Base.lproj/Main.storyboard b/experimental/varfont_shader_puzzle/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Info.plist b/experimental/varfont_shader_puzzle/ios/Runner/Info.plist new file mode 100644 index 000000000..6ff58b48e --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Type Jam Github + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + type_jam_github + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/experimental/varfont_shader_puzzle/ios/Runner/Runner-Bridging-Header.h b/experimental/varfont_shader_puzzle/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/experimental/varfont_shader_puzzle/ios/RunnerTests/RunnerTests.swift b/experimental/varfont_shader_puzzle/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/experimental/varfont_shader_puzzle/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/experimental/varfont_shader_puzzle/lib/components/components.dart b/experimental/varfont_shader_puzzle/lib/components/components.dart new file mode 100644 index 000000000..f6974e9d9 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/components/components.dart @@ -0,0 +1,9 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +export 'fragment_shaded.dart'; +export 'lightboxed_panel.dart'; +export 'rotator_puzzle.dart'; +export 'wonky_anim_palette.dart'; +export 'wonky_char.dart'; diff --git a/experimental/varfont_shader_puzzle/lib/components/fragment_shaded.dart b/experimental/varfont_shader_puzzle/lib/components/fragment_shaded.dart new file mode 100644 index 000000000..7f19f60fc --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/components/fragment_shaded.dart @@ -0,0 +1,271 @@ +// Copyright 2023 The Flutter team. 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:ui' as ui; + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; + +class FragmentShaded extends StatefulWidget { + final Widget child; + final String shaderName; + final int shaderDuration; + static const int dampenDuration = 1000; + static final Map fragmentPrograms = {}; + static const List fragmentProgramNames = [ + 'nothing', + 'bw_split', + 'color_split', + 'row_offset', + 'wavy_circ', + 'wavy', + 'wavy2' + ]; + + const FragmentShaded({ + required this.shaderName, + required this.shaderDuration, + required this.child, + super.key, + }); + + @override + State createState() => FragmentShadedState(); +} + +class FragmentShadedState extends State + with TickerProviderStateMixin { + late final AnimationController _controller; + late final Animation _dampenAnimation; + late final Animation _dampenCurve; + late final AnimationController _dampenController; + late AnimatingSamplerBuilder builder; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(milliseconds: widget.shaderDuration), + )..repeat(reverse: false); + _dampenController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: FragmentShaded.dampenDuration), + ); + _dampenCurve = CurvedAnimation( + parent: _dampenController, + curve: Curves.easeInOut, + ); + _dampenAnimation = + Tween(begin: 1.0, end: 0.0).animate(_dampenCurve); + initializeFragmentProgramsAndBuilder(); + } + + Future initializeFragmentProgramsAndBuilder() async { + if (FragmentShaded.fragmentPrograms.isEmpty) { + for (String s in FragmentShaded.fragmentProgramNames) { + FragmentShaded.fragmentPrograms[s] = + await ui.FragmentProgram.fromAsset('shaders/$s.frag'); + } + } + builder = AnimatingSamplerBuilder(_controller, _dampenAnimation, + FragmentShaded.fragmentPrograms[widget.shaderName]!.fragmentShader()); + setState(() {}); + } + + @override + void dispose() { + _controller.dispose(); + _dampenController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (null == FragmentShaded.fragmentPrograms[widget.shaderName]) { + setState(() {}); + return const SizedBox( + width: 0, + height: 0, + ); + } + return Transform.scale( + scale: 0.5, + child: ShaderSamplerBuilder( + builder, + child: widget.child, + ), + ); + } + + void startDampening() { + _dampenController.forward(); + } +} + +class AnimatingSamplerBuilder extends SamplerBuilder { + AnimatingSamplerBuilder( + this.animation, this.dampenAnimation, this.fragmentShader) { + animation.addListener(notifyListeners); + dampenAnimation.addListener(notifyListeners); + } + + final Animation animation; + final Animation dampenAnimation; + + final ui.FragmentShader fragmentShader; + + @override + void paint(ui.Image image, Size size, ui.Canvas canvas) { + // animation + fragmentShader.setFloat(0, animation.value); + // width + fragmentShader.setFloat(1, size.width); + // height + fragmentShader.setFloat(2, size.height); + // dampener + fragmentShader.setFloat(3, dampenAnimation.value); + // sampler + fragmentShader.setImageSampler(0, image); + + canvas.drawRect(Offset.zero & size, Paint()..shader = fragmentShader); + } +} + +abstract class SamplerBuilder extends ChangeNotifier { + void paint(ui.Image image, Size size, ui.Canvas canvas); +} + +class ShaderSamplerBuilder extends StatelessWidget { + const ShaderSamplerBuilder(this.builder, {required this.child, super.key}); + + final SamplerBuilder builder; + final Widget child; + + @override + Widget build(BuildContext context) { + return RepaintBoundary( + child: _ShaderSamplerImpl( + builder, + child: child, + )); + } +} + +class _ShaderSamplerImpl extends SingleChildRenderObjectWidget { + const _ShaderSamplerImpl(this.builder, {super.child}); + + final SamplerBuilder builder; + + @override + RenderObject createRenderObject(BuildContext context) { + return _RenderShaderSamplerBuilderWidget( + devicePixelRatio: MediaQuery.of(context).devicePixelRatio, + builder: builder, + ); + } + + @override + void updateRenderObject( + BuildContext context, covariant RenderObject renderObject) { + (renderObject as _RenderShaderSamplerBuilderWidget) + ..devicePixelRatio = MediaQuery.of(context).devicePixelRatio + ..builder = builder; + } +} + +// A render object that conditionally converts its child into a [ui.Image] +// and then paints it in place of the child. +class _RenderShaderSamplerBuilderWidget extends RenderProxyBox { + // Create a new [_RenderSnapshotWidget]. + _RenderShaderSamplerBuilderWidget({ + required double devicePixelRatio, + required SamplerBuilder builder, + }) : _devicePixelRatio = devicePixelRatio, + _builder = builder; + + /// The device pixel ratio used to create the child image. + double get devicePixelRatio => _devicePixelRatio; + double _devicePixelRatio; + set devicePixelRatio(double value) { + if (value == devicePixelRatio) { + return; + } + _devicePixelRatio = value; + if (_childRaster == null) { + return; + } else { + _childRaster?.dispose(); + _childRaster = null; + markNeedsPaint(); + } + } + + /// The painter used to paint the child snapshot or child widgets. + SamplerBuilder get builder => _builder; + SamplerBuilder _builder; + set builder(SamplerBuilder value) { + if (value == builder) { + return; + } + builder.removeListener(markNeedsPaint); + _builder = value; + builder.addListener(markNeedsPaint); + markNeedsPaint(); + } + + ui.Image? _childRaster; + + @override + void attach(PipelineOwner owner) { + builder.addListener(markNeedsPaint); + super.attach(owner); + } + + @override + void detach() { + _childRaster?.dispose(); + _childRaster = null; + builder.removeListener(markNeedsPaint); + super.detach(); + } + + @override + void dispose() { + builder.removeListener(markNeedsPaint); + _childRaster?.dispose(); + _childRaster = null; + super.dispose(); + } + + // Paint [child] with this painting context, then convert to a raster and detach all + // children from this layer. + ui.Image? _paintAndDetachToImage() { + final OffsetLayer offsetLayer = OffsetLayer(); + final PaintingContext context = + PaintingContext(offsetLayer, Offset.zero & size); + super.paint(context, Offset.zero); + // This ignore is here because this method is protected by the `PaintingContext`. Adding a new + // method that performs the work of `_paintAndDetachToImage` would avoid the need for this, but + // that would conflict with our goals of minimizing painting context. + // ignore: invalid_use_of_protected_member + context.stopRecordingIfNeeded(); + final ui.Image image = offsetLayer.toImageSync(Offset.zero & size, + pixelRatio: devicePixelRatio); + offsetLayer.dispose(); + return image; + } + + @override + void paint(PaintingContext context, Offset offset) { + if (size.isEmpty) { + _childRaster?.dispose(); + _childRaster = null; + return; + } + _childRaster?.dispose(); + _childRaster = _paintAndDetachToImage(); + builder.paint(_childRaster!, size, context.canvas); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/components/lightboxed_panel.dart b/experimental/varfont_shader_puzzle/lib/components/lightboxed_panel.dart new file mode 100644 index 000000000..f02b5845d --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/components/lightboxed_panel.dart @@ -0,0 +1,141 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class LightboxedPanel extends StatefulWidget { + final PageConfig pageConfig; + final List content; + final double width = 300; + final Function? onDismiss; + final bool fadeOnDismiss; + final int? autoDismissAfter; + final bool buildButton; + final Color lightBoxBgColor; + final Color cardBgColor; + + const LightboxedPanel({ + super.key, + required this.pageConfig, + required this.content, + this.onDismiss, + this.fadeOnDismiss = true, + this.autoDismissAfter, + this.buildButton = true, + this.lightBoxBgColor = const Color.fromARGB(200, 255, 255, 255), + this.cardBgColor = Colors.white, + }); + + @override + State createState() => _LightboxedPanelState(); +} + +class _LightboxedPanelState extends State { + bool _fading = false; + bool _show = true; + late int _fadeOutDur = 200; + + @override + void initState() { + _fadeOutDur = widget.fadeOnDismiss ? _fadeOutDur : 0; + if (null != widget.autoDismissAfter) { + _fadeOutDur = 0; + Future.delayed( + Duration(milliseconds: widget.autoDismissAfter!), + handleDismiss, + ); + } + super.initState(); + } + + void handleDismiss() { + if (widget.fadeOnDismiss) { + setState(() { + _fading = true; + }); + } + Future.delayed(Duration(milliseconds: _fadeOutDur), () { + setState(() { + if (widget.fadeOnDismiss) { + _show = false; + } + if (null != widget.onDismiss) { + widget.onDismiss!(); + } + }); + }); + } + + List buttonComponents() { + return [ + Column( + children: [ + const SizedBox( + height: 8, + ), + TextButton( + onPressed: handleDismiss, + style: ButtonStyles.style(), + child: Text( + 'OK', + style: TextStyles.bodyStyle() + .copyWith(color: Colors.white, height: 1.2), + ), + ), + ], + ), + ]; + } + + @override + Widget build(BuildContext context) { + if (_show) { + return AnimatedOpacity( + opacity: _fading ? 0 : 1, + curve: Curves.easeOut, + duration: Duration(milliseconds: _fadeOutDur), + child: DecoratedBox( + decoration: BoxDecoration(color: widget.lightBoxBgColor), + child: Center( + child: SizedBox( + width: widget.width, + child: DecoratedBox( + decoration: BoxDecoration( + color: widget.cardBgColor, + border: Border.all( + color: const Color.fromARGB(255, 200, 200, 200), + width: 1.0, + ), + boxShadow: const [ + BoxShadow( + color: Color.fromARGB(30, 0, 0, 0), + offset: Offset.zero, + blurRadius: 4.0, + spreadRadius: 2.0), + ], + borderRadius: const BorderRadius.all(Radius.circular(10.0)), + ), + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: widget.content + + (widget.buildButton ? buttonComponents() : []), + ), + ), + ), + ), + ), + ), + ); + } + return const SizedBox( + width: 0, + height: 0, + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/components/rotator_puzzle.dart b/experimental/varfont_shader_puzzle/lib/components/rotator_puzzle.dart new file mode 100644 index 000000000..0a8fc0e4b --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/components/rotator_puzzle.dart @@ -0,0 +1,430 @@ +// Copyright 2023 The Flutter team. 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:math'; +import 'dart:ui' as ui; + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; + +import '../model/puzzle_model.dart'; +import '../page_content/pages_flow.dart'; +import 'components.dart'; + +class RotatorPuzzle extends StatefulWidget { + final PageConfig pageConfig; + final int numTiles; + final int puzzleNum; + final String shaderKey; + final int shaderDuration; + + final String tileShadedString; + final double tileShadedStringSize; + final EdgeInsets tileShadedStringPadding; + final int tileShadedStringAnimDuration; + final List tileShadedStringAnimSettings; + final double tileScaleModifier; + + const RotatorPuzzle({ + super.key, + required this.pageConfig, + required this.numTiles, + required this.puzzleNum, + required this.shaderKey, + required this.shaderDuration, + required this.tileShadedString, + required this.tileShadedStringSize, + required this.tileShadedStringPadding, + required this.tileShadedStringAnimDuration, + this.tileShadedStringAnimSettings = const [], + this.tileScaleModifier = 1.0, + }); + + @override + State createState() => RotatorPuzzleState(); +} + +class RotatorPuzzleState extends State + with TickerProviderStateMixin { + late PuzzleModel puzzleModel; + bool solved = false; + late final AnimationController animationController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 1000), + ); + late final CurvedAnimation animationCurve = CurvedAnimation( + parent: animationController, + curve: const Interval( + 0.2, + 0.45, + curve: Curves.easeOut, + ), + ); + late Animation opacAnimation = + Tween(begin: 0.4, end: 1.0).animate(animationCurve) + ..addListener(() { + setState(() {}); + }); + + List> tileKeys = []; + GlobalKey shadedWidgetStackHackStateKey = GlobalKey(); + GlobalKey shadedWidgetRepaintBoundaryKey = GlobalKey(); + GlobalKey tileBgWonkyCharKey = GlobalKey(); + ui.Image? shadedImg; + + @override + void initState() { + for (int i = 0; i < widget.numTiles; i++) { + tileKeys.add(GlobalKey()); + } + puzzleModel = PuzzleModel( + dim: widget.numTiles, + ); //TODO check if correct; correlate dim and numTiles; probably get rid of numTiles + generateTiles(); + shuffle(); + super.initState(); + } + + List generateTiles() { + // TODO move to build? + List tiles = []; + int dim = sqrt(widget.numTiles).round(); + for (int i = 0; i < widget.numTiles; i++) { + RotatorPuzzleTile tile = RotatorPuzzleTile( + key: tileKeys[i], + tileID: i, + row: (i / dim).floor(), + col: i % dim, + parentState: this, + shaderKey: widget.shaderKey, + shaderDuration: widget.shaderDuration, + tileShadedString: widget.tileShadedString, + tileShadedStringSize: widget.tileShadedStringSize, + tileShadedStringPadding: widget.tileShadedStringPadding, + animationSettings: widget.tileShadedStringAnimSettings, + tileShadedStringAnimDuration: widget.tileShadedStringAnimDuration, + tileScaleModifier: widget.tileScaleModifier, + ); + tiles.add(tile); + } + return tiles; + } + + void handlePointerDown({required int tileID}) { + puzzleModel.rotateTile(tileID); + if (puzzleModel.allRotationsCorrect()) { + handleSolved(); + } + } + + void handleSolved() { + animationController.addStatusListener((status) { + solved = true; + for (GlobalKey k in tileKeys) { + if (null != k.currentState && k.currentState!.mounted) { + startDampening(); + tileBgWonkyCharKey.currentState!.stopAnimation(); + } + } + if (status == AnimationStatus.completed) { + Future.delayed( + const Duration(milliseconds: FragmentShaded.dampenDuration + 250), + () { + widget.pageConfig.pageController.nextPage( + duration: + const Duration(milliseconds: PagesFlow.pageScrollDuration), + curve: Curves.easeOut, + ); + }); + } + }); + animationController.forward(); + } + + void shuffle() { + Random rng = Random(0xC00010FF); + for (int i = 0; i < widget.numTiles; i++) { + int rando = rng.nextInt(3); + puzzleModel.setTileStatus(i, rando); + if (puzzleModel.allRotationsCorrect()) { + // fallback to prevent starting on solved puzzle + puzzleModel.setTileStatus(0, 1); + } + } + } + + double tileSize() { + return widget.pageConfig.puzzleSize / sqrt(widget.numTiles); + } + + List tileCoords({required int row, required int col}) { + return [col * tileSize(), row * tileSize()]; + } + + void setImageFromRepaintBoundary(GlobalKey which) { + final BuildContext? context = which.currentContext; + if (null != context) { + final RenderRepaintBoundary boundary = + context.findRenderObject()! as RenderRepaintBoundary; + final ui.Image img = boundary.toImageSync(); + if (mounted) { + setState(() { + shadedImg = img; + }); + } + } + } + + void startDampening() { + if (null != shadedWidgetStackHackStateKey.currentState && + shadedWidgetStackHackStateKey.currentState!.mounted) { + shadedWidgetStackHackStateKey.currentState!.startDampening(); + } + } + + @override + Widget build(BuildContext context) { + // TODO fix widget implementation to remove the need for this hack + // to force a setState rebuild + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + setState(() {}); + } + }); + // end hack ---------------- + setImageFromRepaintBoundary(shadedWidgetRepaintBoundaryKey); + return Center( + child: SizedBox( + width: widget.pageConfig.puzzleSize, + height: widget.pageConfig.puzzleSize, + child: Opacity( + opacity: opacAnimation.value, + child: Stack( + children: [ + Positioned( + left: -9999, + top: -9999, + child: RepaintBoundary( + key: shadedWidgetRepaintBoundaryKey, + child: SizedBox( + width: widget.pageConfig.puzzleSize * 4, + height: widget.pageConfig.puzzleSize * 4, + child: Center( + child: FragmentShaded( + key: shadedWidgetStackHackStateKey, + shaderName: widget.shaderKey, + shaderDuration: widget.shaderDuration, + child: Padding( + padding: widget.tileShadedStringPadding, + child: WonkyChar( + key: tileBgWonkyCharKey, + text: widget.tileShadedString, + size: widget.tileShadedStringSize, + animDurationMillis: + widget.tileShadedStringAnimDuration, + animationSettings: + widget.tileShadedStringAnimSettings, + ), + ), + ), + ), + ), + ), + ), + ] + + generateTiles(), + ), + ), + ), + ); + } +} + +//////////////////////////////////////////////////////// + +class RotatorPuzzleTile extends StatefulWidget { + final int tileID; + final RotatorPuzzleState parentState; + final String shaderKey; + final int shaderDuration; + final String tileShadedString; + final double tileShadedStringSize; + final EdgeInsets tileShadedStringPadding; + final int tileShadedStringAnimDuration; + final List animationSettings; + final double tileScaleModifier; + + // TODO get row/col out into model + final int row; + final int col; + + RotatorPuzzleTile({ + super.key, + required this.tileID, + required this.row, + required this.col, + required this.parentState, + required this.shaderKey, + required this.shaderDuration, + required this.tileShadedString, + required this.tileShadedStringSize, + required this.tileShadedStringPadding, + required this.animationSettings, + required this.tileShadedStringAnimDuration, + required this.tileScaleModifier, + }); + + final State tileState = RotatorPuzzleTileState(); + + @override + State createState() => RotatorPuzzleTileState(); +} + +class RotatorPuzzleTileState extends State + with TickerProviderStateMixin { + double touchedOpac = 0.0; + Duration touchedOpacDur = const Duration(milliseconds: 50); + late final AnimationController animationController = AnimationController( + vsync: this, + duration: const Duration( + milliseconds: 100, + ), + ); + late final CurvedAnimation animationCurve = CurvedAnimation( + parent: animationController, + curve: Curves.easeOut, + ); + late Animation animation; + + @override + void initState() { + super.initState(); + animation = Tween( + // initialize animation to starting point + begin: currentStatus() * pi * 0.5, + end: currentStatus() * pi * 0.5, + ).animate(animationController); + } + + @override + Widget build(BuildContext context) { + // TODO fix widget implementation to remove the need for this hack + // to force a setState rebuild + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + setState(() {}); + } + }); + // end hack ------------------------------ + List coords = + widget.parentState.tileCoords(row: widget.row, col: widget.col); + double zeroPoint = widget.parentState.widget.pageConfig.puzzleSize * .5 - + widget.parentState.tileSize() * 0.5; + + return Stack( + children: [ + Stack( + children: [ + Positioned( + left: coords[0], + top: coords[1], + child: Transform( + transform: Matrix4.rotationZ(animation.value), + alignment: Alignment.center, + child: GestureDetector( + onTap: handlePointerDown, + child: ClipRect( + child: SizedBox( + width: widget.parentState.tileSize(), + height: widget.parentState.tileSize(), + child: OverflowBox( + maxHeight: + widget.parentState.widget.pageConfig.puzzleSize, + maxWidth: + widget.parentState.widget.pageConfig.puzzleSize, + child: Transform.translate( + offset: Offset( + zeroPoint - + widget.col * widget.parentState.tileSize(), + zeroPoint - + widget.row * widget.parentState.tileSize(), + ), + child: SizedBox( + width: + widget.parentState.widget.pageConfig.puzzleSize, + height: + widget.parentState.widget.pageConfig.puzzleSize, + child: Transform.scale( + scale: widget.tileScaleModifier, + child: RawImage( + image: widget.parentState.shadedImg, + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + // puzzle tile overlay fades in/out on tap, to indicate touched tile + Positioned( + left: coords[0], + top: coords[1], + child: IgnorePointer( + child: AnimatedOpacity( + opacity: touchedOpac, + duration: touchedOpacDur, + onEnd: () { + if (touchedOpac == 1.0) { + touchedOpac = 0.0; + touchedOpacDur = const Duration(milliseconds: 300); + setState(() {}); + } + }, + child: DecoratedBox( + decoration: const BoxDecoration( + color: Color.fromARGB(120, 0, 0, 0)), + child: SizedBox( + width: widget.parentState.tileSize(), + height: widget.parentState.tileSize(), + ), + ), + ), + ), + ), + ], + ), + ], + ); + } + + void handlePointerDown() { + if (!widget.parentState.solved) { + int oldStatus = currentStatus(); + widget.parentState.handlePointerDown(tileID: widget.tileID); + touchedOpac = 1.0; + touchedOpacDur = const Duration(milliseconds: 100); + rotateTile(oldStatus: oldStatus); + setState(() {}); + } + } + + int currentStatus() { + return widget.parentState.puzzleModel.getTileStatus(widget.tileID); + } + + void rotateTile({required int oldStatus}) { + animation = Tween( + begin: oldStatus * pi * 0.5, + end: currentStatus() * pi * 0.5, + ).animate(animationController) + ..addListener(() { + setState(() {}); + }); + animationController.reset(); + animationController.forward(); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/components/wonky_anim_palette.dart b/experimental/varfont_shader_puzzle/lib/components/wonky_anim_palette.dart new file mode 100644 index 000000000..fab79ac1d --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/components/wonky_anim_palette.dart @@ -0,0 +1,334 @@ +// Copyright 2023 The Flutter team. 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:math'; +import 'package:flutter/material.dart'; +import '../components/components.dart'; + +// WonkyAnimPalette class is meant to be used with WonkyChar +// to create animations based on variable font settings (aka 'axes'), +// and a few basic settings like scale, rotation, etc. +// The choice of variable font axes to implement in this class and +// default min/max values for variable font axes are hard-coded +// for Amstelvar font, packaged and used in this project. +// Other variable fonts will have different available axes and min/max values. +// +// See articles on variable fonts at https://fonts.google.com/knowledge/topics/variable_fonts +// See a list of variable fonts in the Google Fonts lineup, along with +// an enumeration of variable font axes at https://fonts.google.com/variablefonts + +class WonkyAnimPalette { + const WonkyAnimPalette({ + Key? key, + }); + static const Curve defaultCurve = Curves.easeInOut; + + // basic (settings unrelated to variable font) + static WonkyAnimSetting scale({ + double from = 1, + double to = 2, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'basic', + property: 'scale', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting offsetX({ + double from = -50, + double to = 50, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'basic', + property: 'offsetX', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting offsetY({ + double from = -50, + double to = 50, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'basic', + property: 'offsetY', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting rotation({ + double from = -pi, + double to = pi, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'basic', + property: 'rotation', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting color({ + Color from = Colors.blue, + Color to = Colors.red, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'basic', + property: 'color', + fromTo: RangeColor(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + // font variants (variable font settings) + static WonkyAnimSetting opticalSize({ + double from = 8, + double to = 144, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'opsz', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting weight({ + double from = 100, + double to = 1000, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'wght', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting grade({ + double from = -300, + double to = 500, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'GRAD', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting slant({ + double from = -10, + double to = 0, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'slnt', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting width({ + double from = 50, + double to = 125, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'wdth', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting thickStroke({ + double from = 18, + double to = 263, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'XOPQ', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting thinStroke({ + double from = 15, + double to = 132, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'YOPQ', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting counterWd({ + double from = 324, + double to = 640, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'XTRA', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting upperCaseHt({ + double from = 500, + double to = 1000, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'YTUC', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting lowerCaseHt({ + double from = 420, + double to = 570, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'YTLC', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting ascenderHt({ + double from = 500, + double to = 983, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'YTAS', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting descenderDepth({ + double from = -500, + double to = -138, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'YTDE', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } + + static WonkyAnimSetting figureHt({ + double from = 425, + double to = 1000, + double startAt = 0, + double endAt = 1, + Curve curve = defaultCurve, + }) { + return WonkyAnimSetting( + type: 'fv', + property: 'YTFI', + fromTo: RangeDbl(from: from, to: to), + startAt: startAt, + endAt: endAt, + curve: curve, + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/components/wonky_char.dart b/experimental/varfont_shader_puzzle/lib/components/wonky_char.dart new file mode 100644 index 000000000..71a7bba2f --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/components/wonky_char.dart @@ -0,0 +1,229 @@ +// Copyright 2023 The Flutter team. 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:ui'; + +import 'package:flutter/foundation.dart' show kDebugMode; +import 'package:flutter/material.dart'; + +class WonkyChar extends StatefulWidget { + final String text; + final double size; + final double baseRotation; + final int animDurationMillis; + final List animationSettings; + const WonkyChar({ + super.key, + required this.text, + required this.size, + this.baseRotation = 0, + this.animDurationMillis = 1000, + this.animationSettings = const [], + }); + + @override + State createState() => WonkyCharState(); +} + +class WonkyCharState extends State + with SingleTickerProviderStateMixin { + bool loopingAnimation = true; + late AnimationController _animController; + final List> _curves = []; + late final List _fvAnimations = []; + final List _fvAxes = []; + // default curve and animations in case user sets nothing for them + late final defaultCurve = CurvedAnimation( + parent: _animController, + curve: const Interval(0, 1, curve: Curves.linear)); + late Animation _scaleAnimation = + Tween(begin: 1, end: 1).animate(defaultCurve); + late Animation _offsetXAnimation = + Tween(begin: 0, end: 0).animate(defaultCurve); + late Animation _offsetYAnimation = + Tween(begin: 0, end: 0).animate(defaultCurve); + late Animation _rotationAnimation = + Tween(begin: 0, end: 0).animate(defaultCurve); + late Animation _colorAnimation = + ColorTween(begin: Colors.black, end: Colors.black).animate(defaultCurve); + + @override + void initState() { + super.initState(); + initAnimations(widget.animationSettings); + _animController + ..addListener(() { + setState(() {}); + }) + ..addStatusListener((status) { + if (status == AnimationStatus.completed && loopingAnimation) { + _animController.reverse(); + } else if (status == AnimationStatus.dismissed && loopingAnimation) { + _animController.forward(); + } + }); + _animController.forward(); + } + + @override + void dispose() { + _animController.dispose(); + super.dispose(); + } + + void stopAnimation() { + _animController.stop(); + } + + @override + Widget build(BuildContext context) { + List fontVariations = []; + for (int i = 0; i < _fvAxes.length; i++) { + fontVariations + .add(FontVariation(_fvAxes[i], _fvAnimations[i].value as double)); + } + return Transform( + alignment: Alignment.center, + transform: Matrix4.translationValues(_offsetXAnimation.value as double, + _offsetYAnimation.value as double, 0) + ..scale(_scaleAnimation.value) + ..rotateZ(widget.baseRotation + (_rotationAnimation.value as double)), + child: IgnorePointer( + child: Text( + widget.text, + textAlign: TextAlign.center, + style: TextStyle( + color: _colorAnimation.value as Color?, + fontFamily: 'Amstelvar', + fontSize: widget.size, + fontVariations: fontVariations, + ), + ), + ), + ); + } + + void initAnimations(List settings) { + _animController = AnimationController( + vsync: this, + duration: Duration(milliseconds: widget.animDurationMillis), + ); + for (WonkyAnimSetting s in settings) { + final curve = CurvedAnimation( + parent: _animController, + curve: Interval(s.startAt, s.endAt, curve: s.curve), + ); + late Animation animation; + if (s.property == 'color') { + animation = ColorTween( + begin: s.fromTo.fromValue() as Color?, + end: s.fromTo.toValue() as Color?) + .animate(curve); + } else { + animation = Tween( + begin: s.fromTo.fromValue() as double, + end: s.fromTo.toValue() as double) + .animate(curve); + } + if (s.type == 'fv') { + _fvAxes.add(s.property); + _fvAnimations.add(animation); + } else if (s.type == 'basic') { + switch (s.property) { + case 'scale': + { + _scaleAnimation = animation; + } + break; + case 'rotation': + { + _rotationAnimation = animation; + } + break; + case 'offsetX': + { + _offsetXAnimation = animation; + } + break; + case 'offsetY': + { + _offsetYAnimation = animation; + } + break; + case 'color': + { + _colorAnimation = animation; + } + break; + default: + { + if (kDebugMode) { + print( + '**ERROR** unrecognized property to animate: ${s.property}'); + } + } + break; + } + } + // save refs to all curves just to persist in mem, don't need to touch them again + _curves.add(curve); + } + } +} + +abstract class WCRange { + WCRange(); + T fromValue(); + T toValue(); +} + +class RangeColor implements WCRange { + Color from; + Color to; + RangeColor({required this.from, required this.to}); + @override + Color fromValue() { + return from; + } + + @override + Color toValue() { + return to; + } +} + +class RangeDbl implements WCRange { + double from; + double to; + + RangeDbl({required this.from, required this.to}); + + @override + double fromValue() { + return from; + } + + @override + double toValue() { + return to; + } +} + +class WonkyAnimSetting { + // just the animation + String type; // 'fv' for fontVariation, 'basic' for everything else + String property; //font variation axis, or 'size'/'rotation'/etc. + WCRange fromTo; + double startAt; // 0 to 1 rel to controller + double endAt; // same as start + Curve curve; + WonkyAnimSetting({ + required this.type, + required this.property, + required this.fromTo, + required this.startAt, + required this.endAt, + required this.curve, + }); +} diff --git a/experimental/varfont_shader_puzzle/lib/main.dart b/experimental/varfont_shader_puzzle/lib/main.dart new file mode 100644 index 000000000..2cf2bb6ef --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/main.dart @@ -0,0 +1,28 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +import 'package:flutter/material.dart'; +import '../page_content/pages_flow.dart'; + +void main() { + runApp(const TypePuzzle()); +} + +class TypePuzzle extends StatelessWidget { + const TypePuzzle({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + title: 'Type Jam', + theme: ThemeData( + primarySwatch: Colors.grey, + ), + home: const Scaffold( + appBar: null, + body: PagesFlow(), + ), + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/model/puzzle_model.dart b/experimental/varfont_shader_puzzle/lib/model/puzzle_model.dart new file mode 100644 index 000000000..f1dfd6c7b --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/model/puzzle_model.dart @@ -0,0 +1,50 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +class PuzzleModel { + final int dim; // num tiles in any one dir; dim x dim board + + // 2d array like a board + // x is the tileID and its position in the array mirrors the board + List> positions = [[]]; + + // rotation states, where index == tileID + // x is num of CCW rotations off from correct (x % 4 == 0 indicates correct) + List status = []; + + PuzzleModel({required this.dim}) { + for (int i = 0; i < dim; i++) { + if (positions[positions.length - 1].length == dim) { + positions.add([]); + } + positions[positions.length - 1].add(i); + status.add(0); + } + } + + bool allRotationsCorrect() { + for (int i = 0; i < status.length; i++) { + if (status[i] % 4 != 0) { + return false; + } + } + return true; + } + + void setTileStatus(int tileID, int newStatus) { + status[tileID] = newStatus; + } + + int getTileStatus(int tileID) { + return status[tileID]; + } + + void rotateTile(int tileID) { + status[tileID]--; + } + + int getRotationOfTile(int tileID) { + return status[tileID]; + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/page_ascender_descender.dart b/experimental/varfont_shader_puzzle/lib/page_content/page_ascender_descender.dart new file mode 100644 index 000000000..741710ec8 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/page_ascender_descender.dart @@ -0,0 +1,222 @@ +// Copyright 2023 The Flutter team. 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:math'; + +import 'package:flutter/material.dart'; + +import '../components/components.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class PageAscenderDescender extends SinglePage { + const PageAscenderDescender({ + super.key, + required super.pageConfig, + }); + @override + State createState() => _PageAscenderDescenderState(); +} + +class _PageAscenderDescenderState extends SinglePageState { + @override + Widget createTopicIntro() { + return LightboxedPanel( + pageConfig: widget.pageConfig, + content: [ + Text( + 'Ascenders & Descenders'.toUpperCase(), + style: TextStyles.headlineStyle(), + textAlign: TextAlign.left, + ), + Text( + 'Fonts can also vary based on their ' + 'individual pieces, like the ascenders (the parts that ' + 'extend upward) and the descenders (which extend downward)! ' + 'Piece this letter together and lock in its ' + 'wobbly ascenders and descenders!', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + ], + ); + } + + @override + List buildWonkyChars() { + return [ + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * 0.08, + top: widget.pageConfig.wonkyCharLargeSize * -0.1, + child: WonkyChar( + text: 'l', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.15 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.ascenderHt( + from: 500, + to: 983, + curve: Curves.easeInOut, + ), + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + curve: Curves.easeInOut, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.34, + top: widget.pageConfig.wonkyCharLargeSize * 0.12, + child: WonkyChar( + text: 'g', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.12 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + curve: Curves.easeInOut, + ), + WonkyAnimPalette.descenderDepth( + from: -500, + to: -138, + ) + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * -0.1, + top: widget.pageConfig.wonkyCharLargeSize * -0.5, + child: WonkyChar( + text: 'q', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.15 * pi, + animDurationMillis: 5000, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.descenderDepth( + from: -240, + to: -440, + startAt: 0.3, + endAt: 0.7, + curve: Curves.bounceOut, + ), + ], + ), + ), + // lower half -------------------------------------- + Positioned( + left: widget.pageConfig.wonkyCharSmallSize * 0.1, + bottom: widget.pageConfig.wonkyCharSmallSize * -0.34, + child: WonkyChar( + text: 'f', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animDurationMillis: 12000, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.ascenderHt( + from: 600, + to: 980, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.17, + bottom: widget.pageConfig.wonkyCharLargeSize * 0.5, + child: WonkyChar( + text: 'p', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animDurationMillis: 3000, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.descenderDepth( + from: -390, + to: -220, + curve: Curves.linear, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.4, + bottom: widget.pageConfig.wonkyCharSmallSize * 0.25, + child: WonkyChar( + text: 'k', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animDurationMillis: 3000, + animationSettings: [ + WonkyAnimPalette.ascenderHt( + from: 600, + to: 840, + curve: Curves.linear, + ), + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * 0.05, + bottom: widget.pageConfig.wonkyCharLargeSize * -0.04, + child: WonkyChar( + text: 'j', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.2 * pi, + animDurationMillis: 5000, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.descenderDepth( + from: -200, + to: -500, + ) + ], + ), + ), + ]; + } + + @override + Widget createPuzzle() { + return RotatorPuzzle( + pageConfig: widget.pageConfig, + numTiles: 9, + puzzleNum: 3, + shaderKey: 'row_offset', + shaderDuration: 2000, + tileShadedString: 'fyd', + tileShadedStringPadding: EdgeInsets.only( + top: 0.233 * widget.pageConfig.puzzleSize, + bottom: 0, + left: 0.465 * widget.pageConfig.puzzleSize, + right: 0.465 * widget.pageConfig.puzzleSize), + tileShadedStringSize: 1.86 * widget.pageConfig.puzzleSize, + tileScaleModifier: 2.7, + tileShadedStringAnimDuration: 2000, + tileShadedStringAnimSettings: [ + WonkyAnimPalette.weight(from: 200, to: 200), + WonkyAnimPalette.width(from: 50, to: 50), + WonkyAnimPalette.ascenderHt(from: 700, to: 980), + WonkyAnimPalette.descenderDepth(from: -238, to: -138), + ], + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/page_narrative_post.dart b/experimental/varfont_shader_puzzle/lib/page_content/page_narrative_post.dart new file mode 100644 index 000000000..7df89ed84 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/page_narrative_post.dart @@ -0,0 +1,55 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +import 'package:flutter/material.dart'; +import '../components/components.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class PageNarrativePost extends NarrativePage { + const PageNarrativePost({ + super.key, + required super.pageConfig, + }); + + @override + State createState() => _PageNarrativePostState(); +} + +class _PageNarrativePostState extends NarrativePageState { + @override + void initState() { + panels = [ + LightboxedPanel( + pageConfig: widget.pageConfig, + fadeOnDismiss: false, + buildButton: true, + onDismiss: super.handleIntroDismiss, + content: [ + Text( + 'Whew, we put everything back together just before the font launch.', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + const SizedBox( + height: 8, + ), + const Image( + image: AssetImage('assets/images/specimen-1.png'), + ), + Text( + 'As a reward, please enjoy the FontCo wallpapers on the next screen. Congratulations!', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + ], + ), + ]; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return panels[panelIndex]; + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/page_narrative_pre.dart b/experimental/varfont_shader_puzzle/lib/page_content/page_narrative_pre.dart new file mode 100644 index 000000000..e465bdacf --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/page_narrative_pre.dart @@ -0,0 +1,171 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +import 'package:flutter/material.dart'; +import '../components/components.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class PageNarrativePre extends NarrativePage { + const PageNarrativePre({ + super.key, + required super.pageConfig, + }); + + @override + State createState() => _PageNarrativePreState(); +} + +class _PageNarrativePreState extends NarrativePageState { + @override + void initState() { + panels = [ + LightboxedPanel( + key: UniqueKey(), + pageConfig: widget.pageConfig, + fadeOnDismiss: false, + onDismiss: super.handleIntroDismiss, + content: [ + Text( + 'Welcome to your first day on the FontCo team! Are you ready to help us publish our newest font, Designer Pro?', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + const SizedBox( + height: 8, + ), + const Image( + image: AssetImage('assets/images/specimen-1.png'), + ), + ], + ), + LightboxedPanel( + key: UniqueKey(), + pageConfig: widget.pageConfig, + fadeOnDismiss: false, + onDismiss: super.handleIntroDismiss, + autoDismissAfter: 100, + buildButton: false, + lightBoxBgColor: Colors.black, + cardBgColor: Colors.black, + content: [ + Transform.scale( + scaleX: -1, + child: Text( + 'Welcome to your first day on the FontCo team! Are you ready to help us publish our newest font, Designer Pro?', + style: TextStyles.bodyStyle().copyWith(color: Colors.white), + textAlign: TextAlign.left, + ), + ), + const SizedBox( + height: 8, + ), + Transform.scale( + scaleX: -1, + child: const Image( + image: AssetImage('assets/images/specimen-1-glitch.png'), + ), + ), + const SizedBox( + height: 56, + ), + ], + ), + LightboxedPanel( + key: UniqueKey(), + pageConfig: widget.pageConfig, + fadeOnDismiss: false, + onDismiss: super.handleIntroDismiss, + autoDismissAfter: 100, + buildButton: false, + lightBoxBgColor: Colors.black, + cardBgColor: Colors.black, + content: [ + Transform.scale( + scaleX: -1, + child: Transform.translate( + offset: const Offset(20.0, 0.0), + child: Text( + 'Welcome to your first day on the FontCo team! Are you ready to help us publish our newest font, Designer Pro?', + style: TextStyles.bodyStyle().copyWith(color: Colors.white), + textAlign: TextAlign.left, + ), + ), + ), + const SizedBox( + height: 8, + ), + Transform.scale( + scaleX: -1, + child: Transform.translate( + offset: const Offset(-20.0, 0.0), + child: const Image( + image: AssetImage('assets/images/specimen-1-glitch.png'), + ), + ), + ), + const SizedBox( + height: 56, + ), + ], + ), + LightboxedPanel( + key: UniqueKey(), + pageConfig: widget.pageConfig, + fadeOnDismiss: false, + onDismiss: super.handleIntroDismiss, + autoDismissAfter: 100, + buildButton: false, + lightBoxBgColor: Colors.black, + cardBgColor: Colors.black, + content: [ + Transform.scale( + scaleX: -1, + child: Text( + 'Welcome to your first day on the FontCo team! Are you ready to help us publish our newest font, Designer Pro?', + style: TextStyles.bodyStyle().copyWith(color: Colors.white), + textAlign: TextAlign.left, + ), + ), + const SizedBox( + height: 8, + ), + Transform.scale( + scaleX: -1, + child: const Image( + image: AssetImage('assets/images/specimen-1-glitch.png'), + ), + ), + const SizedBox( + height: 56, + ), + ], + ), + LightboxedPanel( + key: UniqueKey(), + pageConfig: widget.pageConfig, + fadeOnDismiss: false, + onDismiss: super.handleIntroDismiss, + content: [ + Text( + 'Oh no, you clicked the button too hard! Now the font file is glitched. Help us put the letters back together so we can launch!', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + const SizedBox( + height: 8, + ), + const Image( + image: AssetImage('assets/images/specimen-2.png'), + ), + ], + ), + ]; + super.initState(); + } + + @override + Widget build(BuildContext context) { + return panels[panelIndex]; + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/page_optical_size.dart b/experimental/varfont_shader_puzzle/lib/page_content/page_optical_size.dart new file mode 100644 index 000000000..1be4f6413 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/page_optical_size.dart @@ -0,0 +1,196 @@ +// Copyright 2023 The Flutter team. 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:math'; + +import 'package:flutter/material.dart'; + +import '../components/components.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class PageOpticalSize extends SinglePage { + const PageOpticalSize({ + super.key, + required super.pageConfig, + }); + + @override + State createState() => _PageOpticalSizeState(); +} + +class _PageOpticalSizeState extends SinglePageState { + @override + Widget createTopicIntro() { + return LightboxedPanel( + pageConfig: widget.pageConfig, + content: [ + Text( + 'Optical Size'.toUpperCase(), + style: TextStyles.headlineStyle(), + textAlign: TextAlign.left, + ), + Text( + 'Optical size adjusts the type according to how large it will be shown. ' + 'Smaller type usually calls for less contrast between the thin and thick ' + 'parts the letter, while larger type calls for more contrast. ' + 'Put this glitching letter back together and lock in the optical size!', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + ], + ); + } + + @override + List buildWonkyChars() { + return [ + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * -0.13, + top: widget.pageConfig.wonkyCharLargeSize * -0.3, + child: WonkyChar( + text: 'O', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.15 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + curve: Curves.easeInOut, + ), + WonkyAnimPalette.opticalSize( + from: 70, + to: 144, + ) + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.37, + top: widget.pageConfig.wonkyCharLargeSize * 0.37, + child: WonkyChar( + text: '@', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.12 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + curve: Curves.easeInOut, + ), + WonkyAnimPalette.opticalSize( + from: 78, + to: 8, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.57, + top: widget.pageConfig.wonkyCharSmallSize * -0.02, + child: WonkyChar( + text: 'r', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animationSettings: [ + WonkyAnimPalette.opticalSize( + from: 32, + to: 106, + ) + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * 0.03, + top: widget.pageConfig.wonkyCharLargeSize * -0.26, + child: WonkyChar( + text: 'e', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -0.15 * pi, + animDurationMillis: 5000, + animationSettings: [ + WonkyAnimPalette.opticalSize( + from: 70, + to: 144, + ) + ], + ), + ), + // lower half -------------------------------------- + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * 0.1, + bottom: widget.pageConfig.wonkyCharLargeSize * 0.05, + child: WonkyChar( + text: 'i', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -0.04 * pi, + animationSettings: [ + WonkyAnimPalette.opticalSize( + from: 40, + to: 8, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.37, + bottom: widget.pageConfig.wonkyCharLargeSize * -0.04, + child: WonkyChar( + text: 'Z', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animationSettings: [ + WonkyAnimPalette.opticalSize( + from: 8, + to: 60, + ), + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * -0.14, + bottom: widget.pageConfig.wonkyCharLargeSize * -0.1, + child: WonkyChar( + text: 'A', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.15 * pi, + animDurationMillis: 12000, + animationSettings: [ + WonkyAnimPalette.opticalSize( + from: 80, + to: 20, + ), + WonkyAnimPalette.rotation( + from: -0.01 * pi, + to: 0.01 * pi, + ), + ], + ), + ), + ]; + } + + @override + Widget createPuzzle() { + return RotatorPuzzle( + pageConfig: widget.pageConfig, + numTiles: 16, + puzzleNum: 4, + shaderKey: 'wavy', + shaderDuration: 5000, + tileShadedString: 'Z', + tileShadedStringPadding: + EdgeInsets.only(bottom: 0.349 * widget.pageConfig.puzzleSize), + tileScaleModifier: 2.6, + tileShadedStringSize: 2.79 * widget.pageConfig.puzzleSize, + tileShadedStringAnimDuration: 3000, + tileShadedStringAnimSettings: [ + WonkyAnimPalette.weight(from: 1000, to: 1000), + WonkyAnimPalette.width(from: 125, to: 125), + WonkyAnimPalette.opticalSize(from: 8, to: 144) + ], + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/page_weight.dart b/experimental/varfont_shader_puzzle/lib/page_content/page_weight.dart new file mode 100644 index 000000000..56727bf44 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/page_weight.dart @@ -0,0 +1,186 @@ +// Copyright 2023 The Flutter team. 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:math'; + +import 'package:flutter/material.dart'; + +import '../components/components.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class PageWeight extends SinglePage { + const PageWeight({ + super.key, + required super.pageConfig, + }); + + @override + State createState() => _PageWeightState(); +} + +class _PageWeightState extends SinglePageState { + @override + Widget createTopicIntro() { + return LightboxedPanel( + pageConfig: widget.pageConfig, + content: [ + Text( + 'Weight'.toUpperCase(), + style: TextStyles.headlineStyle(), + textAlign: TextAlign.left, + ), + Text( + 'You probably knew that fonts can vary by weight, or the boldness, ' + 'as we can see in the letters on this page. Tap the pieces of the ' + 'broken letter to bring it back together, but don’t get distracted ' + 'by its oscillating weight!', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + ], + ); + } + + @override + List buildWonkyChars() { + return [ + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * -0.01, + top: widget.pageConfig.wonkyCharLargeSize * -0.26, + child: WonkyChar( + text: 'S', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.15 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.weight( + from: 100, + to: 300, + curve: Curves.easeInOut, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.34, + top: widget.pageConfig.wonkyCharLargeSize * 0.3, + child: WonkyChar( + text: 't', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.12 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.weight( + from: 1000, + to: 800, + curve: Curves.easeInOut, + ), + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * 0.07, + top: widget.pageConfig.wonkyCharLargeSize * -0.26, + child: WonkyChar( + text: 'q', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -0.15 * pi, + animDurationMillis: 5000, + animationSettings: [ + WonkyAnimPalette.weight( + from: 200, + to: 500, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.5, + top: widget.pageConfig.wonkyCharSmallSize * 0.3, + child: WonkyChar( + text: '*', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animationSettings: [ + WonkyAnimPalette.weight( + from: 100, + to: 400, + ), + ], + ), + ), + // lower half -------------------------------------- + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * -0.2, + bottom: widget.pageConfig.wonkyCharLargeSize * -0.34, + child: WonkyChar( + text: 'C', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -0.15 * pi, + animDurationMillis: 7000, + animationSettings: [ + WonkyAnimPalette.weight( + from: 1000, + to: 700, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.42, + bottom: widget.pageConfig.wonkyCharLargeSize * 0.02, + child: WonkyChar( + text: 'f', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animDurationMillis: 4000, + animationSettings: [ + WonkyAnimPalette.weight( + from: 100, + to: 200, + ), + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * -0.2, + bottom: widget.pageConfig.wonkyCharLargeSize * -0.23, + child: WonkyChar( + text: 'R', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -1.15 * pi, + animDurationMillis: 2000, + animationSettings: [ + WonkyAnimPalette.weight( + from: 700, + to: 900, + ), + ], + ), + ), + ]; + } + + @override + Widget createPuzzle() { + return RotatorPuzzle( + pageConfig: widget.pageConfig, + numTiles: 9, + puzzleNum: 1, + shaderKey: 'wavy2', + shaderDuration: 3000, + tileShadedString: 'W', + tileShadedStringPadding: EdgeInsets.only( + left: 0.698 * widget.pageConfig.puzzleSize, + right: 0.698 * widget.pageConfig.puzzleSize), + tileShadedStringSize: 2.79 * widget.pageConfig.puzzleSize, + tileScaleModifier: 2.4, + tileShadedStringAnimDuration: 1000, + tileShadedStringAnimSettings: [ + WonkyAnimPalette.weight(from: 600, to: 1000), + WonkyAnimPalette.width(from: 50, to: 50), + ], + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/page_width.dart b/experimental/varfont_shader_puzzle/lib/page_content/page_width.dart new file mode 100644 index 000000000..ece52b1ef --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/page_width.dart @@ -0,0 +1,221 @@ +// Copyright 2023 The Flutter team. 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:math'; + +import 'package:flutter/material.dart'; + +import '../components/components.dart'; +import '../page_content/pages_flow.dart'; +import '../styles.dart'; + +class PageWidth extends SinglePage { + const PageWidth({ + super.key, + required super.pageConfig, + }); + @override + State createState() => _PageWidthState(); +} + +class _PageWidthState extends SinglePageState { + @override + Widget createTopicIntro() { + return LightboxedPanel( + pageConfig: widget.pageConfig, + content: [ + Text( + 'Width'.toUpperCase(), + style: TextStyles.headlineStyle(), + textAlign: TextAlign.left, + ), + Text( + 'Fonts can vary by width as well. Choosing a new width setting is better ' + 'than stretching letters in an image editor, which would just distort the letter. ' + 'Solve this letter puzzle to clear the glitch and set the width!', + style: TextStyles.bodyStyle(), + textAlign: TextAlign.left, + ), + ], + ); + } + + @override + List buildWonkyChars() { + return [ + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * -0.17, + top: widget.pageConfig.wonkyCharLargeSize * -0.2, + child: WonkyChar( + text: 'r', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -0.15 * pi, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.width( + from: 120, + to: 125, + ) + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.3, + top: widget.pageConfig.wonkyCharLargeSize * 0.42, + child: WonkyChar( + text: 'x', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.12 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + curve: Curves.easeInOut, + ), + WonkyAnimPalette.width( + from: 70, + to: 50, + ), + WonkyAnimPalette.offsetY( + from: -6, + to: 2, + curve: Curves.easeInOut, + ), + WonkyAnimPalette.rotation( + from: -0.04 * pi, + to: 0.005 * pi, + ), + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * 0, + top: widget.pageConfig.wonkyCharLargeSize * -0.2, + child: WonkyChar( + text: 'F', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: 0.15 * pi, + animDurationMillis: 3200, + animationSettings: [ + WonkyAnimPalette.width( + from: 120, + to: 125, + ), + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + ], + ), + ), + + // lower half -------------------------------------- + Positioned( + left: widget.pageConfig.wonkyCharLargeSize * -0.2, + bottom: widget.pageConfig.wonkyCharLargeSize * -0.3, + child: WonkyChar( + text: 'W', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -0.15 * pi, + animDurationMillis: 6000, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.width( + from: 75, + to: 50, + ), + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.4, + bottom: widget.pageConfig.wonkyCharLargeSize * 0.1, + child: WonkyChar( + text: 'h', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.width( + from: 90, + to: 115, + ) + ], + ), + ), + Positioned( + left: widget.pageConfig.screenWidth * 0.75, + bottom: widget.pageConfig.wonkyCharSmallSize * -0.24, + child: WonkyChar( + text: 'K', + size: widget.pageConfig.wonkyCharSmallSize, + baseRotation: -0.15 * pi, + animDurationMillis: 5000, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.width( + from: 125, + to: 90, + startAt: 0.3, + endAt: 0.7, + ), + ], + ), + ), + Positioned( + right: widget.pageConfig.wonkyCharLargeSize * 0.0, + bottom: widget.pageConfig.wonkyCharLargeSize * 0.1, + child: WonkyChar( + text: '?', + size: widget.pageConfig.wonkyCharLargeSize, + baseRotation: -1.67 * pi, + animationSettings: [ + WonkyAnimPalette.weight( + from: PageConfig.baseWeight, + to: PageConfig.baseWeight, + ), + WonkyAnimPalette.width( + from: 110, + to: 60, + ) + ], + ), + ), + ]; + } + + @override + Widget createPuzzle() { + return RotatorPuzzle( + pageConfig: widget.pageConfig, + numTiles: 16, + puzzleNum: 2, + shaderKey: 'bw_split', + shaderDuration: 2000, + tileShadedString: 'S', + tileShadedStringPadding: EdgeInsets.only( + left: 0.349 * widget.pageConfig.puzzleSize, + right: 0.349 * widget.pageConfig.puzzleSize), + tileShadedStringSize: 3.256 * widget.pageConfig.puzzleSize, + tileScaleModifier: 2.34, + tileShadedStringAnimDuration: 2000, + tileShadedStringAnimSettings: [ + WonkyAnimPalette.weight(from: 200, to: 200), + WonkyAnimPalette.width(from: 50, to: 125), + ], + ); + } +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/pages.dart b/experimental/varfont_shader_puzzle/lib/page_content/pages.dart new file mode 100644 index 000000000..df882ac83 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/pages.dart @@ -0,0 +1,9 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +export 'page_ascender_descender.dart'; +export 'page_narrative_post.dart'; +export 'page_narrative_pre.dart'; +export 'page_optical_size.dart'; +export 'page_weight.dart'; +export 'page_width.dart'; diff --git a/experimental/varfont_shader_puzzle/lib/page_content/pages_flow.dart b/experimental/varfont_shader_puzzle/lib/page_content/pages_flow.dart new file mode 100644 index 000000000..101fb21a8 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/pages_flow.dart @@ -0,0 +1,176 @@ +// Copyright 2023 The Flutter team. 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:math'; + +import 'package:flutter/material.dart'; + +import '../components/components.dart'; +import '../page_content/wallpapers_flow.dart'; +import 'pages.dart'; + +class PagesFlow extends StatefulWidget { + const PagesFlow({super.key}); + + static const pageScrollDuration = 400; + + @override + State createState() => _PagesFlowState(); +} + +class _PagesFlowState extends State { + late PageController pageController = PageController(); + + @override + Widget build(BuildContext context) { + final double screenWidth = MediaQuery.of(context).size.width; + final double screenHeight = MediaQuery.of(context).size.height; + bool narrowView = screenWidth * 1.8 < screenHeight ? true : false; + double puzzleSize = + narrowView ? screenWidth * 1 : min(screenHeight * 0.6, screenWidth); + double topBottomMargin = (screenHeight - puzzleSize) * 0.5; + double wonkyCharLargeSize = topBottomMargin * 1.0; + double wonkyCharSmallSize = wonkyCharLargeSize * 0.5; + PageConfig pageConfig = PageConfig( + screenWidth: screenWidth, + screenHeight: screenHeight, + narrowView: narrowView, + puzzleSize: puzzleSize, + pageController: pageController, + wonkyCharLargeSize: wonkyCharLargeSize, + wonkyCharSmallSize: wonkyCharSmallSize, + ); + + return PageView( + controller: pageController, + physics: const NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + children: [ + PageNarrativePre( + pageConfig: pageConfig, + ), + PageWeight( + pageConfig: pageConfig, + ), + PageAscenderDescender( + pageConfig: pageConfig, + ), + PageOpticalSize( + pageConfig: pageConfig, + ), + PageWidth( + pageConfig: pageConfig, + ), + PageNarrativePost( + pageConfig: pageConfig, + ), + const WallpapersFlow(), + ], + ); + } +} + +class PageConfig { + final double screenWidth; + final double screenHeight; + final bool narrowView; + final double puzzleSize; + final PageController pageController; + final double wonkyCharLargeSize; + final double wonkyCharSmallSize; + static double baseWeight = 800; + const PageConfig({ + Key? key, + required this.screenWidth, + required this.screenHeight, + required this.narrowView, + required this.puzzleSize, + required this.pageController, + required this.wonkyCharLargeSize, + required this.wonkyCharSmallSize, + }); +} + +class SinglePage extends StatefulWidget { + final PageConfig pageConfig; + const SinglePage({ + super.key, + required this.pageConfig, + }); + + @override + State createState() => SinglePageState(); +} + +class SinglePageState extends State with TickerProviderStateMixin { + List buildWonkyChars() { + return []; + } + + Widget createPuzzle() { + return Container(); + } + + Widget createTopicIntro() { + return LightboxedPanel( + pageConfig: widget.pageConfig, + content: const [], + ); + } + + @override + Widget build(BuildContext context) { + List c = []; + c.add(createPuzzle()); + c += buildWonkyChars(); + c.add(createTopicIntro()); + return Stack( + children: c, + ); + } + + void puzzleDone() {} +} + +class NarrativePage extends StatefulWidget { + final PageConfig pageConfig; + const NarrativePage({ + super.key, + required this.pageConfig, + }); + + @override + State createState() => NarrativePageState(); +} + +class NarrativePageState extends State + with TickerProviderStateMixin { + int panelIndex = 0; + List panels = []; + + void handleIntroDismiss() { + Future.delayed(const Duration(milliseconds: 50), () { + setState(() { + if (panelIndex == panels.length - 1) { + widget.pageConfig.pageController.nextPage( + duration: + const Duration(milliseconds: PagesFlow.pageScrollDuration), + curve: Curves.easeOut, + ); + } else { + panelIndex++; + } + }); + }); + } + + @override + Widget build(BuildContext context) { + switch (panelIndex) { + default: + return Container(); + } + } + + void puzzleDone() {} +} diff --git a/experimental/varfont_shader_puzzle/lib/page_content/wallpapers_flow.dart b/experimental/varfont_shader_puzzle/lib/page_content/wallpapers_flow.dart new file mode 100644 index 000000000..ee8905b26 --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/page_content/wallpapers_flow.dart @@ -0,0 +1,430 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +class WallpapersFlow extends StatefulWidget { + const WallpapersFlow({super.key}); + + @override + State createState() => _WallpapersFlowState(); +} + +class _WallpapersFlowState extends State { + int pageNum = 0; + int numPages = 4; + + @override + void initState() { + LicenseRegistry.addLicense(() => Stream.value( + LicenseEntryWithLineBreaks( + ['roboto_font'], + robotoLicense, + ), + )); + LicenseRegistry.addLicense(() => Stream.value( + LicenseEntryWithLineBreaks( + ['amstelvar_font'], + amstelvarLicense, + ), + )); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + PageView( + onPageChanged: (value) { + setState(() { + pageNum = value; + }); + }, + children: const [ + DecoratedBox( + decoration: BoxDecoration( + color: Colors.black, + ), + child: Center( + child: Image( + image: AssetImage('assets/images/wallpaper3.png'), + fit: BoxFit.contain, + ), + ), + ), + DecoratedBox( + decoration: BoxDecoration( + color: Colors.black, + ), + child: Center( + child: Image( + image: AssetImage('assets/images/wallpaper1.png'), + fit: BoxFit.contain, + ), + ), + ), + DecoratedBox( + decoration: BoxDecoration( + color: Colors.black, + ), + child: Center( + child: Image( + image: AssetImage('assets/images/wallpaper2.png'), + fit: BoxFit.contain, + ), + ), + ), + LicensePage(), + ], + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: const EdgeInsets.only(bottom: 20.0), + child: Container( + width: 100, + height: 30, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + color: const Color.fromARGB(220, 0, 0, 0), + ), + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: _buildScrollDots(), + ), + ), + ), + ), + ), + ], + ); + } + + List _buildScrollDots() { + List dots = []; + for (int i = 0; i < numPages; i++) { + Color dotColor = i == pageNum + ? const Color.fromARGB(255, 255, 255, 255) + : const Color.fromARGB(255, 105, 105, 105); + Widget d = Container( + width: 16, + height: 16, + decoration: BoxDecoration( + color: dotColor, + borderRadius: BorderRadius.circular(8.0), + border: Border.all(color: Colors.white, width: 0.5), + ), + ); + dots.add(d); + } + return dots; + } + + final String robotoLicense = ''' +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + '''; + + final String amstelvarLicense = ''' +Copyright 2016 The Amstelvar Project Authors (info@fontbureau.com) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE + +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS + +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION + +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + '''; +} diff --git a/experimental/varfont_shader_puzzle/lib/styles.dart b/experimental/varfont_shader_puzzle/lib/styles.dart new file mode 100644 index 000000000..170b9ca9c --- /dev/null +++ b/experimental/varfont_shader_puzzle/lib/styles.dart @@ -0,0 +1,49 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +import 'package:flutter/material.dart'; + +class TextStyles { + const TextStyles({Key? key}); + + static TextStyle bodyStyle() { + return const TextStyle( + fontFamily: 'Roboto', + fontSize: 16, + color: Colors.black, + fontWeight: FontWeight.w400, + height: 1.5, + ); + } + + static TextStyle headlineStyle() { + return const TextStyle( + fontFamily: 'Roboto', + fontSize: 16, + color: Colors.black, + fontWeight: FontWeight.w700, + height: 1.5, + ); + } +} + +class ButtonStyles { + static ButtonStyle style() { + return ButtonStyle( + fixedSize: MaterialStateProperty.resolveWith((states) { + return const Size(100, 36); + }), + shape: MaterialStateProperty.resolveWith((states) { + return const RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(18))); + }), + overlayColor: null, + backgroundColor: MaterialStateProperty.resolveWith((states) { + if (states.contains(MaterialState.hovered)) { + return Colors.black; // Hovered bg (for desktop with mouse) + } + return Colors.grey[600]; // Default bg + }), + ); + } +} diff --git a/experimental/varfont_shader_puzzle/linux/.gitignore b/experimental/varfont_shader_puzzle/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/experimental/varfont_shader_puzzle/linux/CMakeLists.txt b/experimental/varfont_shader_puzzle/linux/CMakeLists.txt new file mode 100644 index 000000000..c1ee313fc --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/CMakeLists.txt @@ -0,0 +1,138 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "type_jam_github") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.type_jam_github") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/experimental/varfont_shader_puzzle/linux/flutter/CMakeLists.txt b/experimental/varfont_shader_puzzle/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/experimental/varfont_shader_puzzle/linux/flutter/generated_plugin_registrant.cc b/experimental/varfont_shader_puzzle/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..e71a16d23 --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/experimental/varfont_shader_puzzle/linux/flutter/generated_plugin_registrant.h b/experimental/varfont_shader_puzzle/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/null_safety/null_safe_app/linux/flutter/generated_plugins.cmake b/experimental/varfont_shader_puzzle/linux/flutter/generated_plugins.cmake similarity index 98% rename from null_safety/null_safe_app/linux/flutter/generated_plugins.cmake rename to experimental/varfont_shader_puzzle/linux/flutter/generated_plugins.cmake index 12c7443ed..2e1de87a7 100644 --- a/null_safety/null_safe_app/linux/flutter/generated_plugins.cmake +++ b/experimental/varfont_shader_puzzle/linux/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - window_size ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/experimental/varfont_shader_puzzle/linux/main.cc b/experimental/varfont_shader_puzzle/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/experimental/varfont_shader_puzzle/linux/my_application.cc b/experimental/varfont_shader_puzzle/linux/my_application.cc new file mode 100644 index 000000000..97bbc5fda --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "type_jam_github"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "type_jam_github"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/experimental/varfont_shader_puzzle/linux/my_application.h b/experimental/varfont_shader_puzzle/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/experimental/varfont_shader_puzzle/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/experimental/varfont_shader_puzzle/macos/.gitignore b/experimental/varfont_shader_puzzle/macos/.gitignore new file mode 100644 index 000000000..746adbb6b --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/null_safety/null_unsafe_app/macos/Flutter/Flutter-Debug.xcconfig b/experimental/varfont_shader_puzzle/macos/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from null_safety/null_unsafe_app/macos/Flutter/Flutter-Debug.xcconfig rename to experimental/varfont_shader_puzzle/macos/Flutter/Flutter-Debug.xcconfig diff --git a/null_safety/null_unsafe_app/macos/Flutter/Flutter-Release.xcconfig b/experimental/varfont_shader_puzzle/macos/Flutter/Flutter-Release.xcconfig similarity index 100% rename from null_safety/null_unsafe_app/macos/Flutter/Flutter-Release.xcconfig rename to experimental/varfont_shader_puzzle/macos/Flutter/Flutter-Release.xcconfig diff --git a/experimental/varfont_shader_puzzle/macos/Flutter/GeneratedPluginRegistrant.swift b/experimental/varfont_shader_puzzle/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 000000000..e777c67df --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import path_provider_foundation + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) +} diff --git a/experimental/varfont_shader_puzzle/macos/Podfile b/experimental/varfont_shader_puzzle/macos/Podfile new file mode 100644 index 000000000..c795730db --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/project.pbxproj b/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..31285f583 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,791 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 71BE2173F4A873E8F1EA2E56 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6222ACE8049DB58F70F40A2C /* Pods_Runner.framework */; }; + C7305AD5D25AF562B38BFA4C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C99B5EE337F31460B7238F4 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 06B860D13CF19C818359A367 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* type_jam_github.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = type_jam_github.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 3A1117CDFB24641FC2774AF5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5351E4FDA050CA3CA0C7DBEE /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 6222ACE8049DB58F70F40A2C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C6EA78061492F46BEDD9C33 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 6C99B5EE337F31460B7238F4 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8F0D380B78CD6BC7BC0ED578 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 9CB8982626DBB91364282008 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C7305AD5D25AF562B38BFA4C /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 71BE2173F4A873E8F1EA2E56 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 556C5EE6FCB5DC433BA531FE /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* type_jam_github.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 556C5EE6FCB5DC433BA531FE /* Pods */ = { + isa = PBXGroup; + children = ( + 3A1117CDFB24641FC2774AF5 /* Pods-Runner.debug.xcconfig */, + 6C6EA78061492F46BEDD9C33 /* Pods-Runner.release.xcconfig */, + 9CB8982626DBB91364282008 /* Pods-Runner.profile.xcconfig */, + 06B860D13CF19C818359A367 /* Pods-RunnerTests.debug.xcconfig */, + 8F0D380B78CD6BC7BC0ED578 /* Pods-RunnerTests.release.xcconfig */, + 5351E4FDA050CA3CA0C7DBEE /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6222ACE8049DB58F70F40A2C /* Pods_Runner.framework */, + 6C99B5EE337F31460B7238F4 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 6E3C2376838B8F6C331FBDA0 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 1D0B8F6F97267816ADB2582C /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + C08156B71EF3E1FBDF1EF30B /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* type_jam_github.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 1D0B8F6F97267816ADB2582C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 6E3C2376838B8F6C331FBDA0 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C08156B71EF3E1FBDF1EF30B /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 06B860D13CF19C818359A367 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/type_jam_github.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/type_jam_github"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F0D380B78CD6BC7BC0ED578 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/type_jam_github.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/type_jam_github"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5351E4FDA050CA3CA0C7DBEE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/type_jam_github.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/type_jam_github"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..4b82bcbe4 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/null_safety/null_unsafe_app/macos/Runner.xcworkspace/contents.xcworkspacedata b/experimental/varfont_shader_puzzle/macos/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from null_safety/null_unsafe_app/macos/Runner.xcworkspace/contents.xcworkspacedata rename to experimental/varfont_shader_puzzle/macos/Runner.xcworkspace/contents.xcworkspacedata diff --git a/experimental/varfont_shader_puzzle/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/experimental/varfont_shader_puzzle/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/experimental/varfont_shader_puzzle/macos/Runner/AppDelegate.swift b/experimental/varfont_shader_puzzle/macos/Runner/AppDelegate.swift new file mode 100644 index 000000000..d53ef6437 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..a2ec33f19 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 000000000..82b6f9d9a Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 000000000..13b35eba5 Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 000000000..0a3f5fa40 Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 000000000..bdb57226d Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 000000000..f083318e0 Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 000000000..326c0e72c Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 000000000..2f1632cfd Binary files /dev/null and b/experimental/varfont_shader_puzzle/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Base.lproj/MainMenu.xib b/experimental/varfont_shader_puzzle/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 000000000..80e867a4e --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Configs/AppInfo.xcconfig b/experimental/varfont_shader_puzzle/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 000000000..0ee5ee069 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = type_jam_github + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.typeJamGithub + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Configs/Debug.xcconfig b/experimental/varfont_shader_puzzle/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 000000000..36b0fd946 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Configs/Release.xcconfig b/experimental/varfont_shader_puzzle/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 000000000..dff4f4956 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Configs/Warnings.xcconfig b/experimental/varfont_shader_puzzle/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 000000000..42bcbf478 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/null_safety/null_unsafe_app/macos/Runner/DebugProfile.entitlements b/experimental/varfont_shader_puzzle/macos/Runner/DebugProfile.entitlements similarity index 100% rename from null_safety/null_unsafe_app/macos/Runner/DebugProfile.entitlements rename to experimental/varfont_shader_puzzle/macos/Runner/DebugProfile.entitlements diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Info.plist b/experimental/varfont_shader_puzzle/macos/Runner/Info.plist new file mode 100644 index 000000000..4789daa6a --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/experimental/varfont_shader_puzzle/macos/Runner/MainFlutterWindow.swift b/experimental/varfont_shader_puzzle/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 000000000..2722837ec --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/experimental/varfont_shader_puzzle/macos/Runner/Release.entitlements b/experimental/varfont_shader_puzzle/macos/Runner/Release.entitlements new file mode 100644 index 000000000..852fa1a47 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/experimental/varfont_shader_puzzle/macos/RunnerTests/RunnerTests.swift b/experimental/varfont_shader_puzzle/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/experimental/varfont_shader_puzzle/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/experimental/varfont_shader_puzzle/pubspec.yaml b/experimental/varfont_shader_puzzle/pubspec.yaml new file mode 100644 index 000000000..26bb7a355 --- /dev/null +++ b/experimental/varfont_shader_puzzle/pubspec.yaml @@ -0,0 +1,91 @@ +name: varfont_shader_puzzle +description: A new Flutter project. + +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=2.18.6 <3.0.0' + flutter: ^3.7.0-1.4.pre + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + google_fonts: ^4.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/images/ + shaders: + - shaders/wavy.frag + - shaders/wavy2.frag + - shaders/wavy_circ.frag + - shaders/color_split.frag + - shaders/bw_split.frag + - shaders/row_offset.frag + - shaders/nothing.frag + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + fonts: + - family: Roboto + fonts: + - asset: assets/fonts/Roboto-Regular.ttf + weight: 400 + - asset: assets/fonts/Roboto-Bold.ttf + weight: 700 + - family: Amstelvar + fonts: + - asset: assets/fonts/Amstelvar-Roman[GRAD,XOPQ,XTRA,YOPQ,YTAS,YTDE,YTFI,YTLC,YTUC,wdth,wght,opsz].ttf diff --git a/experimental/varfont_shader_puzzle/shaders/bw_split.frag b/experimental/varfont_shader_puzzle/shaders/bw_split.frag new file mode 100644 index 000000000..6abc5d1fd --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/bw_split.frag @@ -0,0 +1,40 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + float offset = 50; + + float opacSum = 0.0; + vec4 thisCol = texture(uTexture, texCoord.xy); + + float x = texCoord.x + (offset / uSize.x * pow(sin(piTime), 4)) * uDampener; + if (x >= 0.0 && x <= 1.0) { + opacSum += 0.3 * texture(uTexture, vec2(x, texCoord.y)).a; + } + + x = texCoord.x - (offset / uSize.x * pow(sin(piTime + PI), 2)) * uDampener; + if (x >= 0.0 && x <= 1.0) { + opacSum += 0.3 * texture(uTexture, vec2(x, texCoord.y)).a; + } + + float y = texCoord.y + (offset / uSize.y * pow(sin(piTime + PI * 0.66), 4)) * uDampener; + if (y >= 0.0 && y <= 1.0) { + opacSum += 0.3 * texture(uTexture, vec2(texCoord.x, y)).a; + } + + fragColor = vec4(0.0, 0.0, 0.0, clamp(opacSum, 0.0, 1.0)); + +} diff --git a/experimental/varfont_shader_puzzle/shaders/color_split.frag b/experimental/varfont_shader_puzzle/shaders/color_split.frag new file mode 100644 index 000000000..464ad2640 --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/color_split.frag @@ -0,0 +1,30 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + float offset = 15; + + vec4 thisCol = texture(uTexture, texCoord.xy); + vec4 rSrc = texture(uTexture, vec2(texCoord.x + offset / uSize.x * sin(piTime), texCoord.y)); + float r = rSrc.a; + + vec4 gSrc = texture(uTexture, vec2(texCoord.x + offset / uSize.x * sin(piTime + PI), texCoord.y)); + float g = gSrc.a; + + vec4 bSrc = texture(uTexture, vec2(texCoord.x, texCoord.y + offset / uSize.y * sin(piTime + PI * 0.66))); + float b = bSrc.a; + fragColor = vec4(r, g, b, clamp(r+g+b, 0.0, 1.0)); +} diff --git a/experimental/varfont_shader_puzzle/shaders/nothing.frag b/experimental/varfont_shader_puzzle/shaders/nothing.frag new file mode 100644 index 000000000..19782f8f3 --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/nothing.frag @@ -0,0 +1,19 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + fragColor = texture(uTexture, texCoord); +} diff --git a/experimental/varfont_shader_puzzle/shaders/row_offset.frag b/experimental/varfont_shader_puzzle/shaders/row_offset.frag new file mode 100644 index 000000000..11a70f451 --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/row_offset.frag @@ -0,0 +1,35 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + + float levels = 5; + float maxMag = 0.1; + float minMag = 0.02; + float magMod = maxMag / levels; + float row = floor(texCoord.y * uSize.y * 0.25); // resolution/density of rows + float offsetDir = mod(row, 2) == 0 ? -1 : 1; + float sinFn = cos(texCoord.y * 1 * PI + piTime); + float offset = (offsetDir * (minMag + maxMag * sinFn)) * uDampener; + + vec2 offsetTexCoord = vec2(texCoord.x + offset, texCoord.y); + vec4 outColor = texture(uTexture, offsetTexCoord); + if (texCoord.x + offset < 0.0 || texCoord.x + offset > 1.0) { + outColor = vec4(0.0, 0.0, 0.0, 0.0); + } + fragColor = outColor; +} diff --git a/experimental/varfont_shader_puzzle/shaders/wavy.frag b/experimental/varfont_shader_puzzle/shaders/wavy.frag new file mode 100644 index 000000000..19ffd5b0d --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/wavy.frag @@ -0,0 +1,30 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + int speed; + + // wavy + speed = 1; + float xAdj = texCoord.x * 3 * PI; + float waveFnVal = sin((xAdj + piTime * speed)); + float hackAdj = 0.0; + float offset = ( ((pow(waveFnVal, 2) * 0.5 - 0.5) * 0.2) + hackAdj ) * uDampener; + + vec2 offsetTexCoord = vec2(texCoord.x, texCoord.y + offset); + fragColor = texture(uTexture, offsetTexCoord); +} diff --git a/experimental/varfont_shader_puzzle/shaders/wavy2.frag b/experimental/varfont_shader_puzzle/shaders/wavy2.frag new file mode 100644 index 000000000..f3071afe0 --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/wavy2.frag @@ -0,0 +1,26 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + float maxMag = 0.2; + + float thisMag = (sin(texCoord.y * 10 + piTime) + 1) * 0.5 * maxMag * uDampener; + float srcX; + srcX = texCoord.x + (0.5 - texCoord.x) * thisMag; + vec2 srcCoord = vec2(srcX, texCoord.y); + fragColor = texture(uTexture, srcCoord); +} diff --git a/experimental/varfont_shader_puzzle/shaders/wavy_circ.frag b/experimental/varfont_shader_puzzle/shaders/wavy_circ.frag new file mode 100644 index 000000000..31c83b3f8 --- /dev/null +++ b/experimental/varfont_shader_puzzle/shaders/wavy_circ.frag @@ -0,0 +1,38 @@ +// Copyright 2023 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#define PI 3.1415926538 + +layout(location = 0) uniform float uTime; +layout(location = 1) uniform vec2 uSize; +layout(location = 3) uniform float uDampener; + +layout(location = 0) out vec4 fragColor; + +layout(location = 2) uniform sampler2D uTexture; + +void main() +{ + float piTime = uTime * PI * 2; + + vec2 texCoord = gl_FragCoord.xy / uSize.xy; + float maxMag = 0.4; + float minMag = 0.3; + float numRings = 6.0; + float ringVel = 4.0; + float numPeakShifts = 8.0; + float peakShiftVel = -3.0; + + float unitX = (texCoord.x - 0.5) * 2; + float unitY = (texCoord.y - 0.5) * 2; + float dist = distance(vec2(0, 0), vec2(unitX, unitY)); + float theta = atan(unitY, unitX) + PI; // add PI for atan2 values -PI to PI + float thisMag = (sin(theta * numRings - piTime * ringVel) + 1) * 0.5 * (cos(theta * numPeakShifts - piTime * peakShiftVel) + 1) * 0.5 * (maxMag - minMag) + minMag; + + float unitSrcDist = dist - dist * thisMag; + float unitSrcX = cos(theta) * unitSrcDist; + float unitSrcY = sin(theta) * unitSrcDist; + float texSrcX = unitSrcX * 0.5 + 0.5; + float texSrcY = unitSrcY * 0.5 + 0.5; + fragColor = texture(uTexture, vec2(texSrcX, texSrcY)); +} diff --git a/experimental/varfont_shader_puzzle/web/favicon.png b/experimental/varfont_shader_puzzle/web/favicon.png new file mode 100644 index 000000000..8aaa46ac1 Binary files /dev/null and b/experimental/varfont_shader_puzzle/web/favicon.png differ diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-192.png b/experimental/varfont_shader_puzzle/web/icons/Icon-192.png new file mode 100644 index 000000000..b749bfef0 Binary files /dev/null and b/experimental/varfont_shader_puzzle/web/icons/Icon-192.png differ diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-512.png b/experimental/varfont_shader_puzzle/web/icons/Icon-512.png new file mode 100644 index 000000000..88cfd48df Binary files /dev/null and b/experimental/varfont_shader_puzzle/web/icons/Icon-512.png differ diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-192.png b/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-192.png new file mode 100644 index 000000000..eb9b4d76e Binary files /dev/null and b/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-192.png differ diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-512.png b/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-512.png new file mode 100644 index 000000000..d69c56691 Binary files /dev/null and b/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-512.png differ diff --git a/experimental/varfont_shader_puzzle/web/index.html b/experimental/varfont_shader_puzzle/web/index.html new file mode 100644 index 000000000..dd57675e5 --- /dev/null +++ b/experimental/varfont_shader_puzzle/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + type_jam_github + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/web/manifest.json b/experimental/varfont_shader_puzzle/web/manifest.json new file mode 100644 index 000000000..c3e55bdbb --- /dev/null +++ b/experimental/varfont_shader_puzzle/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "type_jam_github", + "short_name": "type_jam_github", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/experimental/varfont_shader_puzzle/windows/.gitignore b/experimental/varfont_shader_puzzle/windows/.gitignore new file mode 100644 index 000000000..d492d0d98 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/experimental/varfont_shader_puzzle/windows/CMakeLists.txt b/experimental/varfont_shader_puzzle/windows/CMakeLists.txt new file mode 100644 index 000000000..f295f30f4 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/CMakeLists.txt @@ -0,0 +1,101 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(type_jam_github LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "type_jam_github") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/experimental/varfont_shader_puzzle/windows/flutter/CMakeLists.txt b/experimental/varfont_shader_puzzle/windows/flutter/CMakeLists.txt new file mode 100644 index 000000000..930d2071a --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/null_safety/null_safe_app/windows/flutter/generated_plugin_registrant.cc b/experimental/varfont_shader_puzzle/windows/flutter/generated_plugin_registrant.cc similarity index 53% rename from null_safety/null_safe_app/windows/flutter/generated_plugin_registrant.cc rename to experimental/varfont_shader_puzzle/windows/flutter/generated_plugin_registrant.cc index 9372fc507..8b6d4680a 100644 --- a/null_safety/null_safe_app/windows/flutter/generated_plugin_registrant.cc +++ b/experimental/varfont_shader_puzzle/windows/flutter/generated_plugin_registrant.cc @@ -6,9 +6,6 @@ #include "generated_plugin_registrant.h" -#include void RegisterPlugins(flutter::PluginRegistry* registry) { - WindowSizePluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("WindowSizePlugin")); } diff --git a/experimental/varfont_shader_puzzle/windows/flutter/generated_plugin_registrant.h b/experimental/varfont_shader_puzzle/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..dc139d85a --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/null_safety/null_unsafe_app/windows/flutter/generated_plugins.cmake b/experimental/varfont_shader_puzzle/windows/flutter/generated_plugins.cmake similarity index 98% rename from null_safety/null_unsafe_app/windows/flutter/generated_plugins.cmake rename to experimental/varfont_shader_puzzle/windows/flutter/generated_plugins.cmake index ff2147b2c..b93c4c30c 100644 --- a/null_safety/null_unsafe_app/windows/flutter/generated_plugins.cmake +++ b/experimental/varfont_shader_puzzle/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - window_size ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/experimental/varfont_shader_puzzle/windows/runner/CMakeLists.txt b/experimental/varfont_shader_puzzle/windows/runner/CMakeLists.txt new file mode 100644 index 000000000..394917c05 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/experimental/varfont_shader_puzzle/windows/runner/Runner.rc b/experimental/varfont_shader_puzzle/windows/runner/Runner.rc new file mode 100644 index 000000000..db18601ec --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "type_jam_github" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "type_jam_github" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "type_jam_github.exe" "\0" + VALUE "ProductName", "type_jam_github" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/experimental/varfont_shader_puzzle/windows/runner/flutter_window.cpp b/experimental/varfont_shader_puzzle/windows/runner/flutter_window.cpp new file mode 100644 index 000000000..b25e363ef --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/flutter_window.cpp @@ -0,0 +1,66 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/experimental/varfont_shader_puzzle/windows/runner/flutter_window.h b/experimental/varfont_shader_puzzle/windows/runner/flutter_window.h new file mode 100644 index 000000000..6da0652f0 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/experimental/varfont_shader_puzzle/windows/runner/main.cpp b/experimental/varfont_shader_puzzle/windows/runner/main.cpp new file mode 100644 index 000000000..03b60cd84 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"type_jam_github", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/experimental/varfont_shader_puzzle/windows/runner/resource.h b/experimental/varfont_shader_puzzle/windows/runner/resource.h new file mode 100644 index 000000000..66a65d1e4 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/experimental/varfont_shader_puzzle/windows/runner/resources/app_icon.ico b/experimental/varfont_shader_puzzle/windows/runner/resources/app_icon.ico new file mode 100644 index 000000000..c04e20caf Binary files /dev/null and b/experimental/varfont_shader_puzzle/windows/runner/resources/app_icon.ico differ diff --git a/experimental/varfont_shader_puzzle/windows/runner/runner.exe.manifest b/experimental/varfont_shader_puzzle/windows/runner/runner.exe.manifest new file mode 100644 index 000000000..a42ea7687 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/windows/runner/utils.cpp b/experimental/varfont_shader_puzzle/windows/runner/utils.cpp new file mode 100644 index 000000000..f5bf9fa0f --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/utils.cpp @@ -0,0 +1,64 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, utf8_string.data(), + target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/experimental/varfont_shader_puzzle/windows/runner/utils.h b/experimental/varfont_shader_puzzle/windows/runner/utils.h new file mode 100644 index 000000000..3879d5475 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/experimental/varfont_shader_puzzle/windows/runner/win32_window.cpp b/experimental/varfont_shader_puzzle/windows/runner/win32_window.cpp new file mode 100644 index 000000000..041a38554 --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/experimental/varfont_shader_puzzle/windows/runner/win32_window.h b/experimental/varfont_shader_puzzle/windows/runner/win32_window.h new file mode 100644 index 000000000..c86632d8a --- /dev/null +++ b/experimental/varfont_shader_puzzle/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responsponds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/experimental/web_dashboard/lib/src/api/api.dart b/experimental/web_dashboard/lib/src/api/api.dart index 0bc43cc5b..09954a97c 100644 --- a/experimental/web_dashboard/lib/src/api/api.dart +++ b/experimental/web_dashboard/lib/src/api/api.dart @@ -48,7 +48,7 @@ abstract class EntryApi { class Category { String name; - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false) String? id; Category(this.name); @@ -75,7 +75,7 @@ class Entry { @JsonKey(fromJson: _timestampToDateTime, toJson: _dateTimeToTimestamp) DateTime time; - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false) String? id; Entry(this.value, this.time); diff --git a/experimental/web_dashboard/pubspec.yaml b/experimental/web_dashboard/pubspec.yaml index 1f6fea8f8..4f3d71cca 100644 --- a/experimental/web_dashboard/pubspec.yaml +++ b/experimental/web_dashboard/pubspec.yaml @@ -8,11 +8,11 @@ environment: dependencies: charts_flutter: ^0.12.0 - cloud_firestore: ^3.1.14 + cloud_firestore: ^4.0.1 collection: ^1.16.0 cupertino_icons: ^1.0.0 - firebase_auth: ^3.3.17 - firebase_core: ^1.16.0 + firebase_auth: ^4.0.1 + firebase_core: ^2.0.0 flutter: sdk: flutter google_sign_in: ^5.3.1 diff --git a/flutter_maps_firestore/.metadata b/flutter_maps_firestore/.metadata index df924690f..9509da45c 100644 --- a/flutter_maps_firestore/.metadata +++ b/flutter_maps_firestore/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,11 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/flutter_maps_firestore/codelab_rebuild.yaml b/flutter_maps_firestore/codelab_rebuild.yaml index 2cdc2badb..90d3c8827 100644 --- a/flutter_maps_firestore/codelab_rebuild.yaml +++ b/flutter_maps_firestore/codelab_rebuild.yaml @@ -6,6 +6,9 @@ steps: - ios - name: Recreate runner flutter: create --platforms ios . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Create GoogleService-Info.plist path: ios/GoogleService-Info.plist replace-contents: | diff --git a/flutter_maps_firestore/ios/Runner.xcodeproj/project.pbxproj b/flutter_maps_firestore/ios/Runner.xcodeproj/project.pbxproj index 8b5758e72..0d26bb695 100644 --- a/flutter_maps_firestore/ios/Runner.xcodeproj/project.pbxproj +++ b/flutter_maps_firestore/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -171,6 +171,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +186,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -478,4 +480,4 @@ /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; -} +} \ No newline at end of file diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/flutter_maps_firestore/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/flutter_maps_firestore/lib/main.dart b/flutter_maps_firestore/lib/main.dart index 821c4d2f0..377b26f7d 100644 --- a/flutter_maps_firestore/lib/main.dart +++ b/flutter_maps_firestore/lib/main.dart @@ -34,8 +34,9 @@ class App extends StatelessWidget { title: 'Ice Creams FTW', home: const HomePage(title: 'Ice Cream Stores in SF'), theme: ThemeData( - primarySwatch: Colors.pink, + colorSchemeSeed: Colors.pink, scaffoldBackgroundColor: Colors.pink[50], + useMaterial3: true, ), ); } diff --git a/flutter_maps_firestore/pubspec.yaml b/flutter_maps_firestore/pubspec.yaml index 794f76844..ed1346ecc 100644 --- a/flutter_maps_firestore/pubspec.yaml +++ b/flutter_maps_firestore/pubspec.yaml @@ -8,8 +8,8 @@ environment: dependencies: flutter: sdk: flutter - cloud_firestore: ^3.1.10 - firebase_core: ^1.2.0 + cloud_firestore: ">=3.1.10 <5.0.0" + firebase_core: ">=1.2.0 <3.0.0" google_maps_flutter: ^2.0.0 google_maps_webservice: ^0.0.20-nullsafety.0 location: ^4.0.0-nullsafety.0 diff --git a/form_app/.metadata b/form_app/.metadata index 31b763f97..d680382e1 100644 --- a/form_app/.metadata +++ b/form_app/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/form_app/android/app/build.gradle b/form_app/android/app/build.gradle index c8f9c7936..40d2f79ba 100644 --- a/form_app/android/app/build.gradle +++ b/form_app/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.formApp.form_app" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/form_app/android/build.gradle b/form_app/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/form_app/android/build.gradle +++ b/form_app/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/form_app/android/gradle/wrapper/gradle-wrapper.properties b/form_app/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/form_app/android/gradle/wrapper/gradle-wrapper.properties +++ b/form_app/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/form_app/codelab_rebuild.yaml b/form_app/codelab_rebuild.yaml index 367305d43..8c0143ea2 100644 --- a/form_app/codelab_rebuild.yaml +++ b/form_app/codelab_rebuild.yaml @@ -1,7 +1,7 @@ # Run with tooling from https://github.com/flutter/codelabs/tree/main/tooling/codelab_rebuild name: Form App rebuild script steps: - - name: Remove fluent_ui runners + - name: Remove runners rmdirs: - android - ios @@ -11,6 +11,9 @@ steps: - web - name: Flutter recreate flutter: create --platforms android,ios,windows,linux,macos,web --org dev.flutter.formApp . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Drop widget_test.dart rm: test/widget_test.dart - name: Flutter upgrade diff --git a/form_app/ios/Runner.xcodeproj/project.pbxproj b/form_app/ios/Runner.xcodeproj/project.pbxproj index 47c04ae62..9bb274d73 100644 --- a/form_app/ios/Runner.xcodeproj/project.pbxproj +++ b/form_app/ios/Runner.xcodeproj/project.pbxproj @@ -3,17 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9309D80CD50D14B12B3D5661 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB02F6700D6F522964B2F8E /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EA14A64E165D1ECB76EE10A8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD7B7DE4FDD7E559734636CF /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -30,13 +30,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0CD8748F1FC26B89CEEEEF95 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7DF4AE70F222DD0D20BF7DFD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -44,9 +44,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - A6B1EA81047BB0E40C5F2E92 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - CBB02F6700D6F522964B2F8E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D12D113EB771D9D773656456 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B749306A6AD397CD346C8439 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + BDB229B3BBA4DEDC1D01CC73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + FD7B7DE4FDD7E559734636CF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,7 +54,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9309D80CD50D14B12B3D5661 /* Pods_Runner.framework in Frameworks */, + EA14A64E165D1ECB76EE10A8 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -78,8 +78,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - E0E3BF2EC2B3A6752223662D /* Pods */, - B2F3943E576ACDC6CB8912D7 /* Frameworks */, + BFF1BF2A44C98E8CC0C24D52 /* Pods */, + D392ABF55961E5DF565E5654 /* Frameworks */, ); sourceTree = ""; }; @@ -106,23 +106,23 @@ path = Runner; sourceTree = ""; }; - B2F3943E576ACDC6CB8912D7 /* Frameworks */ = { + BFF1BF2A44C98E8CC0C24D52 /* Pods */ = { isa = PBXGroup; children = ( - CBB02F6700D6F522964B2F8E /* Pods_Runner.framework */, + BDB229B3BBA4DEDC1D01CC73 /* Pods-Runner.debug.xcconfig */, + B749306A6AD397CD346C8439 /* Pods-Runner.release.xcconfig */, + 0CD8748F1FC26B89CEEEEF95 /* Pods-Runner.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - E0E3BF2EC2B3A6752223662D /* Pods */ = { + D392ABF55961E5DF565E5654 /* Frameworks */ = { isa = PBXGroup; children = ( - D12D113EB771D9D773656456 /* Pods-Runner.debug.xcconfig */, - 7DF4AE70F222DD0D20BF7DFD /* Pods-Runner.release.xcconfig */, - A6B1EA81047BB0E40C5F2E92 /* Pods-Runner.profile.xcconfig */, + FD7B7DE4FDD7E559734636CF /* Pods_Runner.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -132,7 +132,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 846C56F022D8A4454E9D24A7 /* [CP] Check Pods Manifest.lock */, + 14AA61E34C4C5D02F9EF12C6 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -197,44 +197,46 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 14AA61E34C4C5D02F9EF12C6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 846C56F022D8A4454E9D24A7 /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/form_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/form_app/lib/main.dart b/form_app/lib/main.dart index f2b5f3bcf..7517b572e 100644 --- a/form_app/lib/main.dart +++ b/form_app/lib/main.dart @@ -6,6 +6,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:window_size/window_size.dart'; import 'src/autofill.dart'; @@ -41,7 +42,7 @@ void setupWindow() { final demos = [ Demo( name: 'Sign in with HTTP', - route: '/signin_http', + route: 'signin_http', builder: (context) => SignInHttpDemo( // This sample uses a mock HTTP client. httpClient: mockClient, @@ -49,37 +50,56 @@ final demos = [ ), Demo( name: 'Autofill', - route: '/autofill', + route: 'autofill', builder: (context) => const AutofillDemo(), ), Demo( name: 'Form widgets', - route: '/form_widgets', + route: 'form_widgets', builder: (context) => const FormWidgetsDemo(), ), Demo( name: 'Validation', - route: '/validation', + route: 'validation', builder: (context) => const FormValidationDemo(), ), ]; +final router = GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (context, state) => const HomePage(), + routes: [ + for (final demo in demos) + GoRoute( + path: demo.route, + builder: (context, state) => demo.builder(context), + ), + ], + ), + ], +); + class FormApp extends StatelessWidget { const FormApp({super.key}); @override Widget build(BuildContext context) { - return MaterialApp( + return MaterialApp.router( title: 'Form Samples', - theme: ThemeData(primarySwatch: Colors.teal), - routes: Map.fromEntries(demos.map((d) => MapEntry(d.route, d.builder))), - home: const HomePage(), + theme: ThemeData( + colorSchemeSeed: Colors.teal, + useMaterial3: true, + ), + routerConfig: router, ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); + @override Widget build(BuildContext context) { return Scaffold( @@ -103,7 +123,7 @@ class DemoTile extends StatelessWidget { return ListTile( title: Text(demo!.name), onTap: () { - Navigator.pushNamed(context, demo!.route); + context.go('/${demo!.route}'); }, ); } diff --git a/form_app/lib/src/validation.dart b/form_app/lib/src/validation.dart index 5b3a1d35e..07b3201b5 100644 --- a/form_app/lib/src/validation.dart +++ b/form_app/lib/src/validation.dart @@ -27,7 +27,6 @@ class _FormValidationDemoState extends State { Padding( padding: const EdgeInsets.all(8), child: TextButton( - style: TextButton.styleFrom(foregroundColor: Colors.white), child: const Text('Submit'), onPressed: () { // Validate the form by getting the FormState from the GlobalKey @@ -152,7 +151,8 @@ class _FormValidationDemoState extends State { style: Theme.of(context) .textTheme .bodySmall! - .copyWith(color: Theme.of(context).errorColor), + .copyWith( + color: Theme.of(context).colorScheme.error), ), ], ); diff --git a/form_app/macos/Podfile b/form_app/macos/Podfile index dade8dfad..049abe295 100644 --- a/form_app/macos/Podfile +++ b/form_app/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/form_app/macos/Runner.xcodeproj/project.pbxproj b/form_app/macos/Runner.xcodeproj/project.pbxproj index c0acfdf9b..b84068476 100644 --- a/form_app/macos/Runner.xcodeproj/project.pbxproj +++ b/form_app/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,12 +21,12 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1BCE2C88E3BD2B7045E693AE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52066804CB1320B66746DA5A /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - A1A440F5C7D402943BD176C2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1182B28AB63982A2B698B9F /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -53,7 +53,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 16A054A9244A371E3C92CC62 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 240B6E418D8800432E1FB602 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* form_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = form_app.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -68,11 +68,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 52066804CB1320B66746DA5A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7E815B624143334A87DFE6D9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BEC4A415B7EFDC4F01A3444C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D1182B28AB63982A2B698B9F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DD5507146441B996C58A6BEB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + B4426B8D50DDB61E99A81103 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A1A440F5C7D402943BD176C2 /* Pods_Runner.framework in Frameworks */, + 1BCE2C88E3BD2B7045E693AE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -105,7 +105,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - BEDA6D5CABD7E8684DDC3EE9 /* Pods */, + ACFBEA58956E46CC13F8120B /* Pods */, ); sourceTree = ""; }; @@ -152,12 +152,12 @@ path = Runner; sourceTree = ""; }; - BEDA6D5CABD7E8684DDC3EE9 /* Pods */ = { + ACFBEA58956E46CC13F8120B /* Pods */ = { isa = PBXGroup; children = ( - 16A054A9244A371E3C92CC62 /* Pods-Runner.debug.xcconfig */, - BEC4A415B7EFDC4F01A3444C /* Pods-Runner.release.xcconfig */, - DD5507146441B996C58A6BEB /* Pods-Runner.profile.xcconfig */, + 7E815B624143334A87DFE6D9 /* Pods-Runner.debug.xcconfig */, + B4426B8D50DDB61E99A81103 /* Pods-Runner.release.xcconfig */, + 240B6E418D8800432E1FB602 /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; @@ -166,7 +166,7 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - D1182B28AB63982A2B698B9F /* Pods_Runner.framework */, + 52066804CB1320B66746DA5A /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -178,13 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 2B0CC5BC0627E3F13363B344 /* [CP] Check Pods Manifest.lock */, + B0D9AF7C1AB2BAC0B255F52E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1E3430AC2670871C983C239E /* [CP] Embed Pods Frameworks */, + 9BFE12CD834E63A64B7FE3A5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -254,81 +254,82 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1E3430AC2670871C983C239E /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 2B0CC5BC0627E3F13363B344 /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 9BFE12CD834E63A64B7FE3A5 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + B0D9AF7C1AB2BAC0B255F52E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -404,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +484,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +531,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/form_app/macos/Runner/Configs/AppInfo.xcconfig b/form_app/macos/Runner/Configs/AppInfo.xcconfig index 6e6982fb9..c38e5cebf 100644 --- a/form_app/macos/Runner/Configs/AppInfo.xcconfig +++ b/form_app/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = form_app PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.formApp.formApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter.formApp. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter.formApp. All rights reserved. diff --git a/form_app/pubspec.yaml b/form_app/pubspec.yaml index 9041639c1..7a4501bfc 100644 --- a/form_app/pubspec.yaml +++ b/form_app/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.0 - intl: ^0.17.0 + intl: ^0.18.0 http: ^0.13.0 json_annotation: any english_words: ^4.0.0 @@ -18,6 +18,7 @@ dependencies: git: url: https://github.com/google/flutter-desktop-embedding.git path: plugins/window_size + go_router: ^6.0.0 dev_dependencies: flutter_test: diff --git a/form_app/web/index.html b/form_app/web/index.html index 1b38bd2cf..f8502c7c9 100644 --- a/form_app/web/index.html +++ b/form_app/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/form_app/windows/runner/CMakeLists.txt b/form_app/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/form_app/windows/runner/CMakeLists.txt +++ b/form_app/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/form_app/windows/runner/Runner.rc b/form_app/windows/runner/Runner.rc index 7154c24af..46685ba7b 100644 --- a/form_app/windows/runner/Runner.rc +++ b/form_app/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "form_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "form_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter.formApp. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter.formApp. All rights reserved." "\0" VALUE "OriginalFilename", "form_app.exe" "\0" VALUE "ProductName", "form_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/form_app/windows/runner/flutter_window.cpp b/form_app/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/form_app/windows/runner/flutter_window.cpp +++ b/form_app/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/form_app/windows/runner/main.cpp b/form_app/windows/runner/main.cpp index 44b720a5e..14ec2e200 100644 --- a/form_app/windows/runner/main.cpp +++ b/form_app/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"form_app", origin, size)) { + if (!window.Create(L"form_app", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/form_app/windows/runner/win32_window.cpp b/form_app/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/form_app/windows/runner/win32_window.cpp +++ b/form_app/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/form_app/windows/runner/win32_window.h b/form_app/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/form_app/windows/runner/win32_window.h +++ b/form_app/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/game_template/.gitignore b/game_template/.gitignore index a10187af6..cab51fb03 100644 --- a/game_template/.gitignore +++ b/game_template/.gitignore @@ -32,9 +32,6 @@ /build/ .fvm/ -# Web related -lib/generated_plugin_registrant.dart - # Symbolication related app.*.symbols diff --git a/game_template/README.md b/game_template/README.md index 7fa92a079..ad89acec9 100644 --- a/game_template/README.md +++ b/game_template/README.md @@ -536,3 +536,26 @@ flutter pub run flutter_launcher_icons:main You can [configure](https://github.com/fluttercommunity/flutter_launcher_icons#book-guide) the look of the icon in the `flutter_icons:` section of `pubspec.yaml`. + + +# Troubleshooting + +## CocoaPods + +When upgrading to higher versions of Flutter or plugins, you might encounter an error when +building the iOS or macOS app. A good first thing to try is to delete the `ios/Podfile.lock` +file (or `macos/Podfile.lock`, respectively), then trying to build again. (You can achieve +a more thorough cleanup by running `flutter clean` instead.) + +## Warnings in console + +When running the game for the first time, you might see warnings like the following: + +> Note: Some input files use or override a deprecated API. + +or + +> warning: 'viewState' was deprecated in macOS 11.0: Use -initWithState: instead + +These warning come from the various plugins that are used by the template. They are not harmful +and can be ignored. The warnings are meant for the plugin authors, not for you, the game developer. diff --git a/game_template/lib/main.dart b/game_template/lib/main.dart index 8b793aa0b..1e15893c0 100644 --- a/game_template/lib/main.dart +++ b/game_template/lib/main.dart @@ -255,6 +255,7 @@ class MyApp extends StatelessWidget { color: palette.ink, ), ), + useMaterial3: true, ), routeInformationProvider: _router.routeInformationProvider, routeInformationParser: _router.routeInformationParser, diff --git a/game_template/lib/src/level_selection/level_selection_screen.dart b/game_template/lib/src/level_selection/level_selection_screen.dart index 1a9a7076e..c5118872b 100644 --- a/game_template/lib/src/level_selection/level_selection_screen.dart +++ b/game_template/lib/src/level_selection/level_selection_screen.dart @@ -59,9 +59,9 @@ class LevelSelectionScreen extends StatelessWidget { ), ], ), - rectangularMenuArea: ElevatedButton( + rectangularMenuArea: FilledButton( onPressed: () { - GoRouter.of(context).pop(); + GoRouter.of(context).go('/'); }, child: const Text('Back'), ), diff --git a/game_template/lib/src/main_menu/main_menu_screen.dart b/game_template/lib/src/main_menu/main_menu_screen.dart index a8ab0edaf..f390b8c98 100644 --- a/game_template/lib/src/main_menu/main_menu_screen.dart +++ b/game_template/lib/src/main_menu/main_menu_screen.dart @@ -44,7 +44,7 @@ class MainMenuScreen extends StatelessWidget { rectangularMenuArea: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ - ElevatedButton( + FilledButton( onPressed: () { audioController.playSfx(SfxType.buttonTap); GoRouter.of(context).go('/play'); @@ -55,7 +55,7 @@ class MainMenuScreen extends StatelessWidget { if (gamesServicesController != null) ...[ _hideUntilReady( ready: gamesServicesController.signedIn, - child: ElevatedButton( + child: FilledButton( onPressed: () => gamesServicesController.showAchievements(), child: const Text('Achievements'), ), @@ -63,15 +63,15 @@ class MainMenuScreen extends StatelessWidget { _gap, _hideUntilReady( ready: gamesServicesController.signedIn, - child: ElevatedButton( + child: FilledButton( onPressed: () => gamesServicesController.showLeaderboard(), child: const Text('Leaderboard'), ), ), _gap, ], - ElevatedButton( - onPressed: () => GoRouter.of(context).go('/settings'), + FilledButton( + onPressed: () => GoRouter.of(context).push('/settings'), child: const Text('Settings'), ), _gap, diff --git a/game_template/lib/src/play_session/play_session_screen.dart b/game_template/lib/src/play_session/play_session_screen.dart index f38163976..a693e430c 100644 --- a/game_template/lib/src/play_session/play_session_screen.dart +++ b/game_template/lib/src/play_session/play_session_screen.dart @@ -93,8 +93,8 @@ class _PlaySessionScreenState extends State { padding: const EdgeInsets.all(8.0), child: SizedBox( width: double.infinity, - child: ElevatedButton( - onPressed: () => GoRouter.of(context).pop(), + child: FilledButton( + onPressed: () => GoRouter.of(context).go('/play'), child: const Text('Back'), ), ), diff --git a/game_template/lib/src/settings/settings_screen.dart b/game_template/lib/src/settings/settings_screen.dart index 3ef3e0489..c9fb6a777 100644 --- a/game_template/lib/src/settings/settings_screen.dart +++ b/game_template/lib/src/settings/settings_screen.dart @@ -101,7 +101,7 @@ class SettingsScreen extends StatelessWidget { _gap, ], ), - rectangularMenuArea: ElevatedButton( + rectangularMenuArea: FilledButton( onPressed: () { GoRouter.of(context).pop(); }, @@ -169,14 +169,19 @@ class _SettingsLine extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Row( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, children: [ - Text(title, + Expanded( + child: Text( + title, + maxLines: 1, + overflow: TextOverflow.ellipsis, style: const TextStyle( fontFamily: 'Permanent Marker', fontSize: 30, - )), - const Spacer(), + ), + ), + ), icon, ], ), diff --git a/game_template/lib/src/win_game/win_game_screen.dart b/game_template/lib/src/win_game/win_game_screen.dart index 88a5ca2b8..5569cd6a4 100644 --- a/game_template/lib/src/win_game/win_game_screen.dart +++ b/game_template/lib/src/win_game/win_game_screen.dart @@ -61,9 +61,9 @@ class WinGameScreen extends StatelessWidget { ), ], ), - rectangularMenuArea: ElevatedButton( + rectangularMenuArea: FilledButton( onPressed: () { - GoRouter.of(context).pop(); + GoRouter.of(context).go('/play'); }, child: const Text('Continue'), ), diff --git a/game_template/macos/Flutter/GeneratedPluginRegistrant.swift b/game_template/macos/Flutter/GeneratedPluginRegistrant.swift index 273d30bc9..0758d5534 100644 --- a/game_template/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/game_template/macos/Flutter/GeneratedPluginRegistrant.swift @@ -9,14 +9,16 @@ import audioplayers_darwin import firebase_core import firebase_crashlytics import games_services -import path_provider_macos -import shared_preferences_macos +import in_app_purchase_storekit +import path_provider_foundation +import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin")) GamesServicesPlugin.register(with: registry.registrar(forPlugin: "GamesServicesPlugin")) + InAppPurchasePlugin.register(with: registry.registrar(forPlugin: "InAppPurchasePlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/game_template/pubspec.yaml b/game_template/pubspec.yaml index 096a96a1b..c289d3aab 100644 --- a/game_template/pubspec.yaml +++ b/game_template/pubspec.yaml @@ -7,24 +7,24 @@ publish_to: 'none' version: 0.0.1+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ">=2.18.0 <3.0.0" dependencies: flutter: sdk: flutter - audioplayers: ^1.0.1 + audioplayers: ^3.0.0 cupertino_icons: ^1.0.2 - go_router: ^4.4.1 - logging: ^1.0.2 + go_router: ^6.0.1 + logging: ^1.1.0 provider: ^6.0.2 shared_preferences: ^2.0.13 # If you don't need one of the following dependencies, # delete the relevant line below, and get rid of any Dart code # that references the dependency. - firebase_core: ^1.15.0 # Needed for Crashlytics below - firebase_crashlytics: ^2.8.1 # Error reporting + firebase_core: ^2.1.1 # Needed for Crashlytics below + firebase_crashlytics: ^3.0.3 # Error reporting games_services: ^3.0.0 # Achievements and leaderboards google_mobile_ads: ^2.0.1 # Ads in_app_purchase: ^3.0.1 # In-app purchases @@ -33,7 +33,7 @@ dev_dependencies: flutter_test: sdk: flutter - flutter_launcher_icons: ^0.10.0 + flutter_launcher_icons: ^0.11.0 flutter_lints: ^2.0.1 test: ^1.19.0 diff --git a/infinite_list/.metadata b/infinite_list/.metadata index 31b763f97..d680382e1 100644 --- a/infinite_list/.metadata +++ b/infinite_list/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/infinite_list/android/app/build.gradle b/infinite_list/android/app/build.gradle index 3b98760d1..248a1330b 100644 --- a/infinite_list/android/app/build.gradle +++ b/infinite_list/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.infinite_list" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/infinite_list/android/build.gradle b/infinite_list/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/infinite_list/android/build.gradle +++ b/infinite_list/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/infinite_list/android/gradle/wrapper/gradle-wrapper.properties b/infinite_list/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/infinite_list/android/gradle/wrapper/gradle-wrapper.properties +++ b/infinite_list/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/infinite_list/codelab_rebuild.yaml b/infinite_list/codelab_rebuild.yaml index b89d08a72..5971a6094 100644 --- a/infinite_list/codelab_rebuild.yaml +++ b/infinite_list/codelab_rebuild.yaml @@ -11,6 +11,9 @@ steps: - web - name: Recreate runners flutter: create --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Patch macos/Runner/DebugProfile.entitlements path: macos/Runner/DebugProfile.entitlements patch-u: | diff --git a/infinite_list/ios/Runner.xcodeproj/project.pbxproj b/infinite_list/ios/Runner.xcodeproj/project.pbxproj index cb3e7d2be..d72515c10 100644 --- a/infinite_list/ios/Runner.xcodeproj/project.pbxproj +++ b/infinite_list/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,7 +13,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C71D9A61228B6B41CE6FE2C3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE54738E98F1823E94841BE6 /* Pods_Runner.framework */; }; + B033CF029939638640758CC6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90E8D8091C1D53E2DD305713 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -30,15 +30,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0DCE0234E48E2E444500A40F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 315BBCBD918A363E83E8D98F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3E65ACBD081D53FF6433024A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 717F2EEC09BE7FD5192FB899 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 697D5305ECE9B130C6DF44BB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 90E8D8091C1D53E2DD305713 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -46,7 +46,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CE54738E98F1823E94841BE6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B8AC97B417DCA9D4C75DFD7C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,19 +54,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C71D9A61228B6B41CE6FE2C3 /* Pods_Runner.framework in Frameworks */, + B033CF029939638640758CC6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4FC4453B6F1E51736E90892D /* Pods */ = { + 650131E077B7CECAAAA7D0C2 /* Frameworks */ = { isa = PBXGroup; children = ( - 717F2EEC09BE7FD5192FB899 /* Pods-Runner.debug.xcconfig */, - 3E65ACBD081D53FF6433024A /* Pods-Runner.release.xcconfig */, - 0DCE0234E48E2E444500A40F /* Pods-Runner.profile.xcconfig */, + 90E8D8091C1D53E2DD305713 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8F66C158B34B63E21828446C /* Pods */ = { + isa = PBXGroup; + children = ( + B8AC97B417DCA9D4C75DFD7C /* Pods-Runner.debug.xcconfig */, + 315BBCBD918A363E83E8D98F /* Pods-Runner.release.xcconfig */, + 697D5305ECE9B130C6DF44BB /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; @@ -89,8 +97,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 4FC4453B6F1E51736E90892D /* Pods */, - CD7D804D9918CA13D2A294C8 /* Frameworks */, + 8F66C158B34B63E21828446C /* Pods */, + 650131E077B7CECAAAA7D0C2 /* Frameworks */, ); sourceTree = ""; }; @@ -117,14 +125,6 @@ path = Runner; sourceTree = ""; }; - CD7D804D9918CA13D2A294C8 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CE54738E98F1823E94841BE6 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -132,7 +132,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - E89B0FCFB1800CB14D0BE217 /* [CP] Check Pods Manifest.lock */, + DD8A17D54A4E521F5C33E4F3 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -199,6 +199,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -213,6 +214,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -225,7 +227,7 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - E89B0FCFB1800CB14D0BE217 /* [CP] Check Pods Manifest.lock */ = { + DD8A17D54A4E521F5C33E4F3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/infinite_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/infinite_list/lib/main.dart b/infinite_list/lib/main.dart index 57fe74226..37b1eeacc 100644 --- a/infinite_list/lib/main.dart +++ b/infinite_list/lib/main.dart @@ -43,9 +43,10 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => Catalog(), - child: const MaterialApp( + child: MaterialApp( title: 'Infinite List Sample', - home: MyHomePage(), + theme: ThemeData.light(useMaterial3: true), + home: const MyHomePage(), ), ); } diff --git a/infinite_list/macos/Podfile b/infinite_list/macos/Podfile index dade8dfad..049abe295 100644 --- a/infinite_list/macos/Podfile +++ b/infinite_list/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/infinite_list/macos/Runner.xcodeproj/project.pbxproj b/infinite_list/macos/Runner.xcodeproj/project.pbxproj index 8f1d1cd6c..fae0835c2 100644 --- a/infinite_list/macos/Runner.xcodeproj/project.pbxproj +++ b/infinite_list/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,12 +21,12 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 2A0DECCD063130CBA4CB790D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D58235BF2A8BE54A268190C /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + EA133B5E05568773D184FD66 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66604CA5FC8F52AEA6FCF271 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -53,8 +53,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0E885C260FB1468F8FC81D23 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 1E43FFAD1537435A9FE1F753 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* infinite_list.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = infinite_list.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -69,9 +67,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 49257F3C06F85C9E77C2BC31 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 368C165F689C6910791D1E6B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 5975B54656CD91410B818F8D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 66604CA5FC8F52AEA6FCF271 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 7D58235BF2A8BE54A268190C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8BB48CFB9DEEC21F1286C433 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2A0DECCD063130CBA4CB790D /* Pods_Runner.framework in Frameworks */, + EA133B5E05568773D184FD66 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -105,7 +105,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - AB7BB8D642D49CFDD34228CC /* Pods */, + 9F9B61C15F5380A78988BF35 /* Pods */, ); sourceTree = ""; }; @@ -152,12 +152,12 @@ path = Runner; sourceTree = ""; }; - AB7BB8D642D49CFDD34228CC /* Pods */ = { + 9F9B61C15F5380A78988BF35 /* Pods */ = { isa = PBXGroup; children = ( - 49257F3C06F85C9E77C2BC31 /* Pods-Runner.debug.xcconfig */, - 1E43FFAD1537435A9FE1F753 /* Pods-Runner.release.xcconfig */, - 0E885C260FB1468F8FC81D23 /* Pods-Runner.profile.xcconfig */, + 5975B54656CD91410B818F8D /* Pods-Runner.debug.xcconfig */, + 8BB48CFB9DEEC21F1286C433 /* Pods-Runner.release.xcconfig */, + 368C165F689C6910791D1E6B /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; @@ -166,7 +166,7 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 7D58235BF2A8BE54A268190C /* Pods_Runner.framework */, + 66604CA5FC8F52AEA6FCF271 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -178,13 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 4528C24D64EECF396000D69C /* [CP] Check Pods Manifest.lock */, + 606BE1E08EC685D31F9C65ED /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1FD5401A6507EF597DF07B6B /* [CP] Embed Pods Frameworks */, + D7F4BD6CE44F1D2E0AAB46E6 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -254,25 +254,9 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1FD5401A6507EF597DF07B6B /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -308,7 +292,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 4528C24D64EECF396000D69C /* [CP] Check Pods Manifest.lock */ = { + 606BE1E08EC685D31F9C65ED /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -330,6 +314,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + D7F4BD6CE44F1D2E0AAB46E6 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -404,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +484,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +531,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/infinite_list/macos/Runner/Configs/AppInfo.xcconfig b/infinite_list/macos/Runner/Configs/AppInfo.xcconfig index 90a804ca2..aa9000b89 100644 --- a/infinite_list/macos/Runner/Configs/AppInfo.xcconfig +++ b/infinite_list/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = infinite_list PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.infiniteList // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/infinite_list/web/index.html b/infinite_list/web/index.html index cdab1aded..f4f5b3519 100644 --- a/infinite_list/web/index.html +++ b/infinite_list/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/infinite_list/windows/runner/CMakeLists.txt b/infinite_list/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/infinite_list/windows/runner/CMakeLists.txt +++ b/infinite_list/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/infinite_list/windows/runner/Runner.rc b/infinite_list/windows/runner/Runner.rc index 1d49704ed..a33db81f9 100644 --- a/infinite_list/windows/runner/Runner.rc +++ b/infinite_list/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "infinite_list" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "infinite_list" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "infinite_list.exe" "\0" VALUE "ProductName", "infinite_list" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/infinite_list/windows/runner/flutter_window.cpp b/infinite_list/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/infinite_list/windows/runner/flutter_window.cpp +++ b/infinite_list/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/infinite_list/windows/runner/main.cpp b/infinite_list/windows/runner/main.cpp index 86d85cfa0..89671825b 100644 --- a/infinite_list/windows/runner/main.cpp +++ b/infinite_list/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"infinite_list", origin, size)) { + if (!window.Create(L"infinite_list", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/infinite_list/windows/runner/win32_window.cpp b/infinite_list/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/infinite_list/windows/runner/win32_window.cpp +++ b/infinite_list/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/infinite_list/windows/runner/win32_window.h b/infinite_list/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/infinite_list/windows/runner/win32_window.h +++ b/infinite_list/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/isolate_example/.metadata b/isolate_example/.metadata index 49936cf1f..2ea1bd367 100644 --- a/isolate_example/.metadata +++ b/isolate_example/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,23 +13,23 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/isolate_example/android/app/build.gradle b/isolate_example/android/app/build.gradle index 3570593ce..7189d2b9d 100644 --- a/isolate_example/android/app/build.gradle +++ b/isolate_example/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.isolate_example" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/isolate_example/android/build.gradle b/isolate_example/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/isolate_example/android/build.gradle +++ b/isolate_example/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/isolate_example/android/gradle/wrapper/gradle-wrapper.properties b/isolate_example/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/isolate_example/android/gradle/wrapper/gradle-wrapper.properties +++ b/isolate_example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/isolate_example/codelab_rebuild.yaml b/isolate_example/codelab_rebuild.yaml index cc7d53134..cad5c66e6 100644 --- a/isolate_example/codelab_rebuild.yaml +++ b/isolate_example/codelab_rebuild.yaml @@ -10,6 +10,9 @@ steps: - windows - name: Recreate runners flutter: create --org dev.flutter --platforms android,ios,macos,linux,windows . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Flutter upgrade flutter: pub upgrade --major-versions - name: Flutter build macOS diff --git a/isolate_example/ios/Runner.xcodeproj/project.pbxproj b/isolate_example/ios/Runner.xcodeproj/project.pbxproj index 068b96bc9..ae3f2d3b5 100644 --- a/isolate_example/ios/Runner.xcodeproj/project.pbxproj +++ b/isolate_example/ios/Runner.xcodeproj/project.pbxproj @@ -3,17 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6B77D82B84B87C81CD50B227 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EDA99BC2AB82371A95FD5323 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + C0EBE03E5DCAA711D69A5E86 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 89E36CF2748516114DD4DAA0 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -30,14 +30,15 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0A9ADFA6DBD18E2D26D9B1E5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 235262584023E15F3AA8FE80 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1E3266F5C02A9D0473BEC313 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7B9D3CACBF0EBA46A469B3AD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 89E36CF2748516114DD4DAA0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -45,8 +46,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E8C1395E9F6F51C305D4152 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - EDA99BC2AB82371A95FD5323 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A6AD5B15693DE110B667CDE9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,28 +54,28 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6B77D82B84B87C81CD50B227 /* Pods_Runner.framework in Frameworks */, + C0EBE03E5DCAA711D69A5E86 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0613C8A5252A93C033B43D50 /* Pods */ = { + 3A62F5639A81173E6893AF05 /* Pods */ = { isa = PBXGroup; children = ( - 235262584023E15F3AA8FE80 /* Pods-Runner.debug.xcconfig */, - 9E8C1395E9F6F51C305D4152 /* Pods-Runner.release.xcconfig */, - 7B9D3CACBF0EBA46A469B3AD /* Pods-Runner.profile.xcconfig */, + 0A9ADFA6DBD18E2D26D9B1E5 /* Pods-Runner.debug.xcconfig */, + 1E3266F5C02A9D0473BEC313 /* Pods-Runner.release.xcconfig */, + A6AD5B15693DE110B667CDE9 /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; - 45C39602FFF8D511C02669EF /* Frameworks */ = { + 7EF23AEB0C039574E7AF5B7F /* Frameworks */ = { isa = PBXGroup; children = ( - EDA99BC2AB82371A95FD5323 /* Pods_Runner.framework */, + 89E36CF2748516114DD4DAA0 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -97,8 +97,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 0613C8A5252A93C033B43D50 /* Pods */, - 45C39602FFF8D511C02669EF /* Frameworks */, + 3A62F5639A81173E6893AF05 /* Pods */, + 7EF23AEB0C039574E7AF5B7F /* Frameworks */, ); sourceTree = ""; }; @@ -132,7 +132,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - B68A5A4B07195593A0564512 /* [CP] Check Pods Manifest.lock */, + 7202FDE2D8347FA5ABC024D8 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -199,6 +199,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -211,41 +212,42 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 7202FDE2D8347FA5ABC024D8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - B68A5A4B07195593A0564512 /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/isolate_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/isolate_example/lib/data_transfer_page.dart b/isolate_example/lib/data_transfer_page.dart index 3564469b8..941383935 100644 --- a/isolate_example/lib/data_transfer_page.dart +++ b/isolate_example/lib/data_transfer_page.dart @@ -62,7 +62,7 @@ class DataTransferPage extends StatelessWidget { style: ElevatedButton.styleFrom( foregroundColor: (controller.runningTest == 1) ? Colors.blueAccent - : Colors.grey[300]), + : Colors.blueGrey), onPressed: () => controller.generateRandomNumbers(false), child: const Text('Transfer Data to 2nd Isolate'), ), @@ -70,7 +70,7 @@ class DataTransferPage extends StatelessWidget { style: ElevatedButton.styleFrom( foregroundColor: (controller.runningTest == 2) ? Colors.blueAccent - : Colors.grey[300]), + : Colors.blueGrey), onPressed: () => controller.generateRandomNumbers(true), child: const Text('Transfer Data with TransferableTypedData'), ), @@ -78,7 +78,7 @@ class DataTransferPage extends StatelessWidget { style: ElevatedButton.styleFrom( foregroundColor: (controller.runningTest == 3) ? Colors.blueAccent - : Colors.grey[300]), + : Colors.blueGrey), onPressed: controller.generateOnSecondaryIsolate, child: const Text('Generate on 2nd Isolate'), ), diff --git a/isolate_example/lib/main.dart b/isolate_example/lib/main.dart index d158d9c6a..dd1e1c82d 100644 --- a/isolate_example/lib/main.dart +++ b/isolate_example/lib/main.dart @@ -48,6 +48,7 @@ class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( + theme: ThemeData.light(useMaterial3: true), home: DefaultTabController( length: 3, child: Scaffold( diff --git a/isolate_example/macos/Podfile b/isolate_example/macos/Podfile index dade8dfad..049abe295 100644 --- a/isolate_example/macos/Podfile +++ b/isolate_example/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/isolate_example/macos/Runner.xcodeproj/project.pbxproj b/isolate_example/macos/Runner.xcodeproj/project.pbxproj index 95f75e355..db4e6b391 100644 --- a/isolate_example/macos/Runner.xcodeproj/project.pbxproj +++ b/isolate_example/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,12 +21,12 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2EFBFDC15EA930D038647062 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD76DE536B7A46E99AA51BDF /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - D054C4456AC002524D901653 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE37C73142E48B01AEF9FA72 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -53,7 +53,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0C0C64BCA8B5D0F0584798F8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 0BB3457CBC9AA005108CD83E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 323E9B694CFB3DC1BB10D472 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* isolate_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = isolate_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -68,11 +69,10 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 6B189514E66497B47658B142 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 7EB2CB130105495C835E7F63 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - E75627659E56C0883773050B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - EE37C73142E48B01AEF9FA72 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD76DE536B7A46E99AA51BDF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D054C4456AC002524D901653 /* Pods_Runner.framework in Frameworks */, + 2EFBFDC15EA930D038647062 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -105,7 +105,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 6CDA68428E4468DEAFFA309D /* Pods */, + 4DCDFBF71F281C2FFB315F47 /* Pods */, ); sourceTree = ""; }; @@ -152,12 +152,12 @@ path = Runner; sourceTree = ""; }; - 6CDA68428E4468DEAFFA309D /* Pods */ = { + 4DCDFBF71F281C2FFB315F47 /* Pods */ = { isa = PBXGroup; children = ( - 6B189514E66497B47658B142 /* Pods-Runner.debug.xcconfig */, - 0C0C64BCA8B5D0F0584798F8 /* Pods-Runner.release.xcconfig */, - E75627659E56C0883773050B /* Pods-Runner.profile.xcconfig */, + 323E9B694CFB3DC1BB10D472 /* Pods-Runner.debug.xcconfig */, + 7EB2CB130105495C835E7F63 /* Pods-Runner.release.xcconfig */, + 0BB3457CBC9AA005108CD83E /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; @@ -166,7 +166,7 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - EE37C73142E48B01AEF9FA72 /* Pods_Runner.framework */, + BD76DE536B7A46E99AA51BDF /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -178,13 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 3DF6D78EEB19B36EAA03F1C9 /* [CP] Check Pods Manifest.lock */, + 8A42EF316CC735DEC42976C7 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - F245889618B0AAAB1BBF419E /* [CP] Embed Pods Frameworks */, + 60CB5F1584F843985E51A66E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -256,6 +256,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -291,43 +292,43 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 3DF6D78EEB19B36EAA03F1C9 /* [CP] Check Pods Manifest.lock */ = { + 60CB5F1584F843985E51A66E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F245889618B0AAAB1BBF419E /* [CP] Embed Pods Frameworks */ = { + 8A42EF316CC735DEC42976C7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -404,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +484,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +531,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/isolate_example/macos/Runner/Configs/AppInfo.xcconfig b/isolate_example/macos/Runner/Configs/AppInfo.xcconfig index 25efffa72..2056c2f1e 100644 --- a/isolate_example/macos/Runner/Configs/AppInfo.xcconfig +++ b/isolate_example/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = isolate_example PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.isolateExample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/isolate_example/windows/runner/CMakeLists.txt b/isolate_example/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/isolate_example/windows/runner/CMakeLists.txt +++ b/isolate_example/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/isolate_example/windows/runner/Runner.rc b/isolate_example/windows/runner/Runner.rc index 42c4b7004..fe2de5616 100644 --- a/isolate_example/windows/runner/Runner.rc +++ b/isolate_example/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "isolate_example" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "isolate_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "isolate_example.exe" "\0" VALUE "ProductName", "isolate_example" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/isolate_example/windows/runner/flutter_window.cpp b/isolate_example/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/isolate_example/windows/runner/flutter_window.cpp +++ b/isolate_example/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/isolate_example/windows/runner/main.cpp b/isolate_example/windows/runner/main.cpp index 4779464ff..f92114459 100644 --- a/isolate_example/windows/runner/main.cpp +++ b/isolate_example/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"isolate_example", origin, size)) { + if (!window.Create(L"isolate_example", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/isolate_example/windows/runner/win32_window.cpp b/isolate_example/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/isolate_example/windows/runner/win32_window.cpp +++ b/isolate_example/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/isolate_example/windows/runner/win32_window.h b/isolate_example/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/isolate_example/windows/runner/win32_window.h +++ b/isolate_example/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/jsonexample/.metadata b/jsonexample/.metadata index 31b763f97..d680382e1 100644 --- a/jsonexample/.metadata +++ b/jsonexample/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/jsonexample/android/app/build.gradle b/jsonexample/android/app/build.gradle index d784ad873..cba7dcee2 100644 --- a/jsonexample/android/app/build.gradle +++ b/jsonexample/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.jsonexample" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/jsonexample/android/build.gradle b/jsonexample/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/jsonexample/android/build.gradle +++ b/jsonexample/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/jsonexample/android/gradle/wrapper/gradle-wrapper.properties b/jsonexample/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/jsonexample/android/gradle/wrapper/gradle-wrapper.properties +++ b/jsonexample/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/jsonexample/codelab_rebuild.yaml b/jsonexample/codelab_rebuild.yaml index d590eac8d..a0ea4a688 100644 --- a/jsonexample/codelab_rebuild.yaml +++ b/jsonexample/codelab_rebuild.yaml @@ -11,6 +11,9 @@ steps: - web - name: Recreate runners flutter: create --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Remove widget_test.dart rm: test/widget_test.dart - name: Update diff --git a/jsonexample/ios/Runner.xcodeproj/project.pbxproj b/jsonexample/ios/Runner.xcodeproj/project.pbxproj index 9ea6c11f6..19da73705 100644 --- a/jsonexample/ios/Runner.xcodeproj/project.pbxproj +++ b/jsonexample/ios/Runner.xcodeproj/project.pbxproj @@ -3,17 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 437DE8C4DE9B6079F564147A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCA8F1A8F41846E13AC3F12C /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A7DDF634EA3BC8E2323A829C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C859315A755F3A1EBF69C043 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -33,11 +33,10 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 51FA1619E3F8027D449FF99D /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5849AA6BD2F17264903F2230 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 91E2BFF55EDF9BCFCD970AD6 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -45,8 +44,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AEF18767E2FCF3004C46260B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - CCA8F1A8F41846E13AC3F12C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C859315A755F3A1EBF69C043 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F1169A06D46B87FD8DAFF6A1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FBCC960C7BC1F5DA46FE6DF1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,19 +54,22 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 437DE8C4DE9B6079F564147A /* Pods_Runner.framework in Frameworks */, + A7DDF634EA3BC8E2323A829C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 11410BCF91B6BEAB7DFA888D /* Frameworks */ = { + 5F649A66DD658DE5B3F3191F /* Pods */ = { isa = PBXGroup; children = ( - CCA8F1A8F41846E13AC3F12C /* Pods_Runner.framework */, + 91E2BFF55EDF9BCFCD970AD6 /* Pods-Runner.debug.xcconfig */, + F1169A06D46B87FD8DAFF6A1 /* Pods-Runner.release.xcconfig */, + FBCC960C7BC1F5DA46FE6DF1 /* Pods-Runner.profile.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; 9740EEB11CF90186004384FC /* Flutter */ = { @@ -86,8 +89,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - BFE6723843BDFB59CB8E67D2 /* Pods */, - 11410BCF91B6BEAB7DFA888D /* Frameworks */, + 5F649A66DD658DE5B3F3191F /* Pods */, + B799CE94AC927EB932272693 /* Frameworks */, ); sourceTree = ""; }; @@ -114,15 +117,12 @@ path = Runner; sourceTree = ""; }; - BFE6723843BDFB59CB8E67D2 /* Pods */ = { + B799CE94AC927EB932272693 /* Frameworks */ = { isa = PBXGroup; children = ( - AEF18767E2FCF3004C46260B /* Pods-Runner.debug.xcconfig */, - 51FA1619E3F8027D449FF99D /* Pods-Runner.release.xcconfig */, - 5849AA6BD2F17264903F2230 /* Pods-Runner.profile.xcconfig */, + C859315A755F3A1EBF69C043 /* Pods_Runner.framework */, ); - name = Pods; - path = Pods; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ @@ -132,7 +132,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - AE4C7C9D8863A33D792888CA /* [CP] Check Pods Manifest.lock */, + 3000FC5596B3F2D0A11DECE0 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -197,55 +197,57 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 3000FC5596B3F2D0A11DECE0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - AE4C7C9D8863A33D792888CA /* [CP] Check Pods Manifest.lock */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Run Script"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/jsonexample/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/jsonexample/lib/main.dart b/jsonexample/lib/main.dart index 1022b193e..085b99519 100644 --- a/jsonexample/lib/main.dart +++ b/jsonexample/lib/main.dart @@ -33,7 +33,8 @@ class MyApp extends StatelessWidget { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( - primarySwatch: Colors.blue, + colorSchemeSeed: Colors.blue, + useMaterial3: true, ), home: const MyHomePage(), ); diff --git a/jsonexample/macos/Podfile b/jsonexample/macos/Podfile index dade8dfad..049abe295 100644 --- a/jsonexample/macos/Podfile +++ b/jsonexample/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/jsonexample/macos/Runner.xcodeproj/project.pbxproj b/jsonexample/macos/Runner.xcodeproj/project.pbxproj index aa272c66a..cc39437bd 100644 --- a/jsonexample/macos/Runner.xcodeproj/project.pbxproj +++ b/jsonexample/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -26,7 +26,7 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 9E1DF564C6F0C5270B082BAF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26CF5D4F94952D7C080C386A /* Pods_Runner.framework */; }; + C31F41E0680B5AF657E3BFB2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB8545E1057FCC7CEC27035D /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -53,7 +53,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 26CF5D4F94952D7C080C386A /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1197A5D1787399F7C3C97476 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* jsonexample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = jsonexample.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -68,11 +68,11 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4F6C54B02CE0A3C75694FAB1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 961A6C2B83509F4666CFE501 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D33C6A8458290B971C1D199D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F6C96B4218737B4BD3D9B388 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + DB8545E1057FCC7CEC27035D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F729394A6A58F07BEF482B0B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -80,7 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9E1DF564C6F0C5270B082BAF /* Pods_Runner.framework in Frameworks */, + C31F41E0680B5AF657E3BFB2 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -105,7 +105,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 4585CB5EFC238F7A284A9F6B /* Pods */, + 7503DA8974596BB0C15FF78B /* Pods */, ); sourceTree = ""; }; @@ -152,12 +152,12 @@ path = Runner; sourceTree = ""; }; - 4585CB5EFC238F7A284A9F6B /* Pods */ = { + 7503DA8974596BB0C15FF78B /* Pods */ = { isa = PBXGroup; children = ( - 961A6C2B83509F4666CFE501 /* Pods-Runner.debug.xcconfig */, - F6C96B4218737B4BD3D9B388 /* Pods-Runner.release.xcconfig */, - D33C6A8458290B971C1D199D /* Pods-Runner.profile.xcconfig */, + F729394A6A58F07BEF482B0B /* Pods-Runner.debug.xcconfig */, + 1197A5D1787399F7C3C97476 /* Pods-Runner.release.xcconfig */, + 4F6C54B02CE0A3C75694FAB1 /* Pods-Runner.profile.xcconfig */, ); name = Pods; path = Pods; @@ -166,7 +166,7 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 26CF5D4F94952D7C080C386A /* Pods_Runner.framework */, + DB8545E1057FCC7CEC27035D /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -178,13 +178,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 175877957BDAF3DC51B1CD05 /* [CP] Check Pods Manifest.lock */, + 24A2FCA65D89AB3037F2893A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 36ABC32FCFFF2EA0F12932F2 /* [CP] Embed Pods Frameworks */, + A3121D6DBE6C7C96E15CDC13 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -254,7 +254,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 175877957BDAF3DC51B1CD05 /* [CP] Check Pods Manifest.lock */ = { + 24A2FCA65D89AB3037F2893A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -278,6 +278,7 @@ }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -313,7 +314,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 36ABC32FCFFF2EA0F12932F2 /* [CP] Embed Pods Frameworks */ = { + A3121D6DBE6C7C96E15CDC13 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -404,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +484,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +531,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/jsonexample/macos/Runner/Configs/AppInfo.xcconfig b/jsonexample/macos/Runner/Configs/AppInfo.xcconfig index dff180462..964217de3 100644 --- a/jsonexample/macos/Runner/Configs/AppInfo.xcconfig +++ b/jsonexample/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = jsonexample PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.jsonexample // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/jsonexample/web/index.html b/jsonexample/web/index.html index c8e96e5be..878a07752 100644 --- a/jsonexample/web/index.html +++ b/jsonexample/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/jsonexample/windows/runner/CMakeLists.txt b/jsonexample/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/jsonexample/windows/runner/CMakeLists.txt +++ b/jsonexample/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/jsonexample/windows/runner/Runner.rc b/jsonexample/windows/runner/Runner.rc index 9ba2fa75f..8c9a97771 100644 --- a/jsonexample/windows/runner/Runner.rc +++ b/jsonexample/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "jsonexample" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "jsonexample" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "jsonexample.exe" "\0" VALUE "ProductName", "jsonexample" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/jsonexample/windows/runner/flutter_window.cpp b/jsonexample/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/jsonexample/windows/runner/flutter_window.cpp +++ b/jsonexample/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/jsonexample/windows/runner/main.cpp b/jsonexample/windows/runner/main.cpp index 630f7b4b6..ddc902ef7 100644 --- a/jsonexample/windows/runner/main.cpp +++ b/jsonexample/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"jsonexample", origin, size)) { + if (!window.Create(L"jsonexample", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/jsonexample/windows/runner/win32_window.cpp b/jsonexample/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/jsonexample/windows/runner/win32_window.cpp +++ b/jsonexample/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/jsonexample/windows/runner/win32_window.h b/jsonexample/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/jsonexample/windows/runner/win32_window.h +++ b/jsonexample/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/material_3_demo/README.md b/material_3_demo/README.md index e191da583..c55eb4c32 100644 --- a/material_3_demo/README.md +++ b/material_3_demo/README.md @@ -2,9 +2,12 @@ This sample Flutter app showcases Material 3 features in the Flutter Material library. These features include updated components, typography, color system and elevation support. The app supports light and dark themes, different color palettes, as well as the ability to switch between Material 2 and Material 3. For more information about Material 3, the guidance is now live at https://m3.material.io/. +This app also includes new M3 components such as IconButtons, Chips, TextFields, Switches, Checkboxes, Radio buttons and ProgressIndicators. + # Preview -https://user-images.githubusercontent.com/36861262/166358511-43d6a30b-33fe-4680-a4d1-808f087e740e.mp4 +Screen Shot 2022-08-12 at 12 00 28 PMScreen Shot 2022-08-12 at 12 00 38 PM + # Features ## Icon Buttons on the Top App Bar @@ -13,9 +16,9 @@ https://user-images.githubusercontent.com/36861262/166358511-43d6a30b-33fe-4680- Users can switch between Material 2 and Material 3 for the displayed components with this button. This button will bring up a pop-up menu that allows the user to change the base color used for the light and dark themes. This uses a new color seed feature to generate entire color schemes from a single color. - + ## Component Screen -The default screen displays all the updated components in Material 3: AppBar, common Buttons, Floating Action Button(FAB), Card, Dialog, NavigationBar, and NavigationRail. +The default screen displays all the updated components in Material 3: AppBar, common Buttons, Floating Action Button(FAB), Chips, Card, Checkbox, Dialog, NavigationBar, NavigationRail, ProgressIndicators, Radio buttons, TextFields and Switch. ### Adaptive Layout Based on the fact that NavigationRail is not recommended on a small screen, the app changes its layout based on the screen width. If it's played on iOS or Android devices which have a narrow screen, a Navigation Bar will show at the bottom and will be used to navigate. But if it's played as a desktop or a web app, a Navigation Rail will show on the left side and at the same time, a Navigation Bar will show as an example but will not have any functionality. @@ -30,5 +33,3 @@ The Typography Screen displays the text styles used in for the default TextTheme ## Elevation Screen The Elevation screen shows different ways of elevation with a new supported feature "surfaceTintColor" in the Material library. - - diff --git a/material_3_demo/ios/Flutter/Debug.xcconfig b/material_3_demo/ios/Flutter/Debug.xcconfig index 592ceee85..ec97fc6f3 100644 --- a/material_3_demo/ios/Flutter/Debug.xcconfig +++ b/material_3_demo/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/material_3_demo/ios/Flutter/Release.xcconfig b/material_3_demo/ios/Flutter/Release.xcconfig index 592ceee85..c4855bfe2 100644 --- a/material_3_demo/ios/Flutter/Release.xcconfig +++ b/material_3_demo/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/material_3_demo/ios/Podfile b/material_3_demo/ios/Podfile new file mode 100644 index 000000000..fdcc671eb --- /dev/null +++ b/material_3_demo/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/material_3_demo/lib/color_palettes_screen.dart b/material_3_demo/lib/color_palettes_screen.dart index df67e6ba1..db399f817 100644 --- a/material_3_demo/lib/color_palettes_screen.dart +++ b/material_3_demo/lib/color_palettes_screen.dart @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; const Widget divider = SizedBox(height: 10); @@ -17,10 +19,14 @@ class ColorPalettesScreen extends StatelessWidget { @override Widget build(BuildContext context) { Color selectedColor = Theme.of(context).primaryColor; - ThemeData lightTheme = - ThemeData(colorSchemeSeed: selectedColor, brightness: Brightness.light); - ThemeData darkTheme = - ThemeData(colorSchemeSeed: selectedColor, brightness: Brightness.dark); + ThemeData lightTheme = ThemeData( + colorSchemeSeed: selectedColor, + brightness: Brightness.light, + ); + ThemeData darkTheme = ThemeData( + colorSchemeSeed: selectedColor, + brightness: Brightness.dark, + ); Widget schemeLabel(String brightness) { return Padding( @@ -41,19 +47,47 @@ class ColorPalettesScreen extends StatelessWidget { ); } + Widget dynamicColorNotice() => RichText( + textAlign: TextAlign.center, + text: TextSpan( + style: Theme.of(context).textTheme.bodySmall, + children: [ + const TextSpan( + text: 'To create color schemes based on a ' + 'platform\'s implementation of dynamic color, ' + 'use the '), + TextSpan( + text: 'dynamic_color', + style: const TextStyle(decoration: TextDecoration.underline), + recognizer: TapGestureRecognizer() + ..onTap = () async { + final url = Uri.parse( + 'https://pub.dev/packages/dynamic_color', + ); + if (!await launchUrl(url)) { + throw Exception('Could not launch $url'); + } + }, + ), + const TextSpan(text: ' package.'), + ], + ), + ); + return Expanded( child: LayoutBuilder(builder: (context, constraints) { if (constraints.maxWidth < narrowScreenWidthThreshold) { return SingleChildScrollView( child: Column( children: [ + dynamicColorNotice(), divider, - schemeLabel("Light Theme"), + schemeLabel('Light ColorScheme'), schemeView(lightTheme), divider, divider, - schemeLabel("Dark Theme"), - schemeView(darkTheme) + schemeLabel('Dark ColorScheme'), + schemeView(darkTheme), ], ), ); @@ -61,24 +95,29 @@ class ColorPalettesScreen extends StatelessWidget { return SingleChildScrollView( child: Padding( padding: const EdgeInsets.only(top: 5), - child: Row( + child: Column( children: [ - Expanded( - child: Column( - children: [ - schemeLabel("Light Theme"), - schemeView(lightTheme) - ], - ), + dynamicColorNotice(), + Row( + children: [ + Expanded( + child: Column( + children: [ + schemeLabel('Light ColorScheme'), + schemeView(lightTheme), + ], + ), + ), + Expanded( + child: Column( + children: [ + schemeLabel('Dark ColorScheme'), + schemeView(darkTheme), + ], + ), + ), + ], ), - Expanded( - child: Column( - children: [ - schemeLabel("Dark Theme"), - schemeView(darkTheme) - ], - ), - ) ], ), ), @@ -100,46 +139,46 @@ class ColorSchemeView extends StatelessWidget { children: [ ColorGroup(children: [ ColorChip( - label: "primary", + label: 'primary', color: colorScheme.primary, onColor: colorScheme.onPrimary, ), ColorChip( - label: "onPrimary", + label: 'onPrimary', color: colorScheme.onPrimary, onColor: colorScheme.primary), ColorChip( - label: "primaryContainer", + label: 'primaryContainer', color: colorScheme.primaryContainer, onColor: colorScheme.onPrimaryContainer, ), ColorChip( - label: "onPrimaryContainer", + label: 'onPrimaryContainer', color: colorScheme.onPrimaryContainer, onColor: colorScheme.primaryContainer, - ) + ), ]), divider, ColorGroup(children: [ ColorChip( - label: "secondary", + label: 'secondary', color: colorScheme.secondary, onColor: colorScheme.onSecondary, ), ColorChip( - label: "onSecondary", + label: 'onSecondary', color: colorScheme.onSecondary, onColor: colorScheme.secondary, ), ColorChip( - label: "secondaryContainer", + label: 'secondaryContainer', color: colorScheme.secondaryContainer, onColor: colorScheme.onSecondaryContainer, ), ColorChip( - label: "onSecondaryContainer", + label: 'onSecondaryContainer', color: colorScheme.onSecondaryContainer, - onColor: colorScheme.secondaryContainer) + onColor: colorScheme.secondaryContainer), ]), divider, ColorGroup( @@ -248,10 +287,12 @@ class ColorGroup extends StatelessWidget { @override Widget build(BuildContext context) { - return Card( - clipBehavior: Clip.antiAlias, - child: Column( - children: children, + return RepaintBoundary( + child: Card( + clipBehavior: Clip.antiAlias, + child: Column( + children: children, + ), ), ); } diff --git a/material_3_demo/lib/component_screen.dart b/material_3_demo/lib/component_screen.dart index 32ef5b5c5..ff3c8bd01 100644 --- a/material_3_demo/lib/component_screen.dart +++ b/material_3_demo/lib/component_screen.dart @@ -3,73 +3,172 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; -class ComponentScreen extends StatelessWidget { - const ComponentScreen({super.key, required this.showNavBottomBar}); +const rowDivider = SizedBox(width: 20); +const colDivider = SizedBox(height: 10); +const tinySpacing = 3.0; +const smallSpacing = 10.0; +const double cardWidth = 115; +const double widthConstraint = 450; + +class FirstComponentList extends StatelessWidget { + const FirstComponentList({ + super.key, + required this.showNavBottomBar, + required this.scaffoldKey, + required this.showSecondList, + }); final bool showNavBottomBar; + final GlobalKey scaffoldKey; + final bool showSecondList; @override Widget build(BuildContext context) { - return Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Align( - alignment: Alignment.topCenter, - child: SizedBox( - width: _maxWidthConstraint, - child: ListView( - shrinkWrap: true, - children: [ - _colDivider, - _colDivider, - const Buttons(), - _colDivider, - const FloatingActionButtons(), - _colDivider, - const Cards(), - _colDivider, - const Dialogs(), - _colDivider, - showNavBottomBar - ? const NavigationBars( - selectedIndex: 0, - isExampleBar: true, - ) - : Container(), - ], - ), - ), - ), - ), + return ListView( + padding: showSecondList + ? const EdgeInsetsDirectional.only(end: smallSpacing) + : EdgeInsets.zero, + children: [ + const Actions(), + colDivider, + const Communication(), + colDivider, + const Containment(), + if (!showSecondList) ...[ + colDivider, + Navigation(scaffoldKey: scaffoldKey), + colDivider, + const Selection(), + colDivider, + const TextInputs() + ], + ], ); } } -const _rowDivider = SizedBox(width: 10); -const _colDivider = SizedBox(height: 10); -const double _cardWidth = 115; -const double _maxWidthConstraint = 400; +class SecondComponentList extends StatelessWidget { + const SecondComponentList({ + super.key, + required this.scaffoldKey, + }); -void Function()? handlePressed( - BuildContext context, bool isDisabled, String buttonName) { - return isDisabled - ? null - : () { - final snackBar = SnackBar( - content: Text( - 'Yay! $buttonName is clicked!', - style: TextStyle(color: Theme.of(context).colorScheme.surface), - ), - action: SnackBarAction( - textColor: Theme.of(context).colorScheme.surface, - label: 'Close', - onPressed: () {}, - ), - ); + final GlobalKey scaffoldKey; - ScaffoldMessenger.of(context).showSnackBar(snackBar); - }; + @override + Widget build(BuildContext context) { + return ListView( + padding: const EdgeInsetsDirectional.only(end: smallSpacing), + children: [ + Navigation(scaffoldKey: scaffoldKey), + colDivider, + const Selection(), + colDivider, + const TextInputs(), + ], + ); + } +} + +class Actions extends StatelessWidget { + const Actions({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Actions', children: [ + Buttons(), + FloatingActionButtons(), + IconToggleButtons(), + SegmentedButtons(), + ]); + } +} + +class Communication extends StatelessWidget { + const Communication({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Communication', children: [ + NavigationBars( + selectedIndex: 1, + isExampleBar: true, + isBadgeExample: true, + ), + ProgressIndicators(), + SnackBarSection(), + ]); + } +} + +class Containment extends StatelessWidget { + const Containment({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Containment', children: [ + BottomSheetSection(), + Cards(), + Dialogs(), + Dividers(), + // TODO: Add Lists, https://github.com/flutter/flutter/issues/114006 + // TODO: Add Side sheets, https://github.com/flutter/flutter/issues/119328 + ]); + } +} + +class Navigation extends StatelessWidget { + const Navigation({super.key, required this.scaffoldKey}); + + final GlobalKey scaffoldKey; + + @override + Widget build(BuildContext context) { + return ComponentGroupDecoration(label: 'Navigation', children: [ + const BottomAppBars(), + const NavigationBars( + selectedIndex: 0, + isExampleBar: true, + ), + NavigationDrawers(scaffoldKey: scaffoldKey), + const NavigationRails(), + // TODO: Add Search https://github.com/flutter/flutter/issues/117483 + const Tabs(), + const TopAppBars(), + ]); + } +} + +class Selection extends StatelessWidget { + const Selection({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration(label: 'Selection', children: [ + Checkboxes(), + Chips(), + // TODO: Add Date pickers https://github.com/flutter/flutter/issues/101481 + Menus(), + Radios(), + Sliders(), + Switches(), + // TODO: Add Time pickers https://github.com/flutter/flutter/issues/101480 + ]); + } +} + +class TextInputs extends StatelessWidget { + const TextInputs({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentGroupDecoration( + label: 'Text inputs', + children: [TextFields()], + ); + } } class Buttons extends StatefulWidget { @@ -82,15 +181,21 @@ class Buttons extends StatefulWidget { class _ButtonsState extends State { @override Widget build(BuildContext context) { - return Wrap( - alignment: WrapAlignment.spaceEvenly, - children: const [ - ButtonsWithoutIcon(isDisabled: false), - _rowDivider, - ButtonsWithIcon(), - _rowDivider, - ButtonsWithoutIcon(isDisabled: true), - ], + return ComponentDecoration( + label: 'Common buttons', + tooltipMessage: + 'Use ElevatedButton, FilledButton, FilledButton.tonal, OutlinedButton, or TextButton', + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: const [ + ButtonsWithoutIcon(isDisabled: false), + ButtonsWithIcon(), + ButtonsWithoutIcon(isDisabled: true), + ], + ), + ), ); } } @@ -102,50 +207,38 @@ class ButtonsWithoutIcon extends StatelessWidget { @override Widget build(BuildContext context) { - return IntrinsicWidth( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ElevatedButton( - onPressed: handlePressed(context, isDisabled, "ElevatedButton"), - child: const Text("Elevated"), - ), - _colDivider, - ElevatedButton( - style: ElevatedButton.styleFrom( - // Foreground color - // ignore: deprecated_member_use - onPrimary: Theme.of(context).colorScheme.onPrimary, - // Background color - // ignore: deprecated_member_use - primary: Theme.of(context).colorScheme.primary, - ).copyWith(elevation: ButtonStyleButton.allOrNull(0.0)), - onPressed: handlePressed(context, isDisabled, "FilledButton"), - child: const Text('Filled'), - ), - _colDivider, - ElevatedButton( - style: ElevatedButton.styleFrom( - // Foreground color - // ignore: deprecated_member_use - onPrimary: Theme.of(context).colorScheme.onSecondaryContainer, - // Background color - // ignore: deprecated_member_use - primary: Theme.of(context).colorScheme.secondaryContainer, - ).copyWith(elevation: ButtonStyleButton.allOrNull(0.0)), - onPressed: handlePressed(context, isDisabled, "FilledTonalButton"), - child: const Text('Filled Tonal'), - ), - _colDivider, - OutlinedButton( - onPressed: handlePressed(context, isDisabled, "OutlinedButton"), - child: const Text("Outlined"), - ), - _colDivider, - TextButton( - onPressed: handlePressed(context, isDisabled, "TextButton"), - child: const Text("Text")), - ], + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 5.0), + child: IntrinsicWidth( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ElevatedButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Elevated'), + ), + colDivider, + FilledButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Filled'), + ), + colDivider, + FilledButton.tonal( + onPressed: isDisabled ? null : () {}, + child: const Text('Filled tonal'), + ), + colDivider, + OutlinedButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Outlined'), + ), + colDivider, + TextButton( + onPressed: isDisabled ? null : () {}, + child: const Text('Text'), + ), + ], + ), ), ); } @@ -156,59 +249,43 @@ class ButtonsWithIcon extends StatelessWidget { @override Widget build(BuildContext context) { - return IntrinsicWidth( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ElevatedButton.icon( - onPressed: - handlePressed(context, false, "ElevatedButton with Icon"), - icon: const Icon(Icons.add), - label: const Text("Icon"), - ), - _colDivider, - ElevatedButton.icon( - style: ElevatedButton.styleFrom( - // Foreground color - // ignore: deprecated_member_use - onPrimary: Theme.of(context).colorScheme.onPrimary, - // Background color - // ignore: deprecated_member_use - primary: Theme.of(context).colorScheme.primary, - ).copyWith(elevation: ButtonStyleButton.allOrNull(0.0)), - onPressed: handlePressed(context, false, "FilledButton with Icon"), - label: const Text('Icon'), - icon: const Icon(Icons.add), - ), - _colDivider, - ElevatedButton.icon( - style: ElevatedButton.styleFrom( - // Foreground color - // ignore: deprecated_member_use - onPrimary: Theme.of(context).colorScheme.onSecondaryContainer, - // Background color - // ignore: deprecated_member_use - primary: Theme.of(context).colorScheme.secondaryContainer, - ).copyWith(elevation: ButtonStyleButton.allOrNull(0.0)), - onPressed: - handlePressed(context, false, "FilledTonalButton with Icon"), - label: const Text('Icon'), - icon: const Icon(Icons.add), - ), - _colDivider, - OutlinedButton.icon( - onPressed: - handlePressed(context, false, "OutlinedButton with Icon"), - icon: const Icon(Icons.add), - label: const Text("Icon"), - ), - _colDivider, - TextButton.icon( - onPressed: handlePressed(context, false, "TextButton with Icon"), - icon: const Icon(Icons.add), - label: const Text("Icon"), - ) - ], + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: IntrinsicWidth( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ElevatedButton.icon( + onPressed: () {}, + icon: const Icon(Icons.add), + label: const Text('Icon'), + ), + colDivider, + FilledButton.icon( + onPressed: () {}, + label: const Text('Icon'), + icon: const Icon(Icons.add), + ), + colDivider, + FilledButton.tonalIcon( + onPressed: () {}, + label: const Text('Icon'), + icon: const Icon(Icons.add), + ), + colDivider, + OutlinedButton.icon( + onPressed: () {}, + icon: const Icon(Icons.add), + label: const Text('Icon'), + ), + colDivider, + TextButton.icon( + onPressed: () {}, + icon: const Icon(Icons.add), + label: const Text('Icon'), + ) + ], + ), ), ); } @@ -219,30 +296,34 @@ class FloatingActionButtons extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), + return ComponentDecoration( + label: 'Floating action buttons', + tooltipMessage: + 'Use FloatingActionButton or FloatingActionButton.extended', child: Wrap( - alignment: WrapAlignment.spaceEvenly, crossAxisAlignment: WrapCrossAlignment.center, + runSpacing: smallSpacing, + spacing: smallSpacing, children: [ FloatingActionButton.small( onPressed: () {}, + tooltip: 'Small', child: const Icon(Icons.add), ), - _rowDivider, - FloatingActionButton( - onPressed: () {}, - child: const Icon(Icons.add), - ), - _rowDivider, FloatingActionButton.extended( onPressed: () {}, + tooltip: 'Extended', icon: const Icon(Icons.add), - label: const Text("Create"), + label: const Text('Create'), + ), + FloatingActionButton( + onPressed: () {}, + tooltip: 'Standard', + child: const Icon(Icons.add), ), - _rowDivider, FloatingActionButton.large( onPressed: () {}, + tooltip: 'Large', child: const Icon(Icons.add), ), ], @@ -256,26 +337,30 @@ class Cards extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), + return ComponentDecoration( + label: 'Cards', + tooltipMessage: 'Use Card', child: Wrap( alignment: WrapAlignment.spaceEvenly, children: [ SizedBox( - width: _cardWidth, + width: cardWidth, child: Card( child: Container( - padding: const EdgeInsets.all(10), + padding: const EdgeInsets.fromLTRB(10, 5, 5, 10), child: Column( - children: const [ + children: [ Align( alignment: Alignment.topRight, - child: Icon(Icons.more_vert), + child: IconButton( + icon: const Icon(Icons.more_vert), + onPressed: () {}, + ), ), - SizedBox(height: 35), - Align( + const SizedBox(height: 20), + const Align( alignment: Alignment.bottomLeft, - child: Text("Elevated"), + child: Text('Elevated'), ) ], ), @@ -283,22 +368,25 @@ class Cards extends StatelessWidget { ), ), SizedBox( - width: _cardWidth, + width: cardWidth, child: Card( color: Theme.of(context).colorScheme.surfaceVariant, elevation: 0, child: Container( - padding: const EdgeInsets.all(10), + padding: const EdgeInsets.fromLTRB(10, 5, 5, 10), child: Column( - children: const [ + children: [ Align( alignment: Alignment.topRight, - child: Icon(Icons.more_vert), + child: IconButton( + icon: const Icon(Icons.more_vert), + onPressed: () {}, + ), ), - SizedBox(height: 35), - Align( + const SizedBox(height: 20), + const Align( alignment: Alignment.bottomLeft, - child: Text("Filled"), + child: Text('Filled'), ) ], ), @@ -306,7 +394,7 @@ class Cards extends StatelessWidget { ), ), SizedBox( - width: _cardWidth, + width: cardWidth, child: Card( elevation: 0, shape: RoundedRectangleBorder( @@ -316,17 +404,20 @@ class Cards extends StatelessWidget { borderRadius: const BorderRadius.all(Radius.circular(12)), ), child: Container( - padding: const EdgeInsets.all(10), + padding: const EdgeInsets.fromLTRB(10, 5, 5, 10), child: Column( - children: const [ + children: [ Align( alignment: Alignment.topRight, - child: Icon(Icons.more_vert), + child: IconButton( + icon: const Icon(Icons.more_vert), + onPressed: () {}, + ), ), - SizedBox(height: 35), - Align( + const SizedBox(height: 20), + const Align( alignment: Alignment.bottomLeft, - child: Text("Outlined"), + child: Text('Outlined'), ) ], ), @@ -339,6 +430,161 @@ class Cards extends StatelessWidget { } } +class _ClearButton extends StatelessWidget { + const _ClearButton({required this.controller}); + + final TextEditingController controller; + + @override + Widget build(BuildContext context) => IconButton( + icon: const Icon(Icons.clear), + onPressed: () => controller.clear(), + ); +} + +class TextFields extends StatefulWidget { + const TextFields({super.key}); + + @override + State createState() => _TextFieldsState(); +} + +class _TextFieldsState extends State { + final TextEditingController _controllerFilled = TextEditingController(); + final TextEditingController _controllerOutlined = TextEditingController(); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Text fields', + tooltipMessage: 'Use TextField with different InputDecoration', + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: TextField( + controller: _controllerFilled, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerFilled), + labelText: 'Filled', + hintText: 'hint text', + helperText: 'supporting text', + filled: true, + ), + ), + ), + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: SizedBox( + width: 200, + child: TextField( + maxLength: 10, + maxLengthEnforcement: MaxLengthEnforcement.none, + controller: _controllerFilled, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerFilled), + labelText: 'Filled', + hintText: 'hint text', + helperText: 'supporting text', + filled: true, + errorText: 'error text', + ), + ), + ), + ), + const SizedBox(width: smallSpacing), + Flexible( + child: SizedBox( + width: 200, + child: TextField( + controller: _controllerFilled, + enabled: false, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerFilled), + labelText: 'Disabled', + hintText: 'hint text', + helperText: 'supporting text', + filled: true, + ), + ), + ), + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: TextField( + controller: _controllerOutlined, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: _ClearButton(controller: _controllerOutlined), + labelText: 'Outlined', + hintText: 'hint text', + helperText: 'supporting text', + border: const OutlineInputBorder(), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(smallSpacing), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: SizedBox( + width: 200, + child: TextField( + controller: _controllerOutlined, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: + _ClearButton(controller: _controllerOutlined), + labelText: 'Outlined', + hintText: 'hint text', + helperText: 'supporting text', + errorText: 'error text', + border: const OutlineInputBorder(), + filled: true, + ), + ), + ), + ), + const SizedBox(width: smallSpacing), + Flexible( + child: SizedBox( + width: 200, + child: TextField( + controller: _controllerOutlined, + enabled: false, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + suffixIcon: + _ClearButton(controller: _controllerOutlined), + labelText: 'Disabled', + hintText: 'hint text', + helperText: 'supporting text', + border: const OutlineInputBorder(), + filled: true, + ), + ), + ), + ), + ])), + ], + ), + ); + } +} + class Dialogs extends StatefulWidget { const Dialogs({super.key}); @@ -351,16 +597,16 @@ class _DialogsState extends State { showDialog( context: context, builder: (context) => AlertDialog( - title: const Text("Basic Dialog Title"), + title: const Text('What is a dialog?'), content: const Text( - "A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made."), + 'A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made.'), actions: [ TextButton( - child: const Text('Dismiss'), + child: const Text('Okay'), onPressed: () => Navigator.of(context).pop(), ), - TextButton( - child: const Text('Action'), + FilledButton( + child: const Text('Dismiss'), onPressed: () => Navigator.of(context).pop(), ), ], @@ -368,158 +614,1661 @@ class _DialogsState extends State { ); } + void openFullscreenDialog(BuildContext context) { + showDialog( + context: context, + builder: (context) => Dialog.fullscreen( + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Scaffold( + appBar: AppBar( + title: const Text('Full-screen dialog'), + centerTitle: false, + leading: IconButton( + icon: const Icon(Icons.close), + onPressed: () => Navigator.of(context).pop(), + ), + actions: [ + TextButton( + child: const Text('Close'), + onPressed: () => Navigator.of(context).pop(), + ), + ], + ), + ), + ), + ), + ); + } + @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: TextButton( - child: const Text( - "Open Dialog", - style: TextStyle(fontWeight: FontWeight.bold), - ), - onPressed: () => openDialog(context), + return ComponentDecoration( + label: 'Dialog', + tooltipMessage: + 'Use showDialog with Dialog.fullscreen, AlertDialog, or SimpleDialog', + child: Wrap( + alignment: WrapAlignment.spaceBetween, + children: [ + TextButton( + child: const Text( + 'Show dialog', + style: TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () => openDialog(context), + ), + TextButton( + child: const Text( + 'Show full-screen dialog', + style: TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () => openFullscreenDialog(context), + ), + ], ), ); } } -const List appBarDestinations = [ - NavigationDestination( - tooltip: "", - icon: Icon(Icons.widgets_outlined), - label: 'Components', - selectedIcon: Icon(Icons.widgets), - ), - NavigationDestination( - tooltip: "", - icon: Icon(Icons.format_paint_outlined), - label: 'Color', - selectedIcon: Icon(Icons.format_paint), - ), - NavigationDestination( - tooltip: "", - icon: Icon(Icons.text_snippet_outlined), - label: 'Typography', - selectedIcon: Icon(Icons.text_snippet), - ), - NavigationDestination( - tooltip: "", - icon: Icon(Icons.invert_colors_on_outlined), - label: 'Elevation', - selectedIcon: Icon(Icons.opacity), - ) -]; +class Dividers extends StatelessWidget { + const Dividers({super.key}); -final List navRailDestinations = appBarDestinations - .map( - (destination) => NavigationRailDestination( - icon: Tooltip( - message: destination.label, - child: destination.icon, - ), - selectedIcon: Tooltip( - message: destination.label, - child: destination.selectedIcon, - ), - label: Text(destination.label), + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Dividers', + tooltipMessage: 'Use Divider or VerticalDivider', + child: Column( + children: const [ + Divider(key: Key('divider')), + ], ), - ) - .toList(); + ); + } +} -const List exampleBarDestinations = [ - NavigationDestination( - tooltip: "", - icon: Icon(Icons.explore_outlined), - label: 'Explore', - selectedIcon: Icon(Icons.explore), - ), - NavigationDestination( - tooltip: "", - icon: Icon(Icons.pets_outlined), - label: 'Pets', - selectedIcon: Icon(Icons.pets), - ), - NavigationDestination( - tooltip: "", - icon: Icon(Icons.account_box_outlined), - label: 'Account', - selectedIcon: Icon(Icons.account_box), - ) -]; +class Switches extends StatelessWidget { + const Switches({super.key}); -class NavigationBars extends StatefulWidget { - final void Function(int)? onSelectItem; - final int selectedIndex; - final bool isExampleBar; + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Switches', + tooltipMessage: 'Use SwitchListTile or Switch', + child: Column( + children: const [ + SwitchRow(isEnabled: true), + SwitchRow(isEnabled: false), + ], + ), + ); + } +} - const NavigationBars( - {super.key, - this.onSelectItem, - required this.selectedIndex, - required this.isExampleBar}); +class SwitchRow extends StatefulWidget { + const SwitchRow({super.key, required this.isEnabled}); + + final bool isEnabled; @override - State createState() => _NavigationBarsState(); + State createState() => _SwitchRowState(); } -class _NavigationBarsState extends State { - int _selectedIndex = 0; +class _SwitchRowState extends State { + bool value0 = false; + bool value1 = true; - @override - void initState() { - super.initState(); - _selectedIndex = widget.selectedIndex; - } + final MaterialStateProperty thumbIcon = + MaterialStateProperty.resolveWith((states) { + if (states.contains(MaterialState.selected)) { + return const Icon(Icons.check); + } + return const Icon(Icons.close); + }); @override Widget build(BuildContext context) { - return NavigationBar( - selectedIndex: _selectedIndex, - onDestinationSelected: (index) { - setState(() { - _selectedIndex = index; - }); - if (!widget.isExampleBar) widget.onSelectItem!(index); - }, - destinations: - widget.isExampleBar ? exampleBarDestinations : appBarDestinations, + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + // TODO: use SwitchListTile when thumbIcon is available https://github.com/flutter/flutter/issues/118616 + Switch( + value: value0, + onChanged: widget.isEnabled + ? (value) { + setState(() { + value0 = value; + }); + } + : null, + ), + Switch( + thumbIcon: thumbIcon, + value: value1, + onChanged: widget.isEnabled + ? (value) { + setState(() { + value1 = value; + }); + } + : null, + ), + ], ); } } -class NavigationRailSection extends StatefulWidget { - final void Function(int) onSelectItem; - final int selectedIndex; - - const NavigationRailSection( - {super.key, required this.onSelectItem, required this.selectedIndex}); +class Checkboxes extends StatefulWidget { + const Checkboxes({super.key}); @override - State createState() => _NavigationRailSectionState(); + State createState() => _CheckboxesState(); } -class _NavigationRailSectionState extends State { - int _selectedIndex = 0; +class _CheckboxesState extends State { + bool? isChecked0 = true; + bool? isChecked1; + bool? isChecked2 = false; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Checkboxes', + tooltipMessage: 'Use CheckboxListTile or Checkbox', + child: Column( + children: [ + CheckboxListTile( + tristate: true, + value: isChecked0, + title: const Text('Option 1'), + onChanged: (value) { + setState(() { + isChecked0 = value; + }); + }, + ), + CheckboxListTile( + tristate: true, + value: isChecked1, + title: const Text('Option 2'), + onChanged: (value) { + setState(() { + isChecked1 = value; + }); + }, + ), + CheckboxListTile( + tristate: true, + value: isChecked2, + title: const Text('Option 3'), + // TODO: showcase error state https://github.com/flutter/flutter/issues/118616 + onChanged: (value) { + setState(() { + isChecked2 = value; + }); + }, + ), + const CheckboxListTile( + tristate: true, + title: Text('Option 4'), + value: true, + onChanged: null, + ), + ], + ), + ); + } +} + +enum Value { first, second } + +class Radios extends StatefulWidget { + const Radios({super.key}); + + @override + State createState() => _RadiosState(); +} + +enum Options { option1, option2, option3 } + +class _RadiosState extends State { + Options? _selectedOption = Options.option1; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Radio buttons', + tooltipMessage: 'Use RadioListTile or Radio', + child: Column( + children: [ + RadioListTile( + title: const Text('Option 1'), + value: Options.option1, + groupValue: _selectedOption, + onChanged: (value) { + setState(() { + _selectedOption = value; + }); + }, + ), + RadioListTile( + title: const Text('Option 2'), + value: Options.option2, + groupValue: _selectedOption, + onChanged: (value) { + setState(() { + _selectedOption = value; + }); + }, + ), + RadioListTile( + title: const Text('Option 3'), + value: Options.option3, + groupValue: _selectedOption, + onChanged: null, + ), + ], + ), + ); + } +} + +class ProgressIndicators extends StatefulWidget { + const ProgressIndicators({super.key}); + + @override + State createState() => _ProgressIndicatorsState(); +} + +class _ProgressIndicatorsState extends State { + bool playProgressIndicator = false; + + @override + Widget build(BuildContext context) { + final double? progressValue = playProgressIndicator ? null : 0.7; + + return ComponentDecoration( + label: 'Progress indicators', + tooltipMessage: + 'Use CircularProgressIndicator or LinearProgressIndicator', + child: Column( + children: [ + Row( + children: [ + IconButton( + isSelected: playProgressIndicator, + selectedIcon: const Icon(Icons.pause), + icon: const Icon(Icons.play_arrow), + onPressed: () { + setState(() { + playProgressIndicator = !playProgressIndicator; + }); + }, + ), + Expanded( + child: Row( + children: [ + rowDivider, + CircularProgressIndicator( + value: progressValue, + ), + rowDivider, + Expanded( + child: LinearProgressIndicator( + value: progressValue, + ), + ), + rowDivider, + ], + ), + ), + ], + ), + ], + ), + ); + } +} + +const List appBarDestinations = [ + NavigationDestination( + tooltip: '', + icon: Icon(Icons.widgets_outlined), + label: 'Components', + selectedIcon: Icon(Icons.widgets), + ), + NavigationDestination( + tooltip: '', + icon: Icon(Icons.format_paint_outlined), + label: 'Color', + selectedIcon: Icon(Icons.format_paint), + ), + NavigationDestination( + tooltip: '', + icon: Icon(Icons.text_snippet_outlined), + label: 'Typography', + selectedIcon: Icon(Icons.text_snippet), + ), + NavigationDestination( + tooltip: '', + icon: Icon(Icons.invert_colors_on_outlined), + label: 'Elevation', + selectedIcon: Icon(Icons.opacity), + ) +]; + +const List exampleBarDestinations = [ + NavigationDestination( + tooltip: '', + icon: Icon(Icons.explore_outlined), + label: 'Explore', + selectedIcon: Icon(Icons.explore), + ), + NavigationDestination( + tooltip: '', + icon: Icon(Icons.pets_outlined), + label: 'Pets', + selectedIcon: Icon(Icons.pets), + ), + NavigationDestination( + tooltip: '', + icon: Icon(Icons.account_box_outlined), + label: 'Account', + selectedIcon: Icon(Icons.account_box), + ) +]; + +List barWithBadgeDestinations = [ + NavigationDestination( + tooltip: '', + icon: Badge.count(count: 1000, child: const Icon(Icons.mail_outlined)), + label: 'Mail', + selectedIcon: Badge.count(count: 1000, child: const Icon(Icons.mail)), + ), + const NavigationDestination( + tooltip: '', + icon: Badge(label: Text('10'), child: Icon(Icons.chat_bubble_outline)), + label: 'Chat', + selectedIcon: Badge(label: Text('10'), child: Icon(Icons.chat_bubble)), + ), + const NavigationDestination( + tooltip: '', + icon: Badge(child: Icon(Icons.group_outlined)), + label: 'Rooms', + selectedIcon: Badge(child: Icon(Icons.group_rounded)), + ), + NavigationDestination( + tooltip: '', + icon: Badge.count(count: 3, child: const Icon(Icons.videocam_outlined)), + label: 'Meet', + selectedIcon: Badge.count(count: 3, child: const Icon(Icons.videocam)), + ) +]; + +class NavigationBars extends StatefulWidget { + const NavigationBars({ + super.key, + this.onSelectItem, + required this.selectedIndex, + required this.isExampleBar, + this.isBadgeExample, + }); + + final void Function(int)? onSelectItem; + final int selectedIndex; + final bool isExampleBar; + final bool? isBadgeExample; + + @override + State createState() => _NavigationBarsState(); +} + +class _NavigationBarsState extends State { + late int selectedIndex; @override void initState() { super.initState(); - _selectedIndex = widget.selectedIndex; + selectedIndex = widget.selectedIndex; + } + + @override + void didUpdateWidget(covariant NavigationBars oldWidget) { + super.didUpdateWidget(oldWidget); + if (widget.selectedIndex != oldWidget.selectedIndex) { + selectedIndex = widget.selectedIndex; + } } @override Widget build(BuildContext context) { - return NavigationRail( - minWidth: 50, - destinations: navRailDestinations, - selectedIndex: _selectedIndex, - useIndicator: true, + bool isBadgeExample = widget.isBadgeExample ?? false; + Widget navigationBar = NavigationBar( + selectedIndex: selectedIndex, onDestinationSelected: (index) { setState(() { - _selectedIndex = index; + selectedIndex = index; + }); + if (!widget.isExampleBar) widget.onSelectItem!(index); + }, + destinations: widget.isExampleBar && isBadgeExample + ? barWithBadgeDestinations + : widget.isExampleBar + ? exampleBarDestinations + : appBarDestinations, + ); + + if (widget.isExampleBar && isBadgeExample) { + navigationBar = ComponentDecoration( + label: 'Badges', + tooltipMessage: 'Use Badge or Badge.count', + child: navigationBar); + } else if (widget.isExampleBar) { + navigationBar = ComponentDecoration( + label: 'Navigation bar', + tooltipMessage: 'Use NavigationBar', + child: navigationBar); + } + + return navigationBar; + } +} + +class IconToggleButtons extends StatefulWidget { + const IconToggleButtons({super.key}); + + @override + State createState() => _IconToggleButtonsState(); +} + +class _IconToggleButtonsState extends State { + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Icon buttons', + tooltipMessage: 'Use IconButton', + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + // Standard IconButton + children: const [ + IconToggleButton( + isEnabled: true, + tooltip: 'Standard', + ), + colDivider, + IconToggleButton( + isEnabled: false, + tooltip: 'Standard (disabled)', + ), + ], + ), + Column( + children: const [ + // Filled IconButton + IconToggleButton( + isEnabled: true, + tooltip: 'Filled', + getDefaultStyle: enabledFilledButtonStyle, + ), + colDivider, + IconToggleButton( + isEnabled: false, + tooltip: 'Filled (disabled)', + getDefaultStyle: disabledFilledButtonStyle, + ), + ], + ), + Column( + children: const [ + // Filled Tonal IconButton + IconToggleButton( + isEnabled: true, + tooltip: 'Filled tonal', + getDefaultStyle: enabledFilledTonalButtonStyle, + ), + colDivider, + IconToggleButton( + isEnabled: false, + tooltip: 'Filled tonal (disabled)', + getDefaultStyle: disabledFilledTonalButtonStyle, + ), + ], + ), + Column( + children: const [ + // Outlined IconButton + IconToggleButton( + isEnabled: true, + tooltip: 'Outlined', + getDefaultStyle: enabledOutlinedButtonStyle, + ), + colDivider, + IconToggleButton( + isEnabled: false, + tooltip: 'Outlined (disabled)', + getDefaultStyle: disabledOutlinedButtonStyle, + ), + ], + ), + ], + ), + ); + } +} + +class IconToggleButton extends StatefulWidget { + const IconToggleButton({ + required this.isEnabled, + required this.tooltip, + this.getDefaultStyle, + super.key, + }); + + final bool isEnabled; + final String tooltip; + final ButtonStyle? Function(bool, ColorScheme)? getDefaultStyle; + + @override + State createState() => _IconToggleButtonState(); +} + +class _IconToggleButtonState extends State { + bool selected = false; + + @override + Widget build(BuildContext context) { + final ColorScheme colors = Theme.of(context).colorScheme; + final VoidCallback? onPressed = widget.isEnabled + ? () { + setState(() { + selected = !selected; + }); + } + : null; + ButtonStyle? style = widget.getDefaultStyle?.call(selected, colors); + + return IconButton( + visualDensity: VisualDensity.standard, + isSelected: selected, + tooltip: widget.tooltip, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: onPressed, + style: style, + ); + } +} + +ButtonStyle enabledFilledButtonStyle(bool selected, ColorScheme colors) { + return IconButton.styleFrom( + foregroundColor: selected ? colors.onPrimary : colors.primary, + backgroundColor: selected ? colors.primary : colors.surfaceVariant, + disabledForegroundColor: colors.onSurface.withOpacity(0.38), + disabledBackgroundColor: colors.onSurface.withOpacity(0.12), + hoverColor: selected + ? colors.onPrimary.withOpacity(0.08) + : colors.primary.withOpacity(0.08), + focusColor: selected + ? colors.onPrimary.withOpacity(0.12) + : colors.primary.withOpacity(0.12), + highlightColor: selected + ? colors.onPrimary.withOpacity(0.12) + : colors.primary.withOpacity(0.12), + ); +} + +ButtonStyle disabledFilledButtonStyle(bool selected, ColorScheme colors) { + return IconButton.styleFrom( + disabledForegroundColor: colors.onSurface.withOpacity(0.38), + disabledBackgroundColor: colors.onSurface.withOpacity(0.12), + ); +} + +ButtonStyle enabledFilledTonalButtonStyle(bool selected, ColorScheme colors) { + return IconButton.styleFrom( + foregroundColor: + selected ? colors.onSecondaryContainer : colors.onSurfaceVariant, + backgroundColor: + selected ? colors.secondaryContainer : colors.surfaceVariant, + hoverColor: selected + ? colors.onSecondaryContainer.withOpacity(0.08) + : colors.onSurfaceVariant.withOpacity(0.08), + focusColor: selected + ? colors.onSecondaryContainer.withOpacity(0.12) + : colors.onSurfaceVariant.withOpacity(0.12), + highlightColor: selected + ? colors.onSecondaryContainer.withOpacity(0.12) + : colors.onSurfaceVariant.withOpacity(0.12), + ); +} + +ButtonStyle disabledFilledTonalButtonStyle(bool selected, ColorScheme colors) { + return IconButton.styleFrom( + disabledForegroundColor: colors.onSurface.withOpacity(0.38), + disabledBackgroundColor: colors.onSurface.withOpacity(0.12), + ); +} + +ButtonStyle enabledOutlinedButtonStyle(bool selected, ColorScheme colors) { + return IconButton.styleFrom( + backgroundColor: selected ? colors.inverseSurface : null, + hoverColor: selected + ? colors.onInverseSurface.withOpacity(0.08) + : colors.onSurfaceVariant.withOpacity(0.08), + focusColor: selected + ? colors.onInverseSurface.withOpacity(0.12) + : colors.onSurfaceVariant.withOpacity(0.12), + highlightColor: selected + ? colors.onInverseSurface.withOpacity(0.12) + : colors.onSurface.withOpacity(0.12), + side: BorderSide(color: colors.outline), + ).copyWith( + foregroundColor: MaterialStateProperty.resolveWith((states) { + if (states.contains(MaterialState.selected)) { + return colors.onInverseSurface; + } + if (states.contains(MaterialState.pressed)) { + return colors.onSurface; + } + return null; + }), + ); +} + +ButtonStyle disabledOutlinedButtonStyle(bool selected, ColorScheme colors) { + return IconButton.styleFrom( + disabledForegroundColor: colors.onSurface.withOpacity(0.38), + disabledBackgroundColor: + selected ? colors.onSurface.withOpacity(0.12) : null, + side: selected ? null : BorderSide(color: colors.outline.withOpacity(0.12)), + ); +} + +class Chips extends StatefulWidget { + const Chips({super.key}); + + @override + State createState() => _ChipsState(); +} + +class _ChipsState extends State { + bool isFiltered = true; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Chips', + tooltipMessage: + 'Use ActionChip, FilterChip, or InputChip. \nActionChip can also be used for suggestion chip', + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Wrap( + spacing: smallSpacing, + runSpacing: smallSpacing, + children: [ + ActionChip( + label: const Text('Assist'), + avatar: const Icon(Icons.event), + onPressed: () {}, + ), + FilterChip( + label: const Text('Filter'), + selected: isFiltered, + onSelected: (selected) { + setState(() => isFiltered = selected); + }, + ), + InputChip( + label: const Text('Input'), + onPressed: () {}, + onDeleted: () {}, + ), + ActionChip( + label: const Text('Suggestion'), + onPressed: () {}, + ), + ], + ), + colDivider, + Wrap( + spacing: smallSpacing, + runSpacing: smallSpacing, + children: [ + const ActionChip( + label: Text('Assist'), + avatar: Icon(Icons.event), + ), + FilterChip( + label: const Text('Filter'), + selected: isFiltered, + onSelected: null, + ), + InputChip( + label: const Text('Input'), + onDeleted: () {}, + isEnabled: false, + ), + const ActionChip( + label: Text('Suggestion'), + ), + ], + ), + ], + ), + ); + } +} + +class SegmentedButtons extends StatelessWidget { + const SegmentedButtons({super.key}); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Segmented buttons', + tooltipMessage: 'Use SegmentedButton', + child: Column( + children: const [ + SingleChoice(), + colDivider, + MultipleChoice(), + ], + ), + ); + } +} + +enum Calendar { day, week, month, year } + +class SingleChoice extends StatefulWidget { + const SingleChoice({super.key}); + + @override + State createState() => _SingleChoiceState(); +} + +class _SingleChoiceState extends State { + Calendar calendarView = Calendar.day; + + @override + Widget build(BuildContext context) { + return SegmentedButton( + segments: const >[ + ButtonSegment( + value: Calendar.day, + label: Text('Day'), + icon: Icon(Icons.calendar_view_day)), + ButtonSegment( + value: Calendar.week, + label: Text('Week'), + icon: Icon(Icons.calendar_view_week)), + ButtonSegment( + value: Calendar.month, + label: Text('Month'), + icon: Icon(Icons.calendar_view_month)), + ButtonSegment( + value: Calendar.year, + label: Text('Year'), + icon: Icon(Icons.calendar_today)), + ], + selected: {calendarView}, + onSelectionChanged: (newSelection) { + setState(() { + // By default there is only a single segment that can be + // selected at one time, so its value is always the first + // item in the selected set. + calendarView = newSelection.first; + }); + }, + ); + } +} + +enum Sizes { extraSmall, small, medium, large, extraLarge } + +class MultipleChoice extends StatefulWidget { + const MultipleChoice({super.key}); + + @override + State createState() => _MultipleChoiceState(); +} + +class _MultipleChoiceState extends State { + Set selection = {Sizes.large, Sizes.extraLarge}; + + @override + Widget build(BuildContext context) { + return SegmentedButton( + segments: const >[ + ButtonSegment(value: Sizes.extraSmall, label: Text('XS')), + ButtonSegment(value: Sizes.small, label: Text('S')), + ButtonSegment(value: Sizes.medium, label: Text('M')), + ButtonSegment( + value: Sizes.large, + label: Text('L'), + ), + ButtonSegment(value: Sizes.extraLarge, label: Text('XL')), + ], + selected: selection, + onSelectionChanged: (newSelection) { + setState(() { + selection = newSelection; }); - widget.onSelectItem(index); }, + multiSelectionEnabled: true, + ); + } +} + +class SnackBarSection extends StatelessWidget { + const SnackBarSection({super.key}); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Snackbar', + tooltipMessage: + 'Use ScaffoldMessenger.of(context).showSnackBar with SnackBar', + child: TextButton( + onPressed: () { + final snackBar = SnackBar( + behavior: SnackBarBehavior.floating, + width: 400.0, + content: const Text('This is a snackbar'), + action: SnackBarAction( + label: 'Close', + onPressed: () {}, + ), + ); + + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + }, + child: const Text( + 'Show snackbar', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ); + } +} + +class BottomSheetSection extends StatefulWidget { + const BottomSheetSection({super.key}); + + @override + State createState() => _BottomSheetSectionState(); +} + +class _BottomSheetSectionState extends State { + bool isNonModalBottomSheetOpen = false; + PersistentBottomSheetController? _nonModalBottomSheetController; + + @override + Widget build(BuildContext context) { + List buttonList = [ + IconButton(onPressed: () {}, icon: const Icon(Icons.share_outlined)), + IconButton(onPressed: () {}, icon: const Icon(Icons.add)), + IconButton(onPressed: () {}, icon: const Icon(Icons.delete_outline)), + IconButton(onPressed: () {}, icon: const Icon(Icons.archive_outlined)), + IconButton(onPressed: () {}, icon: const Icon(Icons.settings_outlined)), + IconButton(onPressed: () {}, icon: const Icon(Icons.favorite_border)), + ]; + List labelList = const [ + Text('Share'), + Text('Add to'), + Text('Trash'), + Text('Archive'), + Text('Settings'), + Text('Favorite') + ]; + + buttonList = List.generate( + buttonList.length, + (index) => Padding( + padding: const EdgeInsets.fromLTRB(20.0, 30.0, 20.0, 20.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + buttonList[index], + labelList[index], + ], + ), + )); + + return ComponentDecoration( + label: 'Bottom sheet', + tooltipMessage: 'Use showModalBottomSheet or showBottomSheet', + child: Wrap( + alignment: WrapAlignment.spaceEvenly, + children: [ + TextButton( + child: const Text( + 'Show modal bottom sheet', + style: TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () { + showModalBottomSheet( + context: context, + // TODO: Remove when this is in the framework https://github.com/flutter/flutter/issues/118619 + constraints: const BoxConstraints(maxWidth: 640), + builder: (context) { + return SizedBox( + height: 150, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: ListView( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + children: buttonList, + ), + ), + ); + }, + ); + }, + ), + TextButton( + child: Text( + isNonModalBottomSheetOpen + ? 'Hide bottom sheet' + : 'Show bottom sheet', + style: const TextStyle(fontWeight: FontWeight.bold), + ), + onPressed: () { + if (isNonModalBottomSheetOpen) { + _nonModalBottomSheetController?.close(); + setState(() { + isNonModalBottomSheetOpen = false; + }); + return; + } else { + setState(() { + isNonModalBottomSheetOpen = true; + }); + } + + _nonModalBottomSheetController = showBottomSheet( + elevation: 8.0, + context: context, + // TODO: Remove when this is in the framework https://github.com/flutter/flutter/issues/118619 + constraints: const BoxConstraints(maxWidth: 640), + builder: (context) { + return SizedBox( + height: 150, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 32.0), + child: ListView( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + children: buttonList, + ), + ), + ); + }, + ); + }, + ), + ], + ), + ); + } +} + +class BottomAppBars extends StatelessWidget { + const BottomAppBars({super.key}); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Bottom app bar', + tooltipMessage: 'Use BottomAppBar', + child: Column( + children: [ + SizedBox( + height: 80, + child: Scaffold( + floatingActionButton: FloatingActionButton( + onPressed: () {}, + elevation: 0.0, + child: const Icon(Icons.add), + ), + floatingActionButtonLocation: + FloatingActionButtonLocation.endContained, + bottomNavigationBar: BottomAppBar( + child: Row( + children: [ + const IconButtonAnchorExample(), + IconButton( + tooltip: 'Search', + icon: const Icon(Icons.search), + onPressed: () {}, + ), + IconButton( + tooltip: 'Favorite', + icon: const Icon(Icons.favorite), + onPressed: () {}, + ), + ], + ), + ), + ), + ), + ], + ), + ); + } +} + +class IconButtonAnchorExample extends StatelessWidget { + const IconButtonAnchorExample({super.key}); + + @override + Widget build(BuildContext context) { + return MenuAnchor( + builder: (context, controller, child) { + return IconButton( + onPressed: () { + if (controller.isOpen) { + controller.close(); + } else { + controller.open(); + } + }, + icon: const Icon(Icons.more_vert), + ); + }, + menuChildren: [ + MenuItemButton( + child: const Text('Menu 1'), + onPressed: () {}, + ), + MenuItemButton( + child: const Text('Menu 2'), + onPressed: () {}, + ), + SubmenuButton( + menuChildren: [ + MenuItemButton( + onPressed: () {}, + child: const Text('Menu 3.1'), + ), + MenuItemButton( + onPressed: () {}, + child: const Text('Menu 3.2'), + ), + MenuItemButton( + onPressed: () {}, + child: const Text('Menu 3.3'), + ), + ], + child: const Text('Menu 3'), + ), + ], + ); + } +} + +class ButtonAnchorExample extends StatelessWidget { + const ButtonAnchorExample({super.key}); + + @override + Widget build(BuildContext context) { + return MenuAnchor( + builder: (context, controller, child) { + return FilledButton.tonal( + onPressed: () { + if (controller.isOpen) { + controller.close(); + } else { + controller.open(); + } + }, + child: const Text('Show menu'), + ); + }, + menuChildren: [ + MenuItemButton( + leadingIcon: const Icon(Icons.people_alt_outlined), + child: const Text('Item 1'), + onPressed: () {}, + ), + MenuItemButton( + leadingIcon: const Icon(Icons.remove_red_eye_outlined), + child: const Text('Item 2'), + onPressed: () {}, + ), + MenuItemButton( + leadingIcon: const Icon(Icons.refresh), + onPressed: () {}, + child: const Text('Item 3'), + ), + ], + ); + } +} + +class NavigationDrawers extends StatelessWidget { + const NavigationDrawers({super.key, required this.scaffoldKey}); + final GlobalKey scaffoldKey; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Navigation drawer', + tooltipMessage: + 'Use NavigationDrawer. For modal navigation drawers, see Scaffold.endDrawer', + child: Column( + children: [ + const SizedBox(height: 520, child: NavigationDrawerSection()), + colDivider, + colDivider, + TextButton( + child: const Text('Show modal navigation drawer', + style: TextStyle(fontWeight: FontWeight.bold)), + onPressed: () { + scaffoldKey.currentState!.openEndDrawer(); + }, + ), + ], + ), + ); + } +} + +class NavigationDrawerSection extends StatefulWidget { + const NavigationDrawerSection({super.key}); + + @override + State createState() => + _NavigationDrawerSectionState(); +} + +class _NavigationDrawerSectionState extends State { + int navDrawerIndex = 0; + + @override + Widget build(BuildContext context) { + return NavigationDrawer( + onDestinationSelected: (selectedIndex) { + setState(() { + navDrawerIndex = selectedIndex; + }); + }, + selectedIndex: navDrawerIndex, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(28, 16, 16, 10), + child: Text( + 'Mail', + style: Theme.of(context).textTheme.titleSmall, + ), + ), + ...destinations.map((destination) { + return NavigationDrawerDestination( + label: Text(destination.label), + icon: destination.icon, + selectedIcon: destination.selectedIcon, + ); + }), + const Divider(indent: 28, endIndent: 28), + Padding( + padding: const EdgeInsets.fromLTRB(28, 16, 16, 10), + child: Text( + 'Labels', + style: Theme.of(context).textTheme.titleSmall, + ), + ), + ...labelDestinations.map((destination) { + return NavigationDrawerDestination( + label: Text(destination.label), + icon: destination.icon, + selectedIcon: destination.selectedIcon, + ); + }), + ], + ); + } +} + +class ExampleDestination { + const ExampleDestination(this.label, this.icon, this.selectedIcon); + + final String label; + final Widget icon; + final Widget selectedIcon; +} + +const List destinations = [ + ExampleDestination('Inbox', Icon(Icons.inbox_outlined), Icon(Icons.inbox)), + ExampleDestination('Outbox', Icon(Icons.send_outlined), Icon(Icons.send)), + ExampleDestination( + 'Favorites', Icon(Icons.favorite_outline), Icon(Icons.favorite)), + ExampleDestination('Trash', Icon(Icons.delete_outline), Icon(Icons.delete)), +]; + +const List labelDestinations = [ + ExampleDestination( + 'Family', Icon(Icons.bookmark_border), Icon(Icons.bookmark)), + ExampleDestination( + 'School', Icon(Icons.bookmark_border), Icon(Icons.bookmark)), + ExampleDestination('Work', Icon(Icons.bookmark_border), Icon(Icons.bookmark)), +]; + +class NavigationRails extends StatelessWidget { + const NavigationRails({super.key}); + + @override + Widget build(BuildContext context) { + return const ComponentDecoration( + label: 'Navigation rail', + tooltipMessage: 'Use NavigationRail', + child: IntrinsicWidth( + child: SizedBox(height: 420, child: NavigationRailSection())), + ); + } +} + +class NavigationRailSection extends StatefulWidget { + const NavigationRailSection({super.key}); + + @override + State createState() => _NavigationRailSectionState(); +} + +class _NavigationRailSectionState extends State { + int navRailIndex = 0; + + @override + Widget build(BuildContext context) { + return NavigationRail( + onDestinationSelected: (selectedIndex) { + setState(() { + navRailIndex = selectedIndex; + }); + }, + elevation: 4, + leading: FloatingActionButton( + child: const Icon(Icons.create), onPressed: () {}), + groupAlignment: 0.0, + selectedIndex: navRailIndex, + labelType: NavigationRailLabelType.selected, + destinations: [ + ...destinations.map((destination) { + return NavigationRailDestination( + label: Text(destination.label), + icon: destination.icon, + selectedIcon: destination.selectedIcon, + ); + }), + ], + ); + } +} + +class Tabs extends StatefulWidget { + const Tabs({super.key}); + + @override + State createState() => _TabsState(); +} + +class _TabsState extends State with TickerProviderStateMixin { + late TabController _tabController; + + @override + void initState() { + super.initState(); + _tabController = TabController(length: 3, vsync: this); + } + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Tabs', + tooltipMessage: 'Use TabBar', + child: SizedBox( + height: 80, + child: Scaffold( + appBar: AppBar( + bottom: TabBar( + controller: _tabController, + tabs: const [ + Tab( + icon: Icon(Icons.videocam_outlined), + text: 'Video', + iconMargin: EdgeInsets.only(bottom: 0.0), + ), + Tab( + icon: Icon(Icons.photo_outlined), + text: 'Photos', + iconMargin: EdgeInsets.only(bottom: 0.0), + ), + Tab( + icon: Icon(Icons.audiotrack_sharp), + text: 'Audio', + iconMargin: EdgeInsets.only(bottom: 0.0), + ), + ], + ), + // TODO: Showcase secondary tab bar https://github.com/flutter/flutter/issues/111962 + ), + ), + ), + ); + } +} + +class TopAppBars extends StatelessWidget { + const TopAppBars({super.key}); + + static final actions = [ + IconButton(icon: const Icon(Icons.attach_file), onPressed: () {}), + IconButton(icon: const Icon(Icons.event), onPressed: () {}), + IconButton(icon: const Icon(Icons.more_vert), onPressed: () {}), + ]; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Top app bars', + tooltipMessage: + 'Use AppBar, SliverAppBar, SliverAppBar.medium, or SliverAppBar.large', + child: Column( + children: [ + AppBar( + title: const Text('Center-aligned'), + leading: const BackButton(), + actions: [ + IconButton( + iconSize: 32, + icon: const Icon(Icons.account_circle_outlined), + onPressed: () {}, + ), + ], + centerTitle: true, + ), + colDivider, + AppBar( + title: const Text('Small'), + leading: const BackButton(), + actions: actions, + centerTitle: false, + ), + colDivider, + SizedBox( + height: 100, + child: CustomScrollView( + slivers: [ + SliverAppBar.medium( + title: const Text('Medium'), + leading: const BackButton(), + actions: actions, + ), + const SliverFillRemaining(), + ], + ), + ), + colDivider, + SizedBox( + height: 130, + child: CustomScrollView( + slivers: [ + SliverAppBar.large( + title: const Text('Large'), + leading: const BackButton(), + actions: actions, + ), + const SliverFillRemaining(), + ], + ), + ), + ], + ), + ); + } +} + +class Menus extends StatefulWidget { + const Menus({super.key}); + + @override + State createState() => _MenusState(); +} + +class _MenusState extends State { + final TextEditingController colorController = TextEditingController(); + final TextEditingController iconController = TextEditingController(); + IconLabel? selectedIcon = IconLabel.smile; + ColorLabel? selectedColor; + + @override + Widget build(BuildContext context) { + final List> colorEntries = + >[]; + for (final ColorLabel color in ColorLabel.values) { + colorEntries.add(DropdownMenuEntry( + value: color, label: color.label, enabled: color.label != 'Grey')); + } + + final List> iconEntries = + >[]; + for (final IconLabel icon in IconLabel.values) { + iconEntries + .add(DropdownMenuEntry(value: icon, label: icon.label)); + } + + return ComponentDecoration( + label: 'Menus', + tooltipMessage: 'Use MenuAnchor or DropdownMenu', + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + ButtonAnchorExample(), + rowDivider, + IconButtonAnchorExample(), + ], + ), + colDivider, + Wrap( + alignment: WrapAlignment.spaceAround, + runAlignment: WrapAlignment.center, + crossAxisAlignment: WrapCrossAlignment.center, + spacing: smallSpacing, + runSpacing: smallSpacing, + children: [ + DropdownMenu( + controller: colorController, + label: const Text('Color'), + enableFilter: true, + dropdownMenuEntries: colorEntries, + inputDecorationTheme: const InputDecorationTheme(filled: true), + onSelected: (color) { + setState(() { + selectedColor = color; + }); + }, + ), + DropdownMenu( + initialSelection: IconLabel.smile, + controller: iconController, + leadingIcon: const Icon(Icons.search), + label: const Text('Icon'), + dropdownMenuEntries: iconEntries, + onSelected: (icon) { + setState(() { + selectedIcon = icon; + }); + }, + ), + Icon( + selectedIcon?.icon, + color: selectedColor?.color ?? Colors.grey.withOpacity(0.5), + ) + ], + ), + ], + ), + ); + } +} + +enum ColorLabel { + blue('Blue', Colors.blue), + pink('Pink', Colors.pink), + green('Green', Colors.green), + yellow('Yellow', Colors.yellow), + grey('Grey', Colors.grey); + + const ColorLabel(this.label, this.color); + final String label; + final Color color; +} + +enum IconLabel { + smile('Smile', Icons.sentiment_satisfied_outlined), + cloud( + 'Cloud', + Icons.cloud_outlined, + ), + brush('Brush', Icons.brush_outlined), + heart('Heart', Icons.favorite); + + const IconLabel(this.label, this.icon); + final String label; + final IconData icon; +} + +class Sliders extends StatefulWidget { + const Sliders({super.key}); + + @override + State createState() => _SlidersState(); +} + +class _SlidersState extends State { + double sliderValue0 = 30.0; + double sliderValue1 = 20.0; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Sliders', + tooltipMessage: 'Use Slider or RangeSlider', + child: Column( + children: [ + Slider( + max: 100, + value: sliderValue0, + onChanged: (value) { + setState(() { + sliderValue0 = value; + }); + }, + ), + const SizedBox(height: 20), + Slider( + max: 100, + divisions: 5, + value: sliderValue1, + label: sliderValue1.round().toString(), + onChanged: (value) { + setState(() { + sliderValue1 = value; + }); + }, + ), + ], + )); + } +} + +class ComponentDecoration extends StatelessWidget { + const ComponentDecoration({ + super.key, + required this.label, + required this.child, + this.tooltipMessage = '', + }); + + final String label; + final Widget child; + final String? tooltipMessage; + + @override + Widget build(BuildContext context) { + return RepaintBoundary( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: smallSpacing), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(label, style: Theme.of(context).textTheme.titleSmall), + Tooltip( + message: tooltipMessage, + child: const Padding( + padding: EdgeInsets.symmetric(horizontal: 5.0), + child: Icon(Icons.info_outline, size: 16)), + ), + ], + ), + ConstrainedBox( + constraints: + const BoxConstraints.tightFor(width: widthConstraint), + child: Card( + elevation: 0, + shape: RoundedRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.outlineVariant, + ), + borderRadius: const BorderRadius.all(Radius.circular(12)), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 5.0, vertical: 20.0), + child: Center(child: child), + ), + ), + ), + ], + ), + ), + ); + } +} + +class ComponentGroupDecoration extends StatelessWidget { + const ComponentGroupDecoration( + {super.key, required this.label, required this.children}); + + final String label; + final List children; + + @override + Widget build(BuildContext context) { + return Card( + margin: EdgeInsets.zero, + elevation: 0, + color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Column( + children: [ + Text(label, style: Theme.of(context).textTheme.titleLarge), + colDivider, + ...children + ], + ), + ), + ), ); } } diff --git a/material_3_demo/lib/elevation_screen.dart b/material_3_demo/lib/elevation_screen.dart index ea18d5d80..0f3d6299e 100644 --- a/material_3_demo/lib/elevation_screen.dart +++ b/material_3_demo/lib/elevation_screen.dart @@ -12,37 +12,47 @@ class ElevationScreen extends StatelessWidget { Color shadowColor = Theme.of(context).colorScheme.shadow; Color surfaceTint = Theme.of(context).colorScheme.primary; return Expanded( - child: ListView( - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(16.0, 20, 16.0, 0), - child: Text( - 'Surface Tint only', - style: Theme.of(context).textTheme.titleLarge, + child: CustomScrollView( + slivers: [ + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16.0, 20, 16.0, 0), + child: Text( + 'Surface Tint Color Only', + style: Theme.of(context).textTheme.titleLarge, + ), ), ), ElevationGrid(surfaceTintColor: surfaceTint), - const SizedBox(height: 10), - Padding( - padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), - child: Text( - 'Surface Tint and Shadow', - style: Theme.of(context).textTheme.titleLarge, - ), + SliverList( + delegate: SliverChildListDelegate([ + const SizedBox(height: 10), + Padding( + padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), + child: Text( + 'Surface Tint Color and Shadow Color', + style: Theme.of(context).textTheme.titleLarge, + ), + ), + ]), ), ElevationGrid( shadowColor: shadowColor, surfaceTintColor: surfaceTint, ), - const SizedBox(height: 10), - Padding( - padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), - child: Text( - 'Shadow only', - style: Theme.of(context).textTheme.titleLarge, - ), + SliverList( + delegate: SliverChildListDelegate([ + const SizedBox(height: 10), + Padding( + padding: const EdgeInsets.fromLTRB(16.0, 8.0, 16.0, 0), + child: Text( + 'Shadow Color Only', + style: Theme.of(context).textTheme.titleLarge, + ), + ), + ]), ), - ElevationGrid(shadowColor: shadowColor) + ElevationGrid(shadowColor: shadowColor), ], ), ); @@ -72,18 +82,16 @@ class ElevationGrid extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( + return SliverPadding( padding: const EdgeInsets.all(8), - child: LayoutBuilder(builder: (context, constraints) { - if (constraints.maxWidth < narrowScreenWidthThreshold) { - return GridView.count( - shrinkWrap: true, + sliver: SliverLayoutBuilder(builder: (context, constraints) { + if (constraints.crossAxisExtent < narrowScreenWidthThreshold) { + return SliverGrid.count( crossAxisCount: 3, children: elevationCards(shadowColor, surfaceTintColor), ); } else { - return GridView.count( - shrinkWrap: true, + return SliverGrid.count( crossAxisCount: 6, children: elevationCards(shadowColor, surfaceTintColor), ); @@ -117,7 +125,6 @@ class _ElevationCardState extends State { @override Widget build(BuildContext context) { const BorderRadius borderRadius = BorderRadius.all(Radius.circular(4.0)); - final bool showOpacity = _elevation == widget.info.elevation; final Color color = Theme.of(context).colorScheme.surface; return Padding( @@ -142,7 +149,7 @@ class _ElevationCardState extends State { '${widget.info.level.toInt()} dp', style: Theme.of(context).textTheme.labelMedium, ), - if (showOpacity) + if (widget.surfaceTint != null) Expanded( child: Align( alignment: Alignment.bottomRight, diff --git a/material_3_demo/lib/main.dart b/material_3_demo/lib/main.dart index 2d31ceb7c..b36fd8f10 100644 --- a/material_3_demo/lib/main.dart +++ b/material_3_demo/lib/main.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; import 'color_palettes_screen.dart'; import 'component_screen.dart'; @@ -10,7 +11,12 @@ import 'elevation_screen.dart'; import 'typography_screen.dart'; void main() { - runApp(const Material3Demo()); + runApp( + const MaterialApp( + debugShowCheckedModeBanner: false, + home: Material3Demo(), + ), + ); } class Material3Demo extends StatefulWidget { @@ -24,180 +30,708 @@ class Material3Demo extends StatefulWidget { // screenWidthThreshold; otherwise, NavigationBar is used for navigation. const double narrowScreenWidthThreshold = 450; -const Color m3BaseColor = Color(0xff6750a4); -const List colorOptions = [ - m3BaseColor, - Colors.blue, - Colors.teal, - Colors.green, - Colors.yellow, - Colors.orange, - Colors.pink -]; -const List colorText = [ - "M3 Baseline", - "Blue", - "Teal", - "Green", - "Yellow", - "Orange", - "Pink", -]; - -class _Material3DemoState extends State { +const double transitionLength = 500; + +enum ColorSeed { + baseColor('M3 Baseline', Color(0xff6750a4)), + indigo('Indigo', Colors.indigo), + blue('Blue', Colors.blue), + teal('Teal', Colors.teal), + green('Green', Colors.green), + yellow('Yellow', Colors.yellow), + orange('Orange', Colors.orange), + deepOrange('Deep Orange', Colors.deepOrange), + pink('Pink', Colors.pink); + + const ColorSeed(this.label, this.color); + final String label; + final Color color; +} + +enum ScreenSelected { + component(0), + color(1), + typography(2), + elevation(3); + + const ScreenSelected(this.value); + final int value; +} + +class _Material3DemoState extends State + with SingleTickerProviderStateMixin { + final GlobalKey scaffoldKey = GlobalKey(); + late final AnimationController controller; + late final CurvedAnimation railAnimation; + bool controllerInitialized = false; + bool showMediumSizeLayout = false; + bool showLargeSizeLayout = false; bool useMaterial3 = true; - bool useLightMode = true; - int colorSelected = 0; - int screenIndex = 0; + ThemeMode themeMode = ThemeMode.system; + bool get useLightMode { + switch (themeMode) { + case ThemeMode.system: + return SchedulerBinding.instance.window.platformBrightness == + Brightness.light; + case ThemeMode.light: + return true; + case ThemeMode.dark: + return false; + } + } - late ThemeData themeData; + ColorSeed colorSelected = ColorSeed.baseColor; + int screenIndex = ScreenSelected.component.value; @override initState() { super.initState(); - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); + controller = AnimationController( + duration: Duration(milliseconds: transitionLength.toInt() * 2), + value: 0, + vsync: this, + ); + railAnimation = CurvedAnimation( + parent: controller, + curve: const Interval(0.5, 1.0), + ); } - ThemeData updateThemes(int colorIndex, bool useMaterial3, bool useLightMode) { - return ThemeData( - colorSchemeSeed: colorOptions[colorSelected], - useMaterial3: useMaterial3, - brightness: useLightMode ? Brightness.light : Brightness.dark); + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + final double width = MediaQuery.of(context).size.width; + final AnimationStatus status = controller.status; + if (width > 1000) { + if (width > 1500) { + showMediumSizeLayout = false; + showLargeSizeLayout = true; + } else { + showMediumSizeLayout = true; + showLargeSizeLayout = false; + } + if (status != AnimationStatus.forward && + status != AnimationStatus.completed) { + controller.forward(); + } + } else { + showMediumSizeLayout = false; + showLargeSizeLayout = false; + if (status != AnimationStatus.reverse && + status != AnimationStatus.dismissed) { + controller.reverse(); + } + } + if (!controllerInitialized) { + controllerInitialized = true; + controller.value = width > 1000 ? 1 : 0; + } } - void handleScreenChanged(int selectedScreen) { + void handleScreenChanged(int screenSelected) { setState(() { - screenIndex = selectedScreen; + screenIndex = screenSelected; }); } - void handleBrightnessChange() { + void handleBrightnessChange(bool useLightMode) { setState(() { - useLightMode = !useLightMode; - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); + themeMode = useLightMode ? ThemeMode.light : ThemeMode.dark; }); } void handleMaterialVersionChange() { setState(() { useMaterial3 = !useMaterial3; - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); }); } void handleColorSelect(int value) { setState(() { - colorSelected = value; - themeData = updateThemes(colorSelected, useMaterial3, useLightMode); + colorSelected = ColorSeed.values[value]; }); } - Widget createScreenFor(int screenIndex, bool showNavBarExample) { - switch (screenIndex) { - case 0: - return ComponentScreen(showNavBottomBar: showNavBarExample); - case 1: + Widget createScreenFor( + ScreenSelected screenSelected, bool showNavBarExample) { + switch (screenSelected) { + case ScreenSelected.component: + return Expanded( + child: OneTwoTransition( + animation: railAnimation, + one: FirstComponentList( + showNavBottomBar: showNavBarExample, + scaffoldKey: scaffoldKey, + showSecondList: showMediumSizeLayout || showLargeSizeLayout), + two: SecondComponentList( + scaffoldKey: scaffoldKey, + ), + ), + ); + case ScreenSelected.color: return const ColorPalettesScreen(); - case 2: + case ScreenSelected.typography: return const TypographyScreen(); - case 3: + case ScreenSelected.elevation: return const ElevationScreen(); default: - return ComponentScreen(showNavBottomBar: showNavBarExample); + return FirstComponentList( + showNavBottomBar: showNavBarExample, + scaffoldKey: scaffoldKey, + showSecondList: showMediumSizeLayout || showLargeSizeLayout); } } PreferredSizeWidget createAppBar() { return AppBar( - title: useMaterial3 ? const Text("Material 3") : const Text("Material 2"), - actions: [ - IconButton( - icon: useLightMode - ? const Icon(Icons.wb_sunny_outlined) - : const Icon(Icons.wb_sunny), - onPressed: handleBrightnessChange, - tooltip: "Toggle brightness", - ), - IconButton( - icon: useMaterial3 - ? const Icon(Icons.filter_3) - : const Icon(Icons.filter_2), - onPressed: handleMaterialVersionChange, - tooltip: "Switch to Material ${useMaterial3 ? 2 : 3}", - ), - PopupMenuButton( - icon: const Icon(Icons.more_vert), - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - itemBuilder: (context) { - return List.generate(colorOptions.length, (index) { - return PopupMenuItem( - value: index, - child: Wrap( - children: [ - Padding( - padding: const EdgeInsets.only(left: 10), - child: Icon( - index == colorSelected - ? Icons.color_lens - : Icons.color_lens_outlined, - color: colorOptions[index], - ), - ), - Padding( - padding: const EdgeInsets.only(left: 20), - child: Text(colorText[index])) - ], - )); - }); - }, - onSelected: handleColorSelect, - ), - ], + title: useMaterial3 ? const Text('Material 3') : const Text('Material 2'), + actions: !showMediumSizeLayout && !showLargeSizeLayout + ? [ + _BrightnessButton( + handleBrightnessChange: handleBrightnessChange, + ), + _Material3Button( + handleMaterialVersionChange: handleMaterialVersionChange, + ), + _ColorSeedButton( + handleColorSelect: handleColorSelect, + colorSelected: colorSelected, + ), + ] + : [Container()], ); } + Widget _expandedTrailingActions() => Container( + constraints: const BoxConstraints.tightFor(width: 250), + padding: const EdgeInsets.symmetric(horizontal: 30), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + const Text('Brightness'), + Expanded(child: Container()), + Switch( + value: useLightMode, + onChanged: (value) { + handleBrightnessChange(value); + }) + ], + ), + Row( + children: [ + useMaterial3 + ? const Text('Material 3') + : const Text('Material 2'), + Expanded(child: Container()), + Switch( + value: useMaterial3, + onChanged: (_) { + handleMaterialVersionChange(); + }) + ], + ), + const Divider(), + ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 200.0), + child: GridView.count( + crossAxisCount: 3, + children: List.generate( + ColorSeed.values.length, + (i) => IconButton( + icon: const Icon(Icons.radio_button_unchecked), + color: ColorSeed.values[i].color, + isSelected: + colorSelected.color == ColorSeed.values[i].color, + selectedIcon: const Icon(Icons.circle), + onPressed: () { + handleColorSelect(i); + }, + )), + ), + ), + ], + ), + ); + + Widget _trailingActions() => Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: _BrightnessButton( + handleBrightnessChange: handleBrightnessChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _Material3Button( + handleMaterialVersionChange: handleMaterialVersionChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _ColorSeedButton( + handleColorSelect: handleColorSelect, + colorSelected: colorSelected, + ), + ), + ], + ); + @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Material 3', - themeMode: useLightMode ? ThemeMode.light : ThemeMode.dark, - theme: themeData, - home: LayoutBuilder(builder: (context, constraints) { - if (constraints.maxWidth < narrowScreenWidthThreshold) { - return Scaffold( + themeMode: themeMode, + theme: ThemeData( + colorSchemeSeed: colorSelected.color, + useMaterial3: useMaterial3, + brightness: Brightness.light, + ), + darkTheme: ThemeData( + colorSchemeSeed: colorSelected.color, + useMaterial3: useMaterial3, + brightness: Brightness.dark, + ), + home: AnimatedBuilder( + animation: controller, + builder: (context, child) { + return NavigationTransition( + scaffoldKey: scaffoldKey, + animationController: controller, + railAnimation: railAnimation, appBar: createAppBar(), - body: Row(children: [ - createScreenFor(screenIndex, false), - ]), - bottomNavigationBar: NavigationBars( - onSelectItem: handleScreenChanged, + body: createScreenFor( + ScreenSelected.values[screenIndex], controller.value == 1), + navigationRail: NavigationRail( + extended: showLargeSizeLayout, + destinations: navRailDestinations, + selectedIndex: screenIndex, + onDestinationSelected: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, + trailing: Expanded( + child: Padding( + padding: const EdgeInsets.only(bottom: 20), + child: showLargeSizeLayout + ? _expandedTrailingActions() + : _trailingActions(), + ), + ), + ), + navigationBar: NavigationBars( + onSelectItem: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, selectedIndex: screenIndex, isExampleBar: false, ), ); - } else { - return Scaffold( - appBar: createAppBar(), - body: SafeArea( - bottom: false, - top: false, - child: Row( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: NavigationRailSection( - onSelectItem: handleScreenChanged, - selectedIndex: screenIndex)), - const VerticalDivider(thickness: 1, width: 1), - createScreenFor(screenIndex, true), - ], - ), + }, + ), + ); + } +} + +class _BrightnessButton extends StatelessWidget { + const _BrightnessButton({ + required this.handleBrightnessChange, + this.showTooltipBelow = true, + }); + + final Function handleBrightnessChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final isBright = Theme.of(context).brightness == Brightness.light; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Toggle brightness', + child: IconButton( + icon: isBright + ? const Icon(Icons.dark_mode_outlined) + : const Icon(Icons.light_mode_outlined), + onPressed: () => handleBrightnessChange(!isBright), + ), + ); + } +} + +class _Material3Button extends StatelessWidget { + const _Material3Button({ + required this.handleMaterialVersionChange, + this.showTooltipBelow = true, + }); + + final void Function() handleMaterialVersionChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final useMaterial3 = Theme.of(context).useMaterial3; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Switch to Material ${useMaterial3 ? 2 : 3}', + child: IconButton( + icon: useMaterial3 + ? const Icon(Icons.filter_2) + : const Icon(Icons.filter_3), + onPressed: handleMaterialVersionChange, + ), + ); + } +} + +class _ColorSeedButton extends StatelessWidget { + const _ColorSeedButton({ + required this.handleColorSelect, + required this.colorSelected, + }); + + final void Function(int) handleColorSelect; + final ColorSeed colorSelected; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: Icon( + Icons.palette_outlined, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + tooltip: 'Select a seed color', + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + itemBuilder: (context) { + return List.generate(ColorSeed.values.length, (index) { + ColorSeed currentColor = ColorSeed.values[index]; + + return PopupMenuItem( + value: index, + enabled: currentColor != colorSelected, + child: Wrap( + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: Icon( + currentColor == colorSelected + ? Icons.color_lens + : Icons.color_lens_outlined, + color: currentColor.color, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20), + child: Text(currentColor.label), + ), + ], ), ); - } - }), + }); + }, + onSelected: handleColorSelect, + ); + } +} + +class NavigationTransition extends StatefulWidget { + const NavigationTransition( + {super.key, + required this.scaffoldKey, + required this.animationController, + required this.railAnimation, + required this.navigationRail, + required this.navigationBar, + required this.appBar, + required this.body}); + + final GlobalKey scaffoldKey; + final AnimationController animationController; + final CurvedAnimation railAnimation; + final Widget navigationRail; + final Widget navigationBar; + final PreferredSizeWidget appBar; + final Widget body; + + @override + State createState() => _NavigationTransitionState(); +} + +class _NavigationTransitionState extends State { + late final AnimationController controller; + late final CurvedAnimation railAnimation; + late final ReverseAnimation barAnimation; + bool controllerInitialized = false; + bool showDivider = false; + + @override + void initState() { + super.initState(); + + controller = widget.animationController; + railAnimation = widget.railAnimation; + + barAnimation = ReverseAnimation( + CurvedAnimation( + parent: controller, + curve: const Interval(0.0, 0.5), + ), + ); + } + + @override + Widget build(BuildContext context) { + final ColorScheme colorScheme = Theme.of(context).colorScheme; + + return Scaffold( + key: widget.scaffoldKey, + appBar: widget.appBar, + body: Row( + children: [ + RailTransition( + animation: railAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationRail, + ), + widget.body, + ], + ), + bottomNavigationBar: BarTransition( + animation: barAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationBar, + ), + endDrawer: const NavigationDrawerSection(), + ); + } +} + +final List navRailDestinations = appBarDestinations + .map( + (destination) => NavigationRailDestination( + icon: Tooltip( + message: destination.label, + child: destination.icon, + ), + selectedIcon: Tooltip( + message: destination.label, + child: destination.selectedIcon, + ), + label: Text(destination.label), + ), + ) + .toList(); + +class SizeAnimation extends CurvedAnimation { + SizeAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.2, + 0.8, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class OffsetAnimation extends CurvedAnimation { + OffsetAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.4, + 1.0, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class RailTransition extends StatefulWidget { + const RailTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Widget child; + final Color backgroundColor; + + @override + State createState() => _RailTransition(); +} + +class _RailTransition extends State { + late Animation offsetAnimation; + late Animation widthAnimation; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + // The animations are only rebuilt by this method when the text + // direction changes because this widget only depends on Directionality. + final bool ltr = Directionality.of(context) == TextDirection.ltr; + + widthAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + + offsetAnimation = Tween( + begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + widthFactor: widthAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class BarTransition extends StatefulWidget { + const BarTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Color backgroundColor; + final Widget child; + + @override + State createState() => _BarTransition(); +} + +class _BarTransition extends State { + late final Animation offsetAnimation; + late final Animation heightAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(0, 1), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + heightAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + heightFactor: heightAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class OneTwoTransition extends StatefulWidget { + const OneTwoTransition({ + super.key, + required this.animation, + required this.one, + required this.two, + }); + + final Animation animation; + final Widget one; + final Widget two; + + @override + State createState() => _OneTwoTransitionState(); +} + +class _OneTwoTransitionState extends State { + late final Animation offsetAnimation; + late final Animation widthAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + widthAnimation = Tween( + begin: 0, + end: 1000, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Flexible( + flex: 1000, + child: widget.one, + ), + if (widthAnimation.value.toInt() > 0) ...[ + Flexible( + flex: widthAnimation.value.toInt(), + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.two, + ), + ) + ], + ], ); } } diff --git a/material_3_demo/lib/typography_screen.dart b/material_3_demo/lib/typography_screen.dart index 6ffa270da..6950e9575 100644 --- a/material_3_demo/lib/typography_screen.dart +++ b/material_3_demo/lib/typography_screen.dart @@ -17,26 +17,26 @@ class TypographyScreen extends StatelessWidget { children: [ const SizedBox(height: 7), TextStyleExample( - name: "Display Large", style: textTheme.displayLarge!), + name: 'Display Large', style: textTheme.displayLarge!), TextStyleExample( - name: "Display Medium", style: textTheme.displayMedium!), + name: 'Display Medium', style: textTheme.displayMedium!), TextStyleExample( - name: "Display Small", style: textTheme.displaySmall!), + name: 'Display Small', style: textTheme.displaySmall!), TextStyleExample( - name: "Headline Large", style: textTheme.headlineLarge!), + name: 'Headline Large', style: textTheme.headlineLarge!), TextStyleExample( - name: "Headline Medium", style: textTheme.headlineMedium!), + name: 'Headline Medium', style: textTheme.headlineMedium!), TextStyleExample( - name: "Headline Small", style: textTheme.headlineSmall!), - TextStyleExample(name: "Title Large", style: textTheme.titleLarge!), - TextStyleExample(name: "Title Medium", style: textTheme.titleMedium!), - TextStyleExample(name: "Title Small", style: textTheme.titleSmall!), - TextStyleExample(name: "Label Large", style: textTheme.labelLarge!), - TextStyleExample(name: "Label Medium", style: textTheme.labelMedium!), - TextStyleExample(name: "Label Small", style: textTheme.labelSmall!), - TextStyleExample(name: "Body Large", style: textTheme.bodyLarge!), - TextStyleExample(name: "Body Medium", style: textTheme.bodyMedium!), - TextStyleExample(name: "Body Small", style: textTheme.bodySmall!), + name: 'Headline Small', style: textTheme.headlineSmall!), + TextStyleExample(name: 'Title Large', style: textTheme.titleLarge!), + TextStyleExample(name: 'Title Medium', style: textTheme.titleMedium!), + TextStyleExample(name: 'Title Small', style: textTheme.titleSmall!), + TextStyleExample(name: 'Label Large', style: textTheme.labelLarge!), + TextStyleExample(name: 'Label Medium', style: textTheme.labelMedium!), + TextStyleExample(name: 'Label Small', style: textTheme.labelSmall!), + TextStyleExample(name: 'Body Large', style: textTheme.bodyLarge!), + TextStyleExample(name: 'Body Medium', style: textTheme.bodyMedium!), + TextStyleExample(name: 'Body Small', style: textTheme.bodySmall!), ], ), ); diff --git a/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig b/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b60..4b81f9b2d 100644 --- a/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig +++ b/material_3_demo/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/material_3_demo/macos/Flutter/Flutter-Release.xcconfig b/material_3_demo/macos/Flutter/Flutter-Release.xcconfig index c2efd0b60..5caa9d157 100644 --- a/material_3_demo/macos/Flutter/Flutter-Release.xcconfig +++ b/material_3_demo/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift b/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817a5..8236f5728 100644 --- a/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/material_3_demo/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,8 @@ import FlutterMacOS import Foundation +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/material_3_demo/macos/Podfile b/material_3_demo/macos/Podfile new file mode 100644 index 000000000..c795730db --- /dev/null +++ b/material_3_demo/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/material_3_demo/macos/Runner.xcodeproj/project.pbxproj b/material_3_demo/macos/Runner.xcodeproj/project.pbxproj index ea4fdf820..34b8722c1 100644 --- a/material_3_demo/macos/Runner.xcodeproj/project.pbxproj +++ b/material_3_demo/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -235,6 +235,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -344,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -423,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -470,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/material_3_demo/pubspec.yaml b/material_3_demo/pubspec.yaml index 8e1341970..09c335396 100644 --- a/material_3_demo/pubspec.yaml +++ b/material_3_demo/pubspec.yaml @@ -8,13 +8,14 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ">=2.18.0-0 <3.0.0" dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 + url_launcher: ^6.1.8 dev_dependencies: flutter_test: diff --git a/material_3_demo/test/color_screen_test.dart b/material_3_demo/test/color_screen_test.dart index 754b18a8a..a29b089f7 100644 --- a/material_3_demo/test/color_screen_test.dart +++ b/material_3_demo/test/color_screen_test.dart @@ -16,46 +16,60 @@ void main() { 'on NavigationBar', (tester) async { widgetSetup(tester, 449); addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); - expect(find.text("Light Theme"), findsNothing); - expect(find.text("Dark Theme"), findsNothing); + expect(find.text('Light ColorScheme'), findsNothing); + expect(find.text('Dark ColorScheme'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); - Finder colorIconOnBar = find.byIcon(Icons.format_paint_outlined); + Finder colorIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.format_paint_outlined)); expect(colorIconOnBar, findsOneWidget); await tester.tap(colorIconOnBar); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(colorIconOnBar, findsNothing); - expect(find.byIcon(Icons.format_paint), findsOneWidget); - expect(find.text("Light Theme"), findsOneWidget); - expect(find.text("Dark Theme"), findsOneWidget); + + Finder selectedColorIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: + find.widgetWithIcon(NavigationDestination, Icons.format_paint)); + expect(selectedColorIconOnBar, findsOneWidget); + expect(find.text('Light ColorScheme'), findsOneWidget); + expect(find.text('Dark ColorScheme'), findsOneWidget); }); testWidgets( 'Color palettes screen shows correctly when color icon is clicked ' 'on NavigationRail', (tester) async { - widgetSetup(tester, 450); // NavigationRail shows only when width is >= 450. + widgetSetup( + tester, 1200); // NavigationRail shows only when width is > 1000. addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); - expect(find.text("Light Theme"), findsNothing); - expect(find.text("Dark Theme"), findsNothing); - expect(find.byType(NavigationRail), findsOneWidget); - Finder colorIconOnRail = find.byIcon(Icons.format_paint_outlined); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpAndSettle(); + expect(find.text('Light ColorScheme'), findsNothing); + expect(find.text('Dark ColorScheme'), findsNothing); + Finder colorIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.format_paint_outlined)); expect(colorIconOnRail, findsOneWidget); await tester.tap(colorIconOnRail); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(colorIconOnRail, findsNothing); - expect(find.byIcon(Icons.format_paint), findsOneWidget); - expect(find.text("Light Theme"), findsOneWidget); - expect(find.text("Dark Theme"), findsOneWidget); + Finder selectedColorIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.format_paint)); + expect(selectedColorIconOnRail, findsOneWidget); + expect(find.text('Light ColorScheme'), findsOneWidget); + expect(find.text('Dark ColorScheme'), findsOneWidget); }); testWidgets('Color screen shows correct content', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold(body: Row(children: const [ColorPalettesScreen()])), )); - expect(find.text("Light Theme"), findsOneWidget); - expect(find.text("Dark Theme"), findsOneWidget); + expect(find.text('Light ColorScheme'), findsOneWidget); + expect(find.text('Dark ColorScheme'), findsOneWidget); expect(find.byType(ColorGroup, skipOffstage: false), findsNWidgets(14)); }); } diff --git a/material_3_demo/test/component_screen_test.dart b/material_3_demo/test/component_screen_test.dart index 5a573d6e8..e5f820995 100644 --- a/material_3_demo/test/component_screen_test.dart +++ b/material_3_demo/test/component_screen_test.dart @@ -10,186 +10,267 @@ import 'package:material_3_demo/main.dart'; void main() { testWidgets('Default main page shows all M3 components', (tester) async { - await tester.pumpWidget(const Material3Demo()); + widgetSetup(tester, 800, windowHeight: 7000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); // Elements on the app bar expect(find.text('Material 3'), findsOneWidget); - expect(find.widgetWithIcon(IconButton, Icons.wb_sunny_outlined), - findsOneWidget); - expect(find.widgetWithIcon(IconButton, Icons.filter_3), findsOneWidget); - expect(find.widgetWithIcon(IconButton, Icons.more_vert), findsOneWidget); + expect( + find.widgetWithIcon(AppBar, Icons.dark_mode_outlined), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_2), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.palette_outlined), findsOneWidget); // Elements on the component screen - // Buttons - expect(find.widgetWithText(ElevatedButton, "Elevated"), findsNWidgets(2)); - expect(find.widgetWithText(ElevatedButton, "Filled"), findsNWidgets(2)); - expect( - find.widgetWithText(ElevatedButton, "Filled Tonal"), findsNWidgets(2)); - expect(find.widgetWithText(OutlinedButton, "Outlined"), findsNWidgets(2)); - expect(find.widgetWithText(TextButton, "Text"), findsNWidgets(2)); - expect(find.text("Icon"), findsNWidgets(5)); + // Common buttons + expect(find.widgetWithText(ElevatedButton, 'Elevated'), findsNWidgets(2)); + expect(find.widgetWithText(FilledButton, 'Filled'), findsNWidgets(2)); + expect(find.widgetWithText(FilledButton, 'Filled tonal'), findsNWidgets(2)); + expect(find.widgetWithText(OutlinedButton, 'Outlined'), findsNWidgets(2)); + expect(find.widgetWithText(TextButton, 'Text'), findsNWidgets(2)); + expect(find.widgetWithText(Buttons, 'Icon'), findsNWidgets(5)); // FABs - Finder floatingActionButton = find.text("Create"); - await tester.scrollUntilVisible( - floatingActionButton, - 500.0, - ); expect( - find.widgetWithIcon(FloatingActionButton, Icons.add), findsNWidgets(4)); - expect(find.widgetWithText(FloatingActionButton, "Create"), findsOneWidget); + find.byType(FloatingActionButton), + findsNWidgets( + 6)); // 2 more show up in the bottom app bar. 1 more in the navigation rail + expect(find.widgetWithText(FloatingActionButton, 'Create'), findsOneWidget); + + // Icon buttons + expect(find.byType(IconToggleButton), findsNWidgets(8)); + + // Segmented buttons + expect(find.byType(SegmentedButton), findsOneWidget); + expect(find.byType(SegmentedButton), findsOneWidget); + + // Badges + expect(find.byType(Badge), findsNWidgets(4)); + + // Progress indicators + Finder circularProgressIndicator = find.byType(CircularProgressIndicator); + expect(circularProgressIndicator, findsOneWidget); + Finder linearProgressIndicator = find.byType(LinearProgressIndicator); + expect(linearProgressIndicator, findsOneWidget); + + // Snackbar + expect(find.widgetWithText(TextButton, 'Show snackbar'), findsOneWidget); + + // Bottom sheet + expect(find.widgetWithText(TextButton, 'Show modal bottom sheet'), + findsOneWidget); + expect( + find.widgetWithText(TextButton, 'Show bottom sheet'), findsOneWidget); // Cards - expect(find.widgetWithText(Card, "Elevated"), findsOneWidget); - expect(find.widgetWithText(Card, "Filled"), findsOneWidget); - expect(find.widgetWithText(Card, "Outlined"), findsOneWidget); - - // Alert Dialog - Finder dialogExample = find.widgetWithText(TextButton, "Open Dialog"); - await tester.scrollUntilVisible( - dialogExample, - 500.0, - ); - expect(dialogExample, findsOneWidget); + expect(find.widgetWithText(Cards, 'Elevated'), findsOneWidget); + expect(find.widgetWithText(Cards, 'Filled'), findsOneWidget); + expect(find.widgetWithText(Cards, 'Outlined'), findsOneWidget); + + // Dialogs + expect(find.widgetWithText(TextButton, 'Show dialog'), findsOneWidget); + expect(find.widgetWithText(TextButton, 'Show full-screen dialog'), + findsOneWidget); + + // Dividers + expect(find.byKey(const Key('divider')), findsOneWidget); + + // Bottom app bar + expect(find.byType(BottomAppBar), findsOneWidget); + + // Navigation bar + // Third one is off screen in the scaffold + expect(find.byType(NavigationBar), findsNWidgets(3)); + + // Navigation drawer + expect(find.byType(Drawer), findsOneWidget); + expect(find.widgetWithText(TextButton, 'Show modal navigation drawer'), + findsOneWidget); + + // Navigation rail + // Second one is off screen in the scaffold + expect(find.byType(NavigationRail), findsNWidgets(2)); + + // Tabs + expect(find.byType(TabBar), findsOneWidget); + + // Top app bars + expect(find.byType(AppBar), findsNWidgets(6)); + + // Checkboxes + Finder checkboxExample = find.byType(CheckboxListTile); + expect(checkboxExample, findsNWidgets(4)); + + // Chips + expect(find.byType(ActionChip), + findsNWidgets(4)); // includes Assist and Suggestion chip. + expect(find.byType(FilterChip), findsNWidgets(2)); + expect(find.byType(InputChip), findsNWidgets(2)); + + // Menus + expect(find.byType(MenuAnchor), findsNWidgets(5)); + expect(find.byType(DropdownMenu), findsOneWidget); + expect(find.byType(DropdownMenu), findsOneWidget); + + // Radios + Finder radioExample = find.byType(RadioListTile); + expect(radioExample, findsNWidgets(3)); + + // Sliders + expect(find.byType(Slider), findsNWidgets(2)); + + // Switches + expect(find.byType(Switch), findsNWidgets(4)); + + // TextFields + expect(find.widgetWithText(TextField, 'Disabled'), findsNWidgets(2)); + expect(find.widgetWithText(TextField, 'Filled'), findsNWidgets(2)); + expect(find.widgetWithText(TextField, 'Outlined'), findsNWidgets(2)); }); testWidgets( - 'NavigationRail doesn\'t show when width value is small than 450 ' + 'NavigationRail doesn\'t show when width value is small than 1000 ' '(in Portrait mode or narrow screen)', (tester) async { - widgetSetup(tester, 449); - await tester.pumpWidget(const Material3Demo()); - - // When screen width is less than 450, NavigationBar will show. At the same - // time, the NavigationRail and the NavigationBar example will NOT show. - expect(find.byType(NavigationBars), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Components"), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Color"), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Typography"), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Elevation"), findsOneWidget); - - expect(find.byType(NavigationRailSection), findsNothing); - expect(find.widgetWithText(NavigationBar, "Explore"), findsNothing); - expect(find.widgetWithText(NavigationBar, "Pets"), findsNothing); - expect(find.widgetWithText(NavigationBar, "Account"), findsNothing); + widgetSetup(tester, 999, windowHeight: 7000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpAndSettle(); + + // When screen width is less than 1000, NavigationBar will show. At the same + // time, the NavigationBar example still show up in the navigation group. + expect(find.byType(NavigationBars), + findsNWidgets(3)); // The real navBar, badges example and navBar example + expect(find.widgetWithText(NavigationBar, 'Components'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Color'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Typography'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Elevation'), findsOneWidget); + + expect(find.widgetWithText(NavigationBar, 'Explore'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Pets'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Account'), findsOneWidget); }); testWidgets( 'NavigationRail shows when width value is greater than or equal ' - 'to 450 (in Landscape mode or wider screen)', (tester) async { - widgetSetup(tester, 450); - await tester.pumpWidget(const Material3Demo()); - - // When screen width is greater than or equal to 450, NavigationRail and - // NavigationBar example will show. At the same time, the NavigationBar - // will NOT show. - expect(find.byType(NavigationRailSection), findsOneWidget); + 'to 1000 (in Landscape mode or wider screen)', (tester) async { + widgetSetup(tester, 1001, windowHeight: 3000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpAndSettle(); + + // When screen width is greater than or equal to 1000, NavigationRail will show. + // At the same time, the NavigationBar will NOT show. + expect(find.byType(NavigationRail), findsNWidgets(2)); expect(find.byType(Tooltip, skipOffstage: false), findsWidgets); - expect(find.widgetWithText(NavigationRailSection, "Components"), - findsOneWidget); - expect(find.widgetWithText(NavigationRailSection, "Color"), findsOneWidget); - expect(find.widgetWithText(NavigationRailSection, "Typography"), - findsOneWidget); - expect(find.widgetWithText(NavigationRailSection, "Elevation"), - findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Components'), findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Color'), findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Typography'), findsOneWidget); + expect(find.widgetWithText(NavigationRail, 'Elevation'), findsOneWidget); - final navbarExample = find.byType(NavigationBars); - await tester.scrollUntilVisible( - navbarExample, - 500.0, - ); - expect(find.byType(NavigationBars), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Explore"), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Pets"), findsOneWidget); - expect(find.widgetWithText(NavigationBar, "Account"), findsOneWidget); - - expect(find.widgetWithText(NavigationBar, "Components"), findsNothing); - expect(find.widgetWithText(NavigationBar, "Colors"), findsNothing); - expect(find.widgetWithText(NavigationBar, "Typography"), findsNothing); - expect(find.widgetWithText(NavigationBar, "Elevation"), findsNothing); + expect(find.widgetWithText(NavigationBar, 'Explore'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Pets'), findsOneWidget); + expect(find.widgetWithText(NavigationBar, 'Account'), findsOneWidget); + + // the Navigation bar should be out of screen. + final RenderBox box = + tester.renderObject(find.widgetWithText(NavigationBar, 'Components')); + expect(box.localToGlobal(Offset.zero), const Offset(0.0, 3080.0)); }); testWidgets( 'Material version switches between Material3 and Material2 when' 'the version icon is clicked', (tester) async { - await tester.pumpWidget(const Material3Demo()); - Finder m3Icon = find.widgetWithIcon(IconButton, Icons.filter_3); - Finder m2Icon = find.widgetWithIcon(IconButton, Icons.filter_2); + widgetSetup(tester, 450, windowHeight: 7000); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); BuildContext defaultElevatedButton = tester.firstElement(find.byType(ElevatedButton)); + BuildContext defaultIconButton = + tester.firstElement(find.byType(IconButton)); BuildContext defaultFAB = tester.firstElement(find.byType(FloatingActionButton)); - BuildContext defaultCard = tester.firstElement(find.byType(Card)); - Finder dialog = find.text("Open Dialog"); - await tester.scrollUntilVisible( - dialog, - 500.0, - ); + BuildContext defaultCard = + tester.firstElement(find.widgetWithText(Card, 'Elevated')); + BuildContext defaultChip = + tester.firstElement(find.widgetWithText(ActionChip, 'Assist')); + Finder dialog = find.text('Show dialog'); await tester.tap(dialog); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext defaultAlertDialog = tester.element(find.byType(AlertDialog)); expect(Theme.of(defaultAlertDialog).useMaterial3, true); - Finder dismiss = find.text("Dismiss"); - await tester.scrollUntilVisible( - dismiss, - 500.0, - ); + Finder dismiss = find.text('Okay'); await tester.tap(dismiss); await tester.pumpAndSettle(const Duration(microseconds: 500)); - expect(m3Icon, findsOneWidget); - expect(m2Icon, findsNothing); - expect(find.text("Material 3"), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_2), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_3), findsNothing); + expect(find.text('Material 3'), findsOneWidget); expect(Theme.of(defaultElevatedButton).useMaterial3, true); + expect(Theme.of(defaultIconButton).useMaterial3, true); expect(Theme.of(defaultFAB).useMaterial3, true); expect(Theme.of(defaultCard).useMaterial3, true); + expect(Theme.of(defaultChip).useMaterial3, true); - await tester.tap(m3Icon); + Finder appbarM3Icon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.filter_2)); + await tester.tap(appbarM3Icon); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext updatedElevatedButton = tester.firstElement(find.byType(ElevatedButton)); + BuildContext updatedIconButton = + tester.firstElement(find.byType(IconButton)); BuildContext updatedFAB = tester.firstElement(find.byType(FloatingActionButton)); BuildContext updatedCard = tester.firstElement(find.byType(Card)); - Finder updatedDialog = find.text("Open Dialog"); - await tester.scrollUntilVisible( - updatedDialog, - 500.0, - ); + BuildContext updatedChip = + tester.firstElement(find.widgetWithText(ActionChip, 'Assist')); + Finder updatedDialog = find.text('Show dialog'); await tester.tap(updatedDialog); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext updatedAlertDialog = tester.firstElement(find.byType(AlertDialog)); expect(Theme.of(updatedAlertDialog).useMaterial3, false); - Finder updatedDismiss = find.text("Dismiss"); - await tester.scrollUntilVisible( - updatedDismiss, - 500.0, - ); + Finder updatedDismiss = find.text('Dismiss'); await tester.tap(updatedDismiss); await tester.pumpAndSettle(const Duration(microseconds: 500)); - expect(m3Icon, findsNothing); - expect(m2Icon, findsOneWidget); - expect(find.text("Material 2"), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_3), findsOneWidget); + expect(find.widgetWithIcon(AppBar, Icons.filter_2), findsNothing); + expect(find.text('Material 2'), findsOneWidget); expect(Theme.of(updatedElevatedButton).useMaterial3, false); + expect(Theme.of(updatedIconButton).useMaterial3, false); expect(Theme.of(updatedFAB).useMaterial3, false); expect(Theme.of(updatedCard).useMaterial3, false); + expect(Theme.of(updatedChip).useMaterial3, false); }); testWidgets( 'Other screens become Material2 mode after changing mode from ' 'main screen', (tester) async { - await tester.pumpWidget(const Material3Demo()); - await tester.tap(find.widgetWithIcon(IconButton, Icons.filter_3)); - await tester.tap(find.byIcon(Icons.format_paint_outlined)); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + Finder appbarM2Icon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.filter_2)); + await tester.tap(appbarM2Icon); + Finder secondScreenIcon = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.format_paint_outlined)); + await tester.tap(secondScreenIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); - BuildContext lightThemeText = tester.element(find.text("Light Theme")); + BuildContext lightThemeText = + tester.element(find.text('Light ColorScheme')); expect(Theme.of(lightThemeText).useMaterial3, false); - await tester.tap(find.byIcon(Icons.text_snippet_outlined)); + Finder thirdScreenIcon = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.text_snippet_outlined)); + await tester.tap(thirdScreenIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); - BuildContext displayLargeText = tester.element(find.text("Display Large")); + BuildContext displayLargeText = tester.element(find.text('Display Large')); expect(Theme.of(displayLargeText).useMaterial3, false); - await tester.tap(find.byIcon(Icons.invert_colors_on_outlined)); + Finder fourthScreenIcon = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.invert_colors_on_outlined)); + await tester.tap(fourthScreenIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); BuildContext material = tester.firstElement(find.byType(Material)); expect(Theme.of(material).useMaterial3, false); @@ -198,25 +279,32 @@ void main() { testWidgets( 'Brightness mode switches between dark and light when' 'the brightness icon is clicked', (tester) async { - await tester.pumpWidget(const Material3Demo()); - Finder lightIcon = find.widgetWithIcon(IconButton, Icons.wb_sunny_outlined); - Finder darkIcon = find.widgetWithIcon(IconButton, Icons.wb_sunny); - BuildContext appBar = tester.element(find.byType(AppBar)); - BuildContext body = tester.element(find.byType(Scaffold)); - BuildContext navigationRail = tester.element(find.byType(NavigationRail)); - expect(lightIcon, findsOneWidget); - expect(darkIcon, findsNothing); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + Finder lightIcon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.light_mode_outlined)); + Finder darkIcon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.dark_mode_outlined)); + BuildContext appBar = tester.element(find.byType(AppBar).first); + BuildContext body = tester.firstElement(find.byType(Scaffold).first); + BuildContext navigationRail = tester.element( + find.widgetWithIcon(NavigationRail, Icons.format_paint_outlined)); + expect(darkIcon, findsOneWidget); + expect(lightIcon, findsNothing); expect(Theme.of(appBar).brightness, Brightness.light); expect(Theme.of(body).brightness, Brightness.light); expect(Theme.of(navigationRail).brightness, Brightness.light); - await tester.tap(lightIcon); + await tester.tap(darkIcon); await tester.pumpAndSettle(const Duration(microseconds: 500)); - BuildContext appBar2 = tester.element(find.byType(AppBar)); - BuildContext body2 = tester.element(find.byType(Scaffold)); - BuildContext navigationRail2 = tester.element(find.byType(NavigationRail)); - expect(lightIcon, findsNothing); - expect(darkIcon, findsOneWidget); + BuildContext appBar2 = tester.element(find.byType(AppBar).first); + BuildContext body2 = tester.element(find.byType(Scaffold).first); + BuildContext navigationRail2 = tester.element( + find.widgetWithIcon(NavigationRail, Icons.format_paint_outlined)); + + expect(darkIcon, findsNothing); + expect(lightIcon, findsOneWidget); expect(Theme.of(appBar2).brightness, Brightness.dark); expect(Theme.of(body2).brightness, Brightness.dark); expect(Theme.of(navigationRail2).brightness, Brightness.dark); @@ -224,33 +312,37 @@ void main() { testWidgets('Color theme changes when a color is selected from menu', (tester) async { - await tester.pumpWidget(const Material3Demo()); - Finder menuIcon = find.widgetWithIcon(IconButton, Icons.more_vert); - BuildContext appBar = tester.element(find.byType(AppBar)); - BuildContext body = tester.element(find.byType(Scaffold)); - BuildContext navigationRail = tester.element(find.byType(NavigationRail)); + Color m3BaseColor = const Color(0xff6750a4); + await tester.pumpWidget(Container()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pump(); + Finder menuIcon = find.descendant( + of: find.byType(AppBar), + matching: find.widgetWithIcon(IconButton, Icons.palette_outlined)); + BuildContext appBar = tester + .element(find.widgetWithIcon(AppBar, Icons.palette_outlined).first); + BuildContext body = tester.element(find.byType(Scaffold).first); expect(Theme.of(appBar).primaryColor, m3BaseColor); expect(Theme.of(body).primaryColor, m3BaseColor); - expect(Theme.of(navigationRail).primaryColor, m3BaseColor); await tester.tap(menuIcon); await tester.pumpAndSettle(); - await tester.tap(find.text("Blue")); + await tester.tap(find.text('Blue').last); await tester.pumpAndSettle(); - BuildContext appBar2 = tester.element(find.byType(AppBar)); - BuildContext body2 = tester.element(find.byType(Scaffold)); - BuildContext navigationRail2 = tester.element(find.byType(NavigationRail)); + BuildContext appBar2 = tester.element(find.byType(AppBar).first); + BuildContext body2 = tester.element(find.byType(Scaffold).first); ThemeData expectedTheme = ThemeData(colorSchemeSeed: Colors.blue); expect(Theme.of(appBar2).primaryColor, expectedTheme.primaryColor); expect(Theme.of(body2).primaryColor, expectedTheme.primaryColor); - expect(Theme.of(navigationRail2).primaryColor, expectedTheme.primaryColor); }); } -void widgetSetup(WidgetTester tester, double width) { - const height = 846; +void widgetSetup(WidgetTester tester, double windowWidth, + {double? windowHeight}) { + final height = windowHeight ?? 846; tester.binding.window.devicePixelRatioTestValue = (2); final dpi = tester.binding.window.devicePixelRatio; - tester.binding.window.physicalSizeTestValue = Size(width * dpi, height * dpi); + tester.binding.window.physicalSizeTestValue = + Size(windowWidth * dpi, height * dpi); } diff --git a/material_3_demo/test/elevation_screen_test.dart b/material_3_demo/test/elevation_screen_test.dart index 8bb892291..737a355a6 100644 --- a/material_3_demo/test/elevation_screen_test.dart +++ b/material_3_demo/test/elevation_screen_test.dart @@ -16,43 +16,53 @@ void main() { 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); - expect(find.text("Surface Tint only"), findsNothing); + expect(find.text('Surface Tint Color Only'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); - Finder tintIconOnBar = find.byIcon(Icons.invert_colors_on_outlined); + Finder tintIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon( + NavigationDestination, Icons.invert_colors_on_outlined)); expect(tintIconOnBar, findsOneWidget); await tester.tap(tintIconOnBar); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(tintIconOnBar, findsNothing); - expect(find.byIcon(Icons.opacity), findsOneWidget); - expect(find.text("Surface Tint only"), findsOneWidget); + Finder selectedTintIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.widgetWithIcon(NavigationDestination, Icons.opacity)); + expect(selectedTintIconOnBar, findsOneWidget); + expect(find.text('Surface Tint Color Only'), findsOneWidget); }); testWidgets( 'Surface Tones screen shows correctly when the corresponding icon is ' 'selected on NavigationRail', (tester) async { - widgetSetup(tester, 450); // NavigationRail shows only when width is >= 450. + widgetSetup( + tester, 1200); // NavigationRail shows only when width is > 1000. addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); - expect(find.text("Surface Tint only"), findsNothing); - expect(find.byType(NavigationRail), findsOneWidget); - Finder tintIconOnRail = find.byIcon(Icons.invert_colors_on_outlined); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + expect(find.text('Surface Tint Color Only'), findsNothing); + Finder tintIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.invert_colors_on_outlined)); expect(tintIconOnRail, findsOneWidget); await tester.tap(tintIconOnRail); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(tintIconOnRail, findsNothing); - expect(find.byIcon(Icons.opacity), findsOneWidget); - expect(find.text("Surface Tint only"), findsOneWidget); + Finder selectedTintIconOnRail = find.descendant( + of: find.byType(NavigationRail), matching: find.byIcon(Icons.opacity)); + expect(selectedTintIconOnRail, findsOneWidget); + expect(find.text('Surface Tint Color Only'), findsOneWidget); }); testWidgets('Surface Tones screen shows correct content', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold(body: Row(children: const [ElevationScreen()])), )); - expect(find.text("Surface Tint only"), findsOneWidget); - expect(find.text("Surface Tint and Shadow"), findsOneWidget); - expect(find.text("Shadow only"), findsOneWidget); + expect(find.text('Surface Tint Color Only'), findsOneWidget); + expect(find.text('Surface Tint Color and Shadow Color'), findsOneWidget); + expect(find.text('Shadow Color Only'), findsOneWidget); expect(find.byType(ElevationGrid), findsNWidgets(3)); expect(find.byType(ElevationCard), findsNWidgets(18)); }); diff --git a/material_3_demo/test/typography_screen_test.dart b/material_3_demo/test/typography_screen_test.dart index bbf340f47..234c14b3d 100644 --- a/material_3_demo/test/typography_screen_test.dart +++ b/material_3_demo/test/typography_screen_test.dart @@ -16,59 +16,69 @@ void main() { 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); - expect(find.text("Display Large"), findsNothing); + expect(find.text('Display Large'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); - Finder textIconOnBar = find.byIcon(Icons.text_snippet_outlined); + Finder textIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.byIcon(Icons.text_snippet_outlined)); expect(textIconOnBar, findsOneWidget); await tester.tap(textIconOnBar); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(textIconOnBar, findsNothing); - expect(find.byIcon(Icons.text_snippet), findsOneWidget); - expect(find.text("Display Large"), findsOneWidget); + Finder selectedTextIconOnBar = find.descendant( + of: find.byType(NavigationBar), + matching: find.byIcon(Icons.text_snippet)); + expect(selectedTextIconOnBar, findsOneWidget); + expect(find.text('Display Large'), findsOneWidget); }); testWidgets( 'Typography screen shows correctly when the corresponding icon is ' 'selected on NavigationRail', (tester) async { - widgetSetup(tester, 450); // NavigationRail shows only when width is >= 450. + widgetSetup( + tester, 1200); // NavigationRail shows only when width is > 1000. addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const Material3Demo()); - expect(find.text("Display Large"), findsNothing); - expect(find.byType(NavigationRail), findsOneWidget); - Finder textIconOnRail = find.byIcon(Icons.text_snippet_outlined); + await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + expect(find.text('Display Large'), findsNothing); + Finder textIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.text_snippet_outlined)); expect(textIconOnRail, findsOneWidget); await tester.tap(textIconOnRail); await tester.pumpAndSettle(const Duration(microseconds: 500)); expect(textIconOnRail, findsNothing); - expect(find.byIcon(Icons.text_snippet), findsOneWidget); - expect(find.text("Display Large"), findsOneWidget); + Finder selectedTextIconOnRail = find.descendant( + of: find.byType(NavigationRail), + matching: find.byIcon(Icons.text_snippet)); + expect(selectedTextIconOnRail, findsOneWidget); + expect(find.text('Display Large'), findsOneWidget); }); testWidgets('Typography screen shows correct content', (tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold(body: Row(children: const [TypographyScreen()])), )); - expect(find.text("Display Large"), findsOneWidget); - expect(find.text("Display Medium"), findsOneWidget); - expect(find.text("Display Small"), findsOneWidget); - expect(find.text("Headline Large"), findsOneWidget); - expect(find.text("Headline Medium"), findsOneWidget); - expect(find.text("Headline Small"), findsOneWidget); - expect(find.text("Title Large"), findsOneWidget); - expect(find.text("Title Medium"), findsOneWidget); - expect(find.text("Title Small"), findsOneWidget); + expect(find.text('Display Large'), findsOneWidget); + expect(find.text('Display Medium'), findsOneWidget); + expect(find.text('Display Small'), findsOneWidget); + expect(find.text('Headline Large'), findsOneWidget); + expect(find.text('Headline Medium'), findsOneWidget); + expect(find.text('Headline Small'), findsOneWidget); + expect(find.text('Title Large'), findsOneWidget); + expect(find.text('Title Medium'), findsOneWidget); + expect(find.text('Title Small'), findsOneWidget); await tester.scrollUntilVisible( - find.text("Body Small"), + find.text('Body Small'), 500.0, ); - expect(find.text("Label Large"), findsOneWidget); - expect(find.text("Label Medium"), findsOneWidget); - expect(find.text("Label Small"), findsOneWidget); - expect(find.text("Body Large"), findsOneWidget); - expect(find.text("Body Medium"), findsOneWidget); - expect(find.text("Body Small"), findsOneWidget); + expect(find.text('Label Large'), findsOneWidget); + expect(find.text('Label Medium'), findsOneWidget); + expect(find.text('Label Small'), findsOneWidget); + expect(find.text('Body Large'), findsOneWidget); + expect(find.text('Body Medium'), findsOneWidget); + expect(find.text('Body Small'), findsOneWidget); expect(find.byType(TextStyleExample), findsNWidgets(15)); }); diff --git a/material_3_demo/windows/flutter/generated_plugin_registrant.cc b/material_3_demo/windows/flutter/generated_plugin_registrant.cc index 8b6d4680a..4f7884874 100644 --- a/material_3_demo/windows/flutter/generated_plugin_registrant.cc +++ b/material_3_demo/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/material_3_demo/windows/flutter/generated_plugins.cmake b/material_3_demo/windows/flutter/generated_plugins.cmake index b93c4c30c..88b22e5c7 100644 --- a/material_3_demo/windows/flutter/generated_plugins.cmake +++ b/material_3_demo/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/navigation_and_routing/.metadata b/navigation_and_routing/.metadata index 31b763f97..d680382e1 100644 --- a/navigation_and_routing/.metadata +++ b/navigation_and_routing/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/navigation_and_routing/android/app/build.gradle b/navigation_and_routing/android/app/build.gradle index 7659e247f..04490c218 100644 --- a/navigation_and_routing/android/app/build.gradle +++ b/navigation_and_routing/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.navigation_and_routing" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/navigation_and_routing/android/build.gradle b/navigation_and_routing/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/navigation_and_routing/android/build.gradle +++ b/navigation_and_routing/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/navigation_and_routing/android/gradle/wrapper/gradle-wrapper.properties b/navigation_and_routing/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/navigation_and_routing/android/gradle/wrapper/gradle-wrapper.properties +++ b/navigation_and_routing/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/navigation_and_routing/codelab_rebuild.yaml b/navigation_and_routing/codelab_rebuild.yaml index d9c4dc47f..ab57d0a52 100644 --- a/navigation_and_routing/codelab_rebuild.yaml +++ b/navigation_and_routing/codelab_rebuild.yaml @@ -11,6 +11,9 @@ steps: - windows - name: Flutter recreate flutter: create --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Patch web/index.html path: web/index.html patch-u: | diff --git a/navigation_and_routing/ios/Runner.xcodeproj/project.pbxproj b/navigation_and_routing/ios/Runner.xcodeproj/project.pbxproj index 61215d506..e180961dd 100644 --- a/navigation_and_routing/ios/Runner.xcodeproj/project.pbxproj +++ b/navigation_and_routing/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -171,6 +171,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +186,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -478,4 +480,4 @@ /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; -} +} \ No newline at end of file diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/navigation_and_routing/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/navigation_and_routing/macos/Podfile b/navigation_and_routing/macos/Podfile index dade8dfad..049abe295 100644 --- a/navigation_and_routing/macos/Podfile +++ b/navigation_and_routing/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/navigation_and_routing/macos/Runner.xcodeproj/project.pbxproj b/navigation_and_routing/macos/Runner.xcodeproj/project.pbxproj index b2a4ce02e..32eb7587f 100644 --- a/navigation_and_routing/macos/Runner.xcodeproj/project.pbxproj +++ b/navigation_and_routing/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -235,6 +235,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -344,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -423,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -470,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/navigation_and_routing/macos/Runner/Configs/AppInfo.xcconfig b/navigation_and_routing/macos/Runner/Configs/AppInfo.xcconfig index db43dccc0..57da72ec3 100644 --- a/navigation_and_routing/macos/Runner/Configs/AppInfo.xcconfig +++ b/navigation_and_routing/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = navigation_and_routing PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.navigationAndRouting // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/navigation_and_routing/web/index.html b/navigation_and_routing/web/index.html index bfaefe26a..90dfe9209 100644 --- a/navigation_and_routing/web/index.html +++ b/navigation_and_routing/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/navigation_and_routing/windows/runner/CMakeLists.txt b/navigation_and_routing/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/navigation_and_routing/windows/runner/CMakeLists.txt +++ b/navigation_and_routing/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/navigation_and_routing/windows/runner/Runner.rc b/navigation_and_routing/windows/runner/Runner.rc index 0434c99e3..d97574e4e 100644 --- a/navigation_and_routing/windows/runner/Runner.rc +++ b/navigation_and_routing/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "navigation_and_routing" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "navigation_and_routing" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "navigation_and_routing.exe" "\0" VALUE "ProductName", "navigation_and_routing" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/navigation_and_routing/windows/runner/flutter_window.cpp b/navigation_and_routing/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/navigation_and_routing/windows/runner/flutter_window.cpp +++ b/navigation_and_routing/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/navigation_and_routing/windows/runner/main.cpp b/navigation_and_routing/windows/runner/main.cpp index 719a9884e..391128534 100644 --- a/navigation_and_routing/windows/runner/main.cpp +++ b/navigation_and_routing/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"navigation_and_routing", origin, size)) { + if (!window.Create(L"navigation_and_routing", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/navigation_and_routing/windows/runner/win32_window.cpp b/navigation_and_routing/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/navigation_and_routing/windows/runner/win32_window.cpp +++ b/navigation_and_routing/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/navigation_and_routing/windows/runner/win32_window.h b/navigation_and_routing/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/navigation_and_routing/windows/runner/win32_window.h +++ b/navigation_and_routing/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/null_safety/README.md b/null_safety/README.md deleted file mode 100644 index e6cbba400..000000000 --- a/null_safety/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Null safety Flutter example - -This folder contains a demonstration of Dart's sound null -safety feature. For additional information about this feature, see -https://dart.dev/null-safety. - -The folder contains two sample Flutter apps: - - * `null_unsafe_app`: This contains a small weather app, which has three null - errors in its rendering code as a result of not using null safety. - - Try running the app (`flutter run` in a terminal, or the Run action in - VSCode/Android Studio), and see if the UI works. The null errors are - sporadic, so try hot reloading a bunch of times and experience the app - sometimes working and sometimes failing. - - * `null_safe_app`: This contains the same weather app, but this time using - null safety. There are two copies of the source code: - - `lib/badapp.dart`: This is the same source code as in the unsafe app. Try - uncommenting the two commented lines of null-unsafe code, and notice how the - Dart analyzer with null safety immediately flags the lines as unsafe. - - `lib/goodapp.dart`: This a safe version of the unsafe app, with the null - errors fixed. Read through the comments to see illustrations of how to resolve - null errors with null safety. - -## Running the example code - -This sample requires Flutter 2.0 or later. diff --git a/null_safety/codelab_rebuild.yaml b/null_safety/codelab_rebuild.yaml deleted file mode 100644 index 26a18eb7c..000000000 --- a/null_safety/codelab_rebuild.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# Run with tooling from https://github.com/flutter/codelabs/tree/main/tooling/codelab_rebuild -name: Null Safety rebuild script -steps: - - name: null_safe_app - steps: - - name: Remove runners - path: null_safe_app - rmdirs: - - android - - ios - - linux - - macos - - web - - windows - - name: Rebuild Runners - path: null_safe_app - flutter: create . - - name: Update deps - path: null_safe_app - flutter: pub upgrade --major-versions - - name: Build for macOS - path: null_safe_app - flutter: build macos - - name: Build for iOS - path: null_safe_app - flutter: build ios --simulator - - name: null_unsafe_app - steps: - - name: Remove runners - path: null_unsafe_app - rmdirs: - - android - - ios - - linux - - macos - - web - - windows - - name: Rebuild Runners - path: null_unsafe_app - flutter: create . - - name: Update deps - path: null_unsafe_app - flutter: pub upgrade --major-versions - - name: Build for macOS - path: null_unsafe_app - flutter: build macos - - name: Build for iOS - path: null_unsafe_app - flutter: build ios --simulator diff --git a/null_safety/null_safe_app/.metadata b/null_safety/null_safe_app/.metadata deleted file mode 100644 index 31b763f97..000000000 --- a/null_safety/null_safe_app/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/null_safety/null_safe_app/README.md b/null_safety/null_safe_app/README.md deleted file mode 100644 index 662da0aa6..000000000 --- a/null_safety/null_safe_app/README.md +++ /dev/null @@ -1,2 +0,0 @@ -For instructions, please see the README.md file located in the directory above this. - diff --git a/null_safety/null_safe_app/android/null_safe_app_android.iml b/null_safety/null_safe_app/android/null_safe_app_android.iml deleted file mode 100644 index 18999696a..000000000 --- a/null_safety/null_safe_app/android/null_safe_app_android.iml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 28c6bf030..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2ccbfd967..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0b..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cde12118..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7e..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index dcdc2306c..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2ccbfd967..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 6a84f41e1..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index d0e1f5853..000000000 Binary files a/null_safety/null_safe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/null_safety/null_safe_app/lib/badapp.dart b/null_safety/null_safe_app/lib/badapp.dart deleted file mode 100644 index 01490c768..000000000 --- a/null_safety/null_safe_app/lib/badapp.dart +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020, the Flutter 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. - -// ignore_for_file: unused_local_variable - -import 'package:flutter/material.dart'; - -import 'services.dart'; - -// This app doesn't work correctly when the services return null. Try to -// uncomment the for-loop and appBar lines below, and note how the new null -// safety static analysis immediately flags those lines as errors. -class BadMyApp extends StatelessWidget { - const BadMyApp({super.key}); - - @override - Widget build(BuildContext context) { - final localizedAppName = Config.getAppName(); - final temperatures = WeatherService.getTemperatures(); - - var tempWidgets = [ - const Text('Temperature next 3 days:'), - // for (final t in temperatures) Text(t.round().toString()), - ]; - - return MaterialApp( - home: Scaffold( - // appBar: AppBar(title: Text(localizedAppName)), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: tempWidgets, - ), - ), - ), - ); - } -} diff --git a/null_safety/null_safe_app/lib/goodapp.dart b/null_safety/null_safe_app/lib/goodapp.dart deleted file mode 100644 index 27bc5f979..000000000 --- a/null_safety/null_safe_app/lib/goodapp.dart +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2020, the Flutter project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'package:flutter/material.dart'; - -import 'services.dart'; - -class GoodMyApp extends StatelessWidget { - const GoodMyApp({super.key}); - - @override - Widget build(BuildContext context) { - final localizedAppName = Config.getAppName(); - final temperatures = WeatherService.getTemperatures(); - - List tempWidgets; - if (temperatures == null) { - tempWidgets = [const Text('Temperature: Failed getting forecast :-(')]; - } else { - // Null safety uses flow analysis. The code checked for null in the branch - // above, so in this branch it known that temperatures cannot be null. - // Notice how we access temperatures without getting an analysis error. - tempWidgets = [ - const Text('Temperature next 3 days:'), - for (final t in temperatures) - // We first use the conditional member access operator to only call - // round() and toString() if t isn't null. We then test if that - // succeeded, and if not use a null conditional operator to supply a - // value handling the error case. - Text(t?.round().toString() ?? 'no forecast'), - ]; - } - - return MaterialApp( - home: Scaffold( - // Here we again use the null conditional operator. - appBar: AppBar(title: Text(localizedAppName ?? 'Weather')), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - // Notice how we're *not* getting an error saying that `tempWidgets` - // is null here despite tempWidgets being declared in line 9 without - // an initial value. This is because of null safety's definite - // assignment feature: We know that in all branches of the code - // (both the if- and else- branches above), the variable was - // assigned a value, and thus isn't null. Try removing the assigment - // from the if-branch and notice the immediate error. - children: tempWidgets, - ), - ), - ), - ); - } -} diff --git a/null_safety/null_safe_app/lib/main.dart b/null_safety/null_safe_app/lib/main.dart deleted file mode 100644 index a0bed71e1..000000000 --- a/null_safety/null_safe_app/lib/main.dart +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2020, the Flutter 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:window_size/window_size.dart'; - -import 'goodapp.dart'; - -void main() { - setupWindow(); - runApp(const GoodMyApp()); -} - -const double windowWidth = 400; -const double windowHeight = 400; - -void setupWindow() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Weather'); - setWindowMinSize(const Size(windowWidth, windowHeight)); - } -} diff --git a/null_safety/null_safe_app/lib/services.dart b/null_safety/null_safe_app/lib/services.dart deleted file mode 100644 index 6a6e17b4b..000000000 --- a/null_safety/null_safe_app/lib/services.dart +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2020, the Flutter project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -class Config { - static String? getAppName() { - // Imagine this looks up a localized version of the app name. We're using - // the current time to simulate a variance in responses. - if (DateTime.now().second.isEven) { - return 'Weather forecast'; - } else { - // Oops, we don't have a localization. - return null; - } - } -} - -class WeatherService { - static List? getTemperatures() { - // Imagine this makes a network call to get the current temperature. - // We're using the current time to simulate a variance in responses. - if (DateTime.now().millisecond.isEven) { - return [32.2, 34.5, 31.0]; - } else { - if ((DateTime.now().second / 10).round().isEven) { - // Oops, we couldn't get any temperatures. - return null; - } else { - // Oops, we couldn't get one of the temperatures. - return [32.2, 34.5, null, 31.0]; - } - } - } -} diff --git a/null_safety/null_safe_app/linux/flutter/generated_plugin_registrant.cc b/null_safety/null_safe_app/linux/flutter/generated_plugin_registrant.cc deleted file mode 100644 index 9f8c70320..000000000 --- a/null_safety/null_safe_app/linux/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - -#include - -void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) window_size_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "WindowSizePlugin"); - window_size_plugin_register_with_registrar(window_size_registrar); -} diff --git a/null_safety/null_safe_app/pubspec.yaml b/null_safety/null_safe_app/pubspec.yaml deleted file mode 100644 index da8dffd95..000000000 --- a/null_safety/null_safe_app/pubspec.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: null_safe_app -description: A new Flutter project. -publish_to: "none" # Do not publish apps & package using the null safety experiment. -version: 1.2.0 - -environment: - sdk: ">=2.17.0-0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - cupertino_icons: ^1.0.2 - window_size: - git: - url: https://github.com/google/flutter-desktop-embedding.git - path: plugins/window_size - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^2.0.1 - -flutter: - uses-material-design: true diff --git a/null_safety/null_safe_app/test/widget_test.dart b/null_safety/null_safe_app/test/widget_test.dart deleted file mode 100644 index bc33d3f09..000000000 --- a/null_safety/null_safe_app/test/widget_test.dart +++ /dev/null @@ -1,14 +0,0 @@ -// This is a basic widget test that tests just the good app code. - -import 'package:flutter_test/flutter_test.dart'; -import 'package:null_safe_app/goodapp.dart'; - -void main() { - testWidgets('App smoke test', (tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const GoodMyApp()); - - // Verify that we have a forecast, or a managed failure. - expect(find.textContaining('Temperature'), findsOneWidget); - }); -} diff --git a/null_safety/null_unsafe_app/.metadata b/null_safety/null_unsafe_app/.metadata deleted file mode 100644 index 31b763f97..000000000 --- a/null_safety/null_unsafe_app/.metadata +++ /dev/null @@ -1,45 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled. - -version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable - -project_type: app - -# Tracks metadata for the flutter migrate command -migration: - platforms: - - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - - # User provided section - - # List of Local paths (relative to this file) that should be - # ignored by the migrate tool. - # - # Files that are not part of the templates will be ignored by default. - unmanaged_files: - - 'lib/main.dart' - - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/null_safety/null_unsafe_app/README.md b/null_safety/null_unsafe_app/README.md deleted file mode 100644 index 662da0aa6..000000000 --- a/null_safety/null_unsafe_app/README.md +++ /dev/null @@ -1,2 +0,0 @@ -For instructions, please see the README.md file located in the directory above this. - diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index 28c6bf030..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index 2ccbfd967..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0b..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png deleted file mode 100644 index 4cde12118..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7e..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index dcdc2306c..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 2ccbfd967..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png deleted file mode 100644 index 6a84f41e1..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png deleted file mode 100644 index d0e1f5853..000000000 Binary files a/null_safety/null_unsafe_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ diff --git a/null_safety/null_unsafe_app/lib/main.dart b/null_safety/null_unsafe_app/lib/main.dart deleted file mode 100644 index f2397dced..000000000 --- a/null_safety/null_unsafe_app/lib/main.dart +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2020, the Flutter 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - setupWindow(); - runApp(const MyApp()); -} - -const double windowWidth = 400; -const double windowHeight = 400; - -void setupWindow() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Weather'); - setWindowMinSize(const Size(windowWidth, windowHeight)); - } -} - -// This app simulates possible null errors. Try running it and see if it fails. -// You can then try to hot reload a few times; you should see it occasionally -// failing and occasionally succeeding. -class MyApp extends StatelessWidget { - const MyApp({Key key}) : super(key: key); - - @override - Widget build(BuildContext context) { - // Get data from services. Note: in a real application, - // these would be async calls, but we’re using sync calls - // for simplicity. - final localizedAppName = Config.getAppName(); - final temperatures = WeatherService.getTemperatures(); - - return MaterialApp( - home: Scaffold( - appBar: AppBar(title: Text(localizedAppName)), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text('Temperature next 3 days:'), - for (final t in temperatures) Text(t.round().toString()), - ], - ), - ), - ), - ); - } -} - -class Config { - static String getAppName() { - // Imagine this looks up a localized version of the app name. We're using - // the current time to simulate a variance in responses. - if (DateTime.now().second.isEven) { - return 'Weather forecast'; - } else { - // Oops, we don't have a localization. - return null; - } - } -} - -class WeatherService { - static List getTemperatures() { - // Imagine this makes a network call to get the current temperature. - // We're using the current time to simulate a variance in responses. - if (DateTime.now().millisecond.isEven) { - return [32.2, 34.5, 31.0]; - } else { - if ((DateTime.now().second / 10).round().isEven) { - // Oops, we couldn't get any temperatures. - return null; - } else { - // Oops, we couldn't get one of the temperatures. - return [32.2, 34.5, null, 31.0]; - } - } - } -} diff --git a/null_safety/null_unsafe_app/linux/flutter/generated_plugin_registrant.cc b/null_safety/null_unsafe_app/linux/flutter/generated_plugin_registrant.cc deleted file mode 100644 index 9f8c70320..000000000 --- a/null_safety/null_unsafe_app/linux/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - -#include - -void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) window_size_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "WindowSizePlugin"); - window_size_plugin_register_with_registrar(window_size_registrar); -} diff --git a/null_safety/null_unsafe_app/pubspec.yaml b/null_safety/null_unsafe_app/pubspec.yaml deleted file mode 100644 index a399d6f18..000000000 --- a/null_safety/null_unsafe_app/pubspec.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: null_unsafe_app -description: A new Flutter project. -publish_to: "none" # Remove this line if you wish to publish to pub.dev -version: 1.0.0+1 - -environment: - sdk: ">=2.7.0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - cupertino_icons: ^1.0.0 - window_size: - git: - url: https://github.com/google/flutter-desktop-embedding.git - path: plugins/window_size - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^2.0.1 - -flutter: - uses-material-design: true diff --git a/null_safety/null_unsafe_app/test/widget_test.dart b/null_safety/null_unsafe_app/test/widget_test.dart deleted file mode 100644 index 331b1aa14..000000000 --- a/null_safety/null_unsafe_app/test/widget_test.dart +++ /dev/null @@ -1,14 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility that Flutter provides. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter_test/flutter_test.dart'; - -void main() { - testWidgets('Rendering the page throws an exception', (tester) async { - // Do nothing, running the app throws an exception on widget render. - }); -} diff --git a/place_tracker/.metadata b/place_tracker/.metadata index af040ba02..56886885a 100644 --- a/place_tracker/.metadata +++ b/place_tracker/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/place_tracker/android/app/build.gradle b/place_tracker/android/app/build.gradle index 704829728..b5ab0a2a4 100644 --- a/place_tracker/android/app/build.gradle +++ b/place_tracker/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.place_tracker" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/place_tracker/android/build.gradle b/place_tracker/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/place_tracker/android/build.gradle +++ b/place_tracker/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/place_tracker/android/gradle/wrapper/gradle-wrapper.properties b/place_tracker/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/place_tracker/android/gradle/wrapper/gradle-wrapper.properties +++ b/place_tracker/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/place_tracker/codelab_rebuild.yaml b/place_tracker/codelab_rebuild.yaml index e26198ac2..92f5731f8 100644 --- a/place_tracker/codelab_rebuild.yaml +++ b/place_tracker/codelab_rebuild.yaml @@ -8,6 +8,9 @@ steps: - web - name: Rebuild Runner flutter: create --org dev.flutter --platform android,ios,web . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Update deps flutter: pub upgrade --major-versions - name: Patch android/app/src/main/AndroidManifest.xml @@ -74,3 +77,6 @@ steps: # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' + - name: Build iOS simulator bundle + platforms: [ macos ] + flutter: build ios --simulator diff --git a/place_tracker/ios/Runner.xcodeproj/project.pbxproj b/place_tracker/ios/Runner.xcodeproj/project.pbxproj index d83354220..9d42eb3d7 100644 --- a/place_tracker/ios/Runner.xcodeproj/project.pbxproj +++ b/place_tracker/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,6 +13,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + FD257B9AFC26F20EF95399A6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 030844B556B92CAB93247FCD /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -29,12 +30,16 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 030844B556B92CAB93247FCD /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 10DA7636174A8CCA366BC3EC /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 42882CC38FD55F3B0AA21215 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7FBFBACD752E73C606BCB05F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -49,12 +54,32 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FD257B9AFC26F20EF95399A6 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0965E239963A71287DC08CF0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 030844B556B92CAB93247FCD /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 71012C096D381D2157389CB4 /* Pods */ = { + isa = PBXGroup; + children = ( + 7FBFBACD752E73C606BCB05F /* Pods-Runner.debug.xcconfig */, + 10DA7636174A8CCA366BC3EC /* Pods-Runner.release.xcconfig */, + 42882CC38FD55F3B0AA21215 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -72,6 +97,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 71012C096D381D2157389CB4 /* Pods */, + 0965E239963A71287DC08CF0 /* Frameworks */, ); sourceTree = ""; }; @@ -105,12 +132,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + BF1E106F26106C23A66FEBC7 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 039E51B57830741D102B2CE8 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -169,8 +198,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 039E51B57830741D102B2CE8 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +232,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -197,6 +245,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + BF1E106F26106C23A66FEBC7 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/place_tracker/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/place_tracker/lib/place.dart b/place_tracker/lib/place.dart index b29c89d1b..f922c983d 100644 --- a/place_tracker/lib/place.dart +++ b/place_tracker/lib/place.dart @@ -42,6 +42,27 @@ class Place { starRating: starRating ?? this.starRating, ); } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is Place && + runtimeType == other.runtimeType && + id == other.id && + latLng == other.latLng && + name == other.name && + category == other.category && + description == other.description && + starRating == other.starRating; + + @override + int get hashCode => + id.hashCode ^ + latLng.hashCode ^ + name.hashCode ^ + category.hashCode ^ + description.hashCode ^ + starRating.hashCode; } enum PlaceCategory { diff --git a/place_tracker/lib/place_details.dart b/place_tracker/lib/place_details.dart index fa9e677f9..ac26e521d 100644 --- a/place_tracker/lib/place_details.dart +++ b/place_tracker/lib/place_details.dart @@ -4,17 +4,17 @@ import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:provider/provider.dart'; import 'place.dart'; +import 'place_tracker_app.dart'; import 'stub_data.dart'; class PlaceDetails extends StatefulWidget { final Place place; - final ValueChanged onChanged; const PlaceDetails({ required this.place, - required this.onChanged, super.key, }); @@ -41,7 +41,7 @@ class _PlaceDetailsState extends State { child: IconButton( icon: const Icon(Icons.save, size: 30.0), onPressed: () { - widget.onChanged(_place); + _onChanged(_place); Navigator.pop(context); }, ), @@ -61,7 +61,7 @@ class _PlaceDetailsState extends State { void initState() { _place = widget.place; _nameController.text = _place.name; - _descriptionController.text = _place.description!; + _descriptionController.text = _place.description ?? ''; return super.initState(); } @@ -113,12 +113,22 @@ class _PlaceDetailsState extends State { )); }); } + + void _onChanged(Place value) { + // Replace the place with the modified version. + final newPlaces = List.from(context.read().places); + final index = newPlaces.indexWhere((place) => place.id == value.id); + newPlaces[index] = value; + + context.read().setPlaces(newPlaces); + } } class _DescriptionTextField extends StatelessWidget { final TextEditingController controller; final ValueChanged onChanged; + const _DescriptionTextField({ required this.controller, required this.onChanged, @@ -151,6 +161,7 @@ class _Map extends StatelessWidget { final GoogleMapController? mapController; final ArgumentCallback onMapCreated; final Set markers; + const _Map({ required this.center, required this.mapController, @@ -187,6 +198,7 @@ class _NameTextField extends StatelessWidget { final TextEditingController controller; final ValueChanged onChanged; + const _NameTextField({ required this.controller, required this.onChanged, @@ -304,6 +316,7 @@ class _StarBar extends StatelessWidget { final int rating; final ValueChanged onChanged; + const _StarBar({ required this.rating, required this.onChanged, diff --git a/place_tracker/lib/place_list.dart b/place_tracker/lib/place_list.dart index 6f0a32e78..e87b5ca4c 100644 --- a/place_tracker/lib/place_list.dart +++ b/place_tracker/lib/place_list.dart @@ -3,10 +3,10 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'place.dart'; -import 'place_details.dart'; import 'place_tracker_app.dart'; class PlaceList extends StatefulWidget { @@ -35,10 +35,7 @@ class _PlaceListState extends State { shrinkWrap: true, children: state.places .where((place) => place.category == state.selectedCategory) - .map((place) => _PlaceListTile( - place: place, - onPlaceChanged: (value) => _onPlaceChanged(value), - )) + .map((place) => _PlaceListTile(place: place)) .toList(), ), ), @@ -51,16 +48,6 @@ class _PlaceListState extends State { Provider.of(context, listen: false) .setSelectedCategory(newCategory); } - - void _onPlaceChanged(Place value) { - // Replace the place with the modified version. - final newPlaces = - List.from(Provider.of(context, listen: false).places); - final index = newPlaces.indexWhere((place) => place.id == value.id); - newPlaces[index] = value; - - Provider.of(context, listen: false).setPlaces(newPlaces); - } } class _CategoryButton extends StatelessWidget { @@ -68,6 +55,7 @@ class _CategoryButton extends StatelessWidget { final bool selected; final ValueChanged onCategoryChanged; + const _CategoryButton({ required this.category, required this.selected, @@ -118,6 +106,7 @@ class _ListCategoryButtonBar extends StatelessWidget { final PlaceCategory selectedCategory; final ValueChanged onCategoryChanged; + const _ListCategoryButtonBar({ required this.selectedCategory, required this.onCategoryChanged, @@ -151,24 +140,14 @@ class _ListCategoryButtonBar extends StatelessWidget { class _PlaceListTile extends StatelessWidget { final Place place; - final ValueChanged onPlaceChanged; const _PlaceListTile({ required this.place, - required this.onPlaceChanged, }); @override Widget build(BuildContext context) { return InkWell( - onTap: () => Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return PlaceDetails( - place: place, - onChanged: (value) => onPlaceChanged(value), - ); - }), - ), + onTap: () => context.go('/place/${place.id}'), child: Container( padding: const EdgeInsets.only(top: 16.0), child: Column( diff --git a/place_tracker/lib/place_map.dart b/place_tracker/lib/place_map.dart index f1f8efc9c..b392a2417 100644 --- a/place_tracker/lib/place_map.dart +++ b/place_tracker/lib/place_map.dart @@ -5,13 +5,14 @@ import 'dart:async'; import 'dart:math'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:provider/provider.dart'; import 'package:uuid/uuid.dart'; import 'place.dart'; -import 'place_details.dart'; import 'place_tracker_app.dart'; class MapConfiguration { @@ -78,10 +79,21 @@ class _PlaceMapState extends State { MapConfiguration? _configuration; @override - Widget build(BuildContext context) { - _maybeUpdateMapConfiguration(); - var state = Provider.of(context); + void initState() { + super.initState(); + context.read().addListener(_watchMapConfigurationChanges); + } + @override + void dispose() { + context.read().removeListener(_watchMapConfigurationChanges); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + _watchMapConfigurationChanges(); + var state = Provider.of(context, listen: true); return Builder(builder: (context) { // We need this additional builder here so that we can pass its context to // _AddPlaceButtonBar's onSavePressed callback. This callback shows a @@ -189,7 +201,7 @@ class _PlaceMapState extends State { infoWindowParam: InfoWindow( title: 'New Place', snippet: null, - onTap: () => _pushPlaceDetailsScreen(newPlace), + onTap: () => context.go('/place/${newPlace.id}'), ), draggableParam: false, ); @@ -212,7 +224,7 @@ class _PlaceMapState extends State { action: SnackBarAction( label: 'Edit', onPressed: () async { - _pushPlaceDetailsScreen(newPlace); + context.go('/place/${newPlace.id}'); }, ), ), @@ -221,14 +233,6 @@ class _PlaceMapState extends State { // Add the new place to the places stored in appState. final newPlaces = List.from(appState.places)..add(newPlace); - // Manually update our map configuration here since our map is already - // updated with the new marker. Otherwise, the map would be reconfigured - // in the main build method due to a modified AppState. - _configuration = MapConfiguration( - places: newPlaces, - selectedCategory: appState.selectedCategory, - ); - appState.setPlaces(newPlaces); } } @@ -240,7 +244,7 @@ class _PlaceMapState extends State { infoWindow: InfoWindow( title: place.name, snippet: '${place.starRating} Star Rating', - onTap: () => _pushPlaceDetailsScreen(place), + onTap: () => context.go('/place/${place.id}'), ), icon: await _getPlaceMarkerIcon(context, place.category), visible: place.category == @@ -250,11 +254,10 @@ class _PlaceMapState extends State { return marker; } - Future _maybeUpdateMapConfiguration() async { - _configuration ??= - MapConfiguration.of(Provider.of(context, listen: false)); - final newConfiguration = - MapConfiguration.of(Provider.of(context, listen: false)); + Future _watchMapConfigurationChanges() async { + final appState = context.read(); + _configuration ??= MapConfiguration.of(appState); + final newConfiguration = MapConfiguration.of(appState); // Since we manually update [_configuration] when place or selectedCategory // changes come from the [place_map], we should only enter this if statement @@ -270,9 +273,14 @@ class _PlaceMapState extends State { } else { // At this point, we know the places have been updated from the list // view. We need to reconfigure the map to respect the updates. - newConfiguration.places - .where((p) => !_configuration!.places.contains(p)) - .map((value) => _updateExistingPlaceMarker(place: value)); + for (final place in newConfiguration.places) { + final oldPlace = + _configuration!.places.firstWhereOrNull((p) => p.id == place.id); + if (oldPlace == null || oldPlace != place) { + // New place or updated place. + _updateExistingPlaceMarker(place: place); + } + } await _zoomToFitPlaces( _getPlacesForCategory( @@ -299,27 +307,6 @@ class _PlaceMapState extends State { }); } - void _onPlaceChanged(Place value) { - // Replace the place with the modified version. - final newPlaces = - List.from(Provider.of(context, listen: false).places); - final index = newPlaces.indexWhere((place) => place.id == value.id); - newPlaces[index] = value; - - _updateExistingPlaceMarker(place: value); - - // Manually update our map configuration here since our map is already - // updated with the new marker. Otherwise, the map would be reconfigured - // in the main build method due to a modified AppState. - _configuration = MapConfiguration( - places: newPlaces, - selectedCategory: - Provider.of(context, listen: false).selectedCategory, - ); - - Provider.of(context, listen: false).setPlaces(newPlaces); - } - void _onToggleMapTypePressed() { final nextType = MapType.values[(_currentMapType.index + 1) % MapType.values.length]; @@ -329,18 +316,6 @@ class _PlaceMapState extends State { }); } - void _pushPlaceDetailsScreen(Place place) { - Navigator.push( - context, - MaterialPageRoute(builder: (context) { - return PlaceDetails( - place: place, - onChanged: (value) => _onPlaceChanged(value), - ); - }), - ); - } - Future _showPlacesForSelectedCategory(PlaceCategory category) async { setState(() { for (var marker in List.of(_markedPlaces.keys)) { @@ -412,15 +387,17 @@ class _PlaceMapState extends State { maxLong = max(maxLong, place.longitude); } - await controller.animateCamera( - CameraUpdate.newLatLngBounds( - LatLngBounds( - southwest: LatLng(minLat, minLong), - northeast: LatLng(maxLat, maxLong), + WidgetsBinding.instance.addPostFrameCallback((_) { + controller.animateCamera( + CameraUpdate.newLatLngBounds( + LatLngBounds( + southwest: LatLng(minLat, minLong), + northeast: LatLng(maxLat, maxLong), + ), + 48.0, ), - 48.0, - ), - ); + ); + }); } static Future _getPlaceMarkerIcon( @@ -512,9 +489,9 @@ class _CategoryButtonBar extends StatelessWidget { child: ButtonBar( alignment: MainAxisAlignment.center, children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - foregroundColor: + FilledButton( + style: FilledButton.styleFrom( + backgroundColor: selectedPlaceCategory == PlaceCategory.favorite ? Colors.green[700] : Colors.lightGreen), @@ -524,9 +501,9 @@ class _CategoryButtonBar extends StatelessWidget { ), onPressed: () => onChanged(PlaceCategory.favorite), ), - ElevatedButton( - style: ElevatedButton.styleFrom( - foregroundColor: + FilledButton( + style: FilledButton.styleFrom( + backgroundColor: selectedPlaceCategory == PlaceCategory.visited ? Colors.green[700] : Colors.lightGreen), @@ -536,9 +513,9 @@ class _CategoryButtonBar extends StatelessWidget { ), onPressed: () => onChanged(PlaceCategory.visited), ), - ElevatedButton( - style: ElevatedButton.styleFrom( - foregroundColor: + FilledButton( + style: FilledButton.styleFrom( + backgroundColor: selectedPlaceCategory == PlaceCategory.wantToGo ? Colors.green[700] : Colors.lightGreen), @@ -579,7 +556,6 @@ class _MapFabs extends StatelessWidget { heroTag: 'add_place_button', onPressed: onAddPlacePressed, materialTapTargetSize: MaterialTapTargetSize.padded, - backgroundColor: Colors.green, child: const Icon(Icons.add_location, size: 36.0), ), const SizedBox(height: 12.0), @@ -588,7 +564,6 @@ class _MapFabs extends StatelessWidget { onPressed: onToggleMapTypePressed, materialTapTargetSize: MaterialTapTargetSize.padded, mini: true, - backgroundColor: Colors.green, child: const Icon(Icons.layers, size: 28.0), ), ], diff --git a/place_tracker/lib/place_tracker_app.dart b/place_tracker/lib/place_tracker_app.dart index 1a9a41dea..7455e28ac 100644 --- a/place_tracker/lib/place_tracker_app.dart +++ b/place_tracker/lib/place_tracker_app.dart @@ -3,10 +3,12 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:provider/provider.dart'; import 'place.dart'; +import 'place_details.dart'; import 'place_list.dart'; import 'place_map.dart'; import 'stub_data.dart'; @@ -21,8 +23,38 @@ class PlaceTrackerApp extends StatelessWidget { @override Widget build(BuildContext context) { - return const MaterialApp( - home: _PlaceTrackerHomePage(), + return MaterialApp.router( + theme: ThemeData( + useMaterial3: true, + colorSchemeSeed: Colors.green, + appBarTheme: AppBarTheme( + backgroundColor: Colors.green[700], + foregroundColor: Colors.white, + ), + floatingActionButtonTheme: FloatingActionButtonThemeData( + backgroundColor: Colors.green[700], + foregroundColor: Colors.white, + ), + ), + routerConfig: GoRouter(routes: [ + GoRoute( + path: '/', + builder: (context, state) => const _PlaceTrackerHomePage(), + routes: [ + GoRoute( + path: 'place/:id', + builder: (context, state) { + final id = state.params['id']!; + final place = context + .read() + .places + .singleWhere((place) => place.id == id); + return PlaceDetails(place: place); + }, + ), + ], + ), + ]), ); } } @@ -45,7 +77,6 @@ class _PlaceTrackerHomePage extends StatelessWidget { Text('Place Tracker'), ], ), - backgroundColor: Colors.green[700], actions: [ Padding( padding: const EdgeInsets.fromLTRB(0.0, 0.0, 16.0, 0.0), diff --git a/place_tracker/pubspec.yaml b/place_tracker/pubspec.yaml index b61f6c60c..76dfcc47d 100644 --- a/place_tracker/pubspec.yaml +++ b/place_tracker/pubspec.yaml @@ -4,7 +4,7 @@ description: A new Flutter project. version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ">=2.18.0 <3.0.0" dependencies: flutter: @@ -15,6 +15,8 @@ dependencies: google_maps_flutter_web: ">=0.3.0+1 <0.5.0" provider: ^6.0.2 uuid: ^3.0.4 + go_router: ">=5.2.4 <7.0.0" + collection: ^1.16.0 dev_dependencies: flutter_test: diff --git a/place_tracker/web/index.html b/place_tracker/web/index.html index b2dc04a92..1d8a9783a 100644 --- a/place_tracker/web/index.html +++ b/place_tracker/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/platform_channels/.metadata b/platform_channels/.metadata index a7f9d6a7a..8da4f9720 100644 --- a/platform_channels/.metadata +++ b/platform_channels/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,14 +13,14 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/platform_channels/android/app/build.gradle b/platform_channels/android/app/build.gradle index 7c9441dae..13205644d 100644 --- a/platform_channels/android/app/build.gradle +++ b/platform_channels/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.platform_channels" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/platform_channels/android/build.gradle b/platform_channels/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/platform_channels/android/build.gradle +++ b/platform_channels/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/platform_channels/android/gradle/wrapper/gradle-wrapper.properties b/platform_channels/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/platform_channels/android/gradle/wrapper/gradle-wrapper.properties +++ b/platform_channels/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/platform_channels/codelab_rebuild.yaml b/platform_channels/codelab_rebuild.yaml index 9f4a94d67..bab5eb849 100644 --- a/platform_channels/codelab_rebuild.yaml +++ b/platform_channels/codelab_rebuild.yaml @@ -7,6 +7,9 @@ steps: - ios - name: Flutter recreate flutter: create --platform android,ios --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Patch android/settings.gradle path: android/settings.gradle patch-u: | diff --git a/platform_channels/ios/Runner.xcodeproj/project.pbxproj b/platform_channels/ios/Runner.xcodeproj/project.pbxproj index fade5e471..70520893c 100644 --- a/platform_channels/ios/Runner.xcodeproj/project.pbxproj +++ b/platform_channels/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -171,6 +171,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +186,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -478,4 +480,4 @@ /* End XCConfigurationList section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; -} +} \ No newline at end of file diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/platform_channels/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/platform_channels/lib/main.dart b/platform_channels/lib/main.dart index d12250f4e..d80d7cc1a 100644 --- a/platform_channels/lib/main.dart +++ b/platform_channels/lib/main.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:platform_channels/src/add_pet_details.dart'; import 'package:platform_channels/src/event_channel_demo.dart'; import 'package:platform_channels/src/method_channel_demo.dart'; @@ -18,25 +19,54 @@ class PlatformChannelSample extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp( - routes: { - '/methodChannelDemo': (context) => const MethodChannelDemo(), - '/eventChannelDemo': (context) => const EventChannelDemo(), - '/platformImageDemo': (context) => const PlatformImageDemo(), - '/petListScreen': (context) => const PetListScreen(), - '/addPetDetails': (context) => const AddPetDetails(), - }, + return MaterialApp.router( title: 'Platform Channel Sample', theme: ThemeData( snackBarTheme: SnackBarThemeData( backgroundColor: Colors.blue[500], ), ), - home: const HomePage(), + routerConfig: router(), ); } } +GoRouter router([String? initialLocation]) { + return GoRouter( + initialLocation: initialLocation ?? '/', + routes: [ + GoRoute( + path: '/', + builder: (context, state) => const HomePage(), + routes: [ + GoRoute( + path: 'methodChannelDemo', + builder: (context, state) => const MethodChannelDemo(), + ), + GoRoute( + path: 'eventChannelDemo', + builder: (context, state) => const EventChannelDemo(), + ), + GoRoute( + path: 'platformImageDemo', + builder: (context, state) => const PlatformImageDemo(), + ), + GoRoute( + path: 'petListScreen', + builder: (context, state) => const PetListScreen(), + routes: [ + GoRoute( + path: 'addPetDetails', + builder: (context, state) => const AddPetDetails(), + ), + ], + ), + ], + ), + ], + ); +} + class DemoInfo { final String demoTitle; final String demoRoute; @@ -90,7 +120,7 @@ class DemoTile extends StatelessWidget { return ListTile( title: Text(demoInfo.demoTitle), onTap: () { - Navigator.pushNamed(context, demoInfo.demoRoute); + context.go(demoInfo.demoRoute); }, ); } diff --git a/platform_channels/lib/src/add_pet_details.dart b/platform_channels/lib/src/add_pet_details.dart index 96151b370..bc87007ce 100644 --- a/platform_channels/lib/src/add_pet_details.dart +++ b/platform_channels/lib/src/add_pet_details.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:platform_channels/src/pet_list_message_channel.dart'; /// Demonstrates how to use [BasicMessageChannel] to send a message to platform. @@ -36,7 +37,7 @@ class _AddPetDetailsState extends State { ), ); - Navigator.pop(context); + context.pop(); }, ) ], diff --git a/platform_channels/lib/src/pet_list_screen.dart b/platform_channels/lib/src/pet_list_screen.dart index c3b7b0056..3ea9f1389 100644 --- a/platform_channels/lib/src/pet_list_screen.dart +++ b/platform_channels/lib/src/pet_list_screen.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:go_router/go_router.dart'; import 'package:platform_channels/src/pet_list_message_channel.dart'; /// Demonstrates how to use [BasicMessageChannel] to send & receive the platform @@ -20,8 +21,8 @@ class _PetListScreenState extends State { final scaffoldKey = GlobalKey(); @override - void initState() { - super.initState(); + void didChangeDependencies() { + super.didChangeDependencies(); // Receives a string of json object from the platform and converts it // to PetModel. final scaffoldMessenger = ScaffoldMessenger.of(context); @@ -52,7 +53,7 @@ class _PetListScreenState extends State { floatingActionButton: FloatingActionButton( child: const Icon(Icons.add), onPressed: () { - Navigator.pushNamed(context, '/addPetDetails'); + context.go('/petListScreen/addPetDetails'); }, ), body: petListModel.petList.isEmpty diff --git a/platform_channels/pubspec.yaml b/platform_channels/pubspec.yaml index 87dba9a66..24bb54c5e 100644 --- a/platform_channels/pubspec.yaml +++ b/platform_channels/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: sdk: flutter cupertino_icons: ^1.0.3 + go_router: ^6.0.0 dev_dependencies: flutter_test: diff --git a/platform_channels/test/src/add_pet_details_test.dart b/platform_channels/test/src/add_pet_details_test.dart index 0689fc3a1..d21a994d3 100644 --- a/platform_channels/test/src/add_pet_details_test.dart +++ b/platform_channels/test/src/add_pet_details_test.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:platform_channels/src/add_pet_details.dart'; +import 'package:platform_channels/main.dart' as app; void main() { group('AddPetDetails tests', () { @@ -20,7 +20,12 @@ void main() { }); testWidgets('Enter pet details', (tester) async { - await tester.pumpWidget(const MaterialApp(home: AddPetDetails())); + var router = app.router('/petListScreen/addPetDetails'); + await tester.pumpWidget( + MaterialApp.router( + routerConfig: router, + ), + ); // Enter the breed of cat. await tester.enterText(find.byType(TextField), 'Persian'); @@ -33,6 +38,9 @@ void main() { expect(petList, isNotEmpty); expect(petList.last['breed'], 'Persian'); + + // Navigate back to /petListScreen + expect(router.location, '/petListScreen'); }); }); } diff --git a/platform_design/.metadata b/platform_design/.metadata index af040ba02..56886885a 100644 --- a/platform_design/.metadata +++ b/platform_design/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 # User provided section diff --git a/platform_design/android/app/build.gradle b/platform_design/android/app/build.gradle index 3be9de9b5..2dfc0657f 100644 --- a/platform_design/android/app/build.gradle +++ b/platform_design/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.platform_design" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/platform_design/android/build.gradle b/platform_design/android/build.gradle index 83ae22004..58a8c74b1 100644 --- a/platform_design/android/build.gradle +++ b/platform_design/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/platform_design/android/gradle/wrapper/gradle-wrapper.properties b/platform_design/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/platform_design/android/gradle/wrapper/gradle-wrapper.properties +++ b/platform_design/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/platform_design/codelab_rebuild.yaml b/platform_design/codelab_rebuild.yaml index 778c5e193..f36734d29 100644 --- a/platform_design/codelab_rebuild.yaml +++ b/platform_design/codelab_rebuild.yaml @@ -8,6 +8,9 @@ steps: - web - name: Flutter recreate runner flutter: create --platform android,ios,web --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj - name: Patch web/manifest.json path: web/manifest.json patch-u: | @@ -22,5 +25,8 @@ steps: "orientation": "portrait-primary", "prefer_related_applications": false, "icons": [ + - name: Update dependencies + flutter: pub upgrade --major-versions - name: Build for iOS + platforms: [ macos ] flutter: build ios --simulator diff --git a/platform_design/ios/Runner.xcodeproj/project.pbxproj b/platform_design/ios/Runner.xcodeproj/project.pbxproj index 9fad160f2..536b0d0de 100644 --- a/platform_design/ios/Runner.xcodeproj/project.pbxproj +++ b/platform_design/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -171,6 +171,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +186,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/platform_design/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/platform_design/lib/main.dart b/platform_design/lib/main.dart index 1151bf8c1..f9aa8face 100644 --- a/platform_design/lib/main.dart +++ b/platform_design/lib/main.dart @@ -25,6 +25,7 @@ class MyAdaptingApp extends StatelessWidget { theme: ThemeData( // Use the green theme for Material widgets. primarySwatch: Colors.green, + useMaterial3: true, ), darkTheme: ThemeData.dark(), builder: (context, child) { diff --git a/platform_design/web/index.html b/platform_design/web/index.html index 91504295d..f9194a32b 100644 --- a/platform_design/web/index.html +++ b/platform_design/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/provider_shopper/.gitignore b/provider_shopper/.gitignore index c39f0d07f..24476c5d1 100644 --- a/provider_shopper/.gitignore +++ b/provider_shopper/.gitignore @@ -8,6 +8,7 @@ .buildlog/ .history .svn/ +migrate_working_dir/ # IntelliJ related *.iml @@ -15,58 +16,29 @@ *.iws .idea/ -# Visual Studio Code related -.vscode/ +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ # Flutter/Dart/Pub related **/doc/api/ +**/ios/Flutter/.last_build_id .dart_tool/ .flutter-plugins +.flutter-plugins-dependencies .packages .pub-cache/ .pub/ /build/ -# Android related -**/android/**/gradle-wrapper.jar -**/android/.gradle -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java +# Symbolication related +app.*.symbols -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* +# Obfuscation related +app.*.map.json -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/provider_shopper/.metadata b/provider_shopper/.metadata index 182cccafd..d680382e1 100644 --- a/provider_shopper/.metadata +++ b/provider_shopper/.metadata @@ -1,10 +1,45 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled and should not be manually edited. +# This file should be version controlled. version: - revision: 78910062997c3a836feee883712c241a5fd22983 - channel: stable + revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + channel: beta project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + - platform: android + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + - platform: ios + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + - platform: linux + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + - platform: macos + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + - platform: web + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + - platform: windows + create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/provider_shopper/android/app/build.gradle b/provider_shopper/android/app/build.gradle index 34adbe25f..f14c998e6 100644 --- a/provider_shopper/android/app/build.gradle +++ b/provider_shopper/android/app/build.gradle @@ -27,6 +27,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -44,6 +45,8 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.provider_shopper" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/provider_shopper/android/app/src/debug/AndroidManifest.xml b/provider_shopper/android/app/src/debug/AndroidManifest.xml index f1000ab6d..b7299eab0 100644 --- a/provider_shopper/android/app/src/debug/AndroidManifest.xml +++ b/provider_shopper/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/provider_shopper/android/app/src/main/res/values-night/styles.xml b/provider_shopper/android/app/src/main/res/values-night/styles.xml index 3db14bb53..06952be74 100644 --- a/provider_shopper/android/app/src/main/res/values-night/styles.xml +++ b/provider_shopper/android/app/src/main/res/values-night/styles.xml @@ -3,7 +3,7 @@ diff --git a/provider_shopper/android/build.gradle b/provider_shopper/android/build.gradle index 4256f9173..58a8c74b1 100644 --- a/provider_shopper/android/build.gradle +++ b/provider_shopper/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.2.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/provider_shopper/android/gradle/wrapper/gradle-wrapper.properties b/provider_shopper/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afd..3c472b99c 100644 --- a/provider_shopper/android/gradle/wrapper/gradle-wrapper.properties +++ b/provider_shopper/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/provider_shopper/codelab_rebuild.yaml b/provider_shopper/codelab_rebuild.yaml new file mode 100644 index 000000000..d972fb5dd --- /dev/null +++ b/provider_shopper/codelab_rebuild.yaml @@ -0,0 +1,21 @@ +# Run with tooling from https://github.com/flutter/codelabs/tree/main/tooling/codelab_rebuild +name: Provider Shopper rebuild script +steps: + - name: Remove runners + rmdirs: + - android + - ios + - linux + - macos + - web + - windows + - name: Flutter recreate + flutter: create --org dev.flutter . + - name: Strip DEVELOPMENT_TEAM + strip-lines-containing: DEVELOPMENT_TEAM = + path: ios/Runner.xcodeproj/project.pbxproj + - name: Update dependencies + flutter: pub upgrade --major-versions + - name: Build iOS simulator bundle + platforms: [ macos ] + flutter: build ios --simulator diff --git a/provider_shopper/ios/.gitignore b/provider_shopper/ios/.gitignore index fe4a4744b..7a7f9873a 100644 --- a/provider_shopper/ios/.gitignore +++ b/provider_shopper/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -14,11 +15,11 @@ Icon? profile xcuserdata **/.generated/ -Flutter/.last_build_id Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/provider_shopper/ios/Flutter/AppFrameworkInfo.plist b/provider_shopper/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78a..9625e105d 100644 --- a/provider_shopper/ios/Flutter/AppFrameworkInfo.plist +++ b/provider_shopper/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 11.0 diff --git a/provider_shopper/ios/Podfile b/provider_shopper/ios/Podfile index 1e8c3c90a..88359b225 100644 --- a/provider_shopper/ios/Podfile +++ b/provider_shopper/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/provider_shopper/ios/Runner.xcodeproj/project.pbxproj b/provider_shopper/ios/Runner.xcodeproj/project.pbxproj index 672282308..bde2a8375 100644 --- a/provider_shopper/ios/Runner.xcodeproj/project.pbxproj +++ b/provider_shopper/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,6 +13,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + A16AF2B2BD9158CD349F8A32 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69142DFAD75FC2B5E954185B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -31,7 +32,10 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2D52EFD5568A5BA04B844B0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4292536A2DFEA1AAAE0A2A11 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 69142DFAD75FC2B5E954185B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -42,6 +46,7 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BA81FF81B84F76D4D7929913 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -49,12 +54,24 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A16AF2B2BD9158CD349F8A32 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 40C0A41DA9CF6B17B647CD56 /* Pods */ = { + isa = PBXGroup; + children = ( + 4292536A2DFEA1AAAE0A2A11 /* Pods-Runner.debug.xcconfig */, + BA81FF81B84F76D4D7929913 /* Pods-Runner.release.xcconfig */, + 2D52EFD5568A5BA04B844B0F /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -72,6 +89,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 40C0A41DA9CF6B17B647CD56 /* Pods */, + EA8CFCD89029CC9949C84519 /* Frameworks */, ); sourceTree = ""; }; @@ -98,6 +117,14 @@ path = Runner; sourceTree = ""; }; + EA8CFCD89029CC9949C84519 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 69142DFAD75FC2B5E954185B /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -105,6 +132,7 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + EDBEF8361A7DE33B26F08D47 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, @@ -127,7 +155,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -171,6 +199,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -185,6 +214,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -197,6 +227,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + EDBEF8361A7DE33B26F08D47 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -272,7 +324,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -289,15 +341,10 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerShopper; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -354,7 +401,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -403,11 +450,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -421,15 +469,10 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerShopper; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -448,15 +491,10 @@ CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerShopper; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cfd..c87d15a33 100644 --- a/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/provider_shopper/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + - - + + diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/provider_shopper/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/provider_shopper/ios/Runner/Info.plist b/provider_shopper/ios/Runner/Info.plist index a6eda0284..40e10d5dc 100644 --- a/provider_shopper/ios/Runner/Info.plist +++ b/provider_shopper/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Provider Shopper CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -41,5 +43,9 @@ UIViewControllerBasedStatusBarAppearance + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/provider_shopper/lib/main.dart b/provider_shopper/lib/main.dart index 2a3e4fa6b..8992e78ac 100644 --- a/provider_shopper/lib/main.dart +++ b/provider_shopper/lib/main.dart @@ -6,6 +6,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:provider_shopper/common/theme.dart'; import 'package:provider_shopper/models/cart.dart'; @@ -39,6 +40,28 @@ void setupWindow() { } } +GoRouter router() { + return GoRouter( + initialLocation: '/login', + routes: [ + GoRoute( + path: '/login', + builder: (context, state) => const MyLogin(), + ), + GoRoute( + path: '/catalog', + builder: (context, state) => const MyCatalog(), + routes: [ + GoRoute( + path: 'cart', + builder: (context, state) => const MyCart(), + ), + ], + ), + ], + ); +} + class MyApp extends StatelessWidget { const MyApp({super.key}); @@ -62,15 +85,10 @@ class MyApp extends StatelessWidget { }, ), ], - child: MaterialApp( + child: MaterialApp.router( title: 'Provider Demo', theme: appTheme, - initialRoute: '/', - routes: { - '/': (context) => const MyLogin(), - '/catalog': (context) => const MyCatalog(), - '/cart': (context) => const MyCart(), - }, + routerConfig: router(), ), ); } diff --git a/provider_shopper/lib/screens/catalog.dart b/provider_shopper/lib/screens/catalog.dart index 85947f458..e3f4d579d 100644 --- a/provider_shopper/lib/screens/catalog.dart +++ b/provider_shopper/lib/screens/catalog.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:provider_shopper/models/cart.dart'; import 'package:provider_shopper/models/catalog.dart'; @@ -80,7 +81,7 @@ class _MyAppBar extends StatelessWidget { actions: [ IconButton( icon: const Icon(Icons.shopping_cart), - onPressed: () => Navigator.pushNamed(context, '/cart'), + onPressed: () => context.go('/catalog/cart'), ), ], ); diff --git a/provider_shopper/lib/screens/login.dart b/provider_shopper/lib/screens/login.dart index 8fa851485..5dd64b629 100644 --- a/provider_shopper/lib/screens/login.dart +++ b/provider_shopper/lib/screens/login.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; class MyLogin extends StatelessWidget { const MyLogin({super.key}); @@ -36,10 +37,10 @@ class MyLogin extends StatelessWidget { ), ElevatedButton( onPressed: () { - Navigator.pushReplacementNamed(context, '/catalog'); + context.pushReplacement('/catalog'); }, style: ElevatedButton.styleFrom( - foregroundColor: Colors.yellow, + backgroundColor: Colors.yellow, ), child: const Text('ENTER'), ) diff --git a/provider_shopper/linux/CMakeLists.txt b/provider_shopper/linux/CMakeLists.txt index 53d5c3a94..8989b41a5 100644 --- a/provider_shopper/linux/CMakeLists.txt +++ b/provider_shopper/linux/CMakeLists.txt @@ -1,11 +1,19 @@ +# Project-level configuration. cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "provider_shopper") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID set(APPLICATION_ID "dev.flutter.provider_shopper") +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. cmake_policy(SET CMP0063 NEW) +# Load bundled libraries from the lib/ directory relative to the binary. set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") # Root filesystem for cross-building. @@ -18,7 +26,7 @@ if(FLUTTER_TARGET_PLATFORM_SYSROOT) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endif() -# Configure build options. +# Define build configuration options. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Flutter build mode" FORCE) @@ -27,6 +35,10 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) endif() # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_14) target_compile_options(${TARGET} PRIVATE -Wall -Werror) @@ -34,9 +46,8 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) # System-level dependencies. @@ -45,16 +56,27 @@ pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") -# Application build +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} "main.cc" "my_application.cc" "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter) target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) + # Only the install-generated bundle's copy of the executable will launch # correctly, since the resources must in the right relative locations. To avoid # people trying to run the unbundled copy, put it in a subdirectory instead of @@ -94,11 +116,11 @@ install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR} install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) -endif() +endforeach(bundled_library) # Fully re-copy the assets directory on each build to avoid having stale files # from a previous install. diff --git a/provider_shopper/linux/flutter/CMakeLists.txt b/provider_shopper/linux/flutter/CMakeLists.txt index 33fd5801e..d5bd01648 100644 --- a/provider_shopper/linux/flutter/CMakeLists.txt +++ b/provider_shopper/linux/flutter/CMakeLists.txt @@ -1,3 +1,4 @@ +# This file controls Flutter-level build steps. It should not be edited. cmake_minimum_required(VERSION 3.10) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") diff --git a/provider_shopper/macos/.gitignore b/provider_shopper/macos/.gitignore index d2fd37723..746adbb6b 100644 --- a/provider_shopper/macos/.gitignore +++ b/provider_shopper/macos/.gitignore @@ -3,4 +3,5 @@ **/Pods/ # Xcode-related +**/dgph **/xcuserdata/ diff --git a/provider_shopper/macos/Podfile b/provider_shopper/macos/Podfile index dade8dfad..049abe295 100644 --- a/provider_shopper/macos/Podfile +++ b/provider_shopper/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/provider_shopper/macos/Runner.xcodeproj/project.pbxproj b/provider_shopper/macos/Runner.xcodeproj/project.pbxproj index 5b5f99469..d86acc44a 100644 --- a/provider_shopper/macos/Runner.xcodeproj/project.pbxproj +++ b/provider_shopper/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -26,10 +26,6 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; }; - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; }; - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -49,8 +45,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */, - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */, ); name = "Bundle Framework"; runOnlyForDeploymentPostprocessing = 0; @@ -69,13 +63,11 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,8 +75,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */, - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -138,8 +128,6 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - D73912EF22F37F9E000D13A0 /* App.framework */, - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */, ); path = Flutter; sourceTree = ""; @@ -194,8 +182,8 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0930; - ORGANIZATIONNAME = "The Flutter Authors"; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; TargetAttributes = { 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; @@ -214,7 +202,7 @@ }; }; buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 8.0"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -247,6 +235,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -260,7 +249,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -280,7 +269,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; /* End PBXShellScriptBuildPhase section */ @@ -356,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -373,10 +362,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -439,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -486,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -503,10 +488,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -527,10 +508,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/provider_shopper/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/provider_shopper/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 764c74b8d..000000000 --- a/provider_shopper/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/provider_shopper/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/provider_shopper/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index dbc214d32..5c1ebb8ff 100644 --- a/provider_shopper/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/provider_shopper/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - - - - - + + - - + + + + diff --git a/provider_shopper/macos/Runner/Configs/AppInfo.xcconfig b/provider_shopper/macos/Runner/Configs/AppInfo.xcconfig index 082ddee57..15f324de3 100644 --- a/provider_shopper/macos/Runner/Configs/AppInfo.xcconfig +++ b/provider_shopper/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = provider_shopper PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerShopper // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2020 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/provider_shopper/pubspec.yaml b/provider_shopper/pubspec.yaml index 76edfb554..dd2fa85ac 100644 --- a/provider_shopper/pubspec.yaml +++ b/provider_shopper/pubspec.yaml @@ -10,11 +10,8 @@ environment: dependencies: flutter: sdk: flutter - - # Import the provider package. + go_router: ^6.0.0 provider: ^6.0.2 - - # plugin is not yet part of the flutter framework window_size: git: url: https://github.com/google/flutter-desktop-embedding.git diff --git a/provider_shopper/test/login_widget_test.dart b/provider_shopper/test/login_widget_test.dart index c06e9d5bc..20e5ae4d3 100644 --- a/provider_shopper/test/login_widget_test.dart +++ b/provider_shopper/test/login_widget_test.dart @@ -5,10 +5,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; +import 'package:provider_shopper/main.dart'; import 'package:provider_shopper/models/cart.dart'; import 'package:provider_shopper/models/catalog.dart'; -import 'package:provider_shopper/screens/catalog.dart'; -import 'package:provider_shopper/screens/login.dart'; void main() { testWidgets('Login page Widget test', (tester) async { @@ -23,13 +22,7 @@ void main() { }, ), ], - child: MaterialApp( - initialRoute: '/', - routes: { - '/': (context) => const MyLogin(), - '/catalog': (context) => const MyCatalog(), - }, - ), + child: MaterialApp.router(routerConfig: router()), )); // Verifying the behaviour of ENTER button. diff --git a/provider_shopper/web/index.html b/provider_shopper/web/index.html index 4af726f95..db026fff8 100644 --- a/provider_shopper/web/index.html +++ b/provider_shopper/web/index.html @@ -1,20 +1,59 @@ + + + - + - + + + + provider_shopper - + + + + + - + diff --git a/provider_shopper/web/manifest.json b/provider_shopper/web/manifest.json index 0eaf3dd19..36ee28ac8 100644 --- a/provider_shopper/web/manifest.json +++ b/provider_shopper/web/manifest.json @@ -2,10 +2,10 @@ "name": "provider_shopper", "short_name": "provider_shopper", "start_url": ".", - "display": "minimal-ui", + "display": "standalone", "background_color": "#0175C2", "theme_color": "#0175C2", - "description": "A shopping app sample that uses Provider for state management.", + "description": "A new Flutter project.", "orientation": "portrait-primary", "prefer_related_applications": false, "icons": [ @@ -18,6 +18,18 @@ "src": "icons/Icon-512.png", "sizes": "512x512", "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" } ] } diff --git a/provider_shopper/windows/CMakeLists.txt b/provider_shopper/windows/CMakeLists.txt index 3ac5aee72..3f532acda 100644 --- a/provider_shopper/windows/CMakeLists.txt +++ b/provider_shopper/windows/CMakeLists.txt @@ -1,13 +1,16 @@ +# Project-level configuration. cmake_minimum_required(VERSION 3.14) project(provider_shopper LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "provider_shopper") +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. cmake_policy(SET CMP0063 NEW) -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Configure build options. +# Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(IS_MULTICONFIG) set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" @@ -20,7 +23,7 @@ else() "Debug" "Profile" "Release") endif() endif() - +# Define settings for the Profile build mode. set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") @@ -30,6 +33,10 @@ set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") add_definitions(-DUNICODE -D_UNICODE) # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_17) target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") @@ -38,12 +45,11 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) -# Application build +# Application build; see runner/CMakeLists.txt. add_subdirectory("runner") # Generated plugin build rules, which manage building the plugins and adding diff --git a/provider_shopper/windows/flutter/CMakeLists.txt b/provider_shopper/windows/flutter/CMakeLists.txt index b2e4bd8d6..930d2071a 100644 --- a/provider_shopper/windows/flutter/CMakeLists.txt +++ b/provider_shopper/windows/flutter/CMakeLists.txt @@ -1,3 +1,4 @@ +# This file controls Flutter-level build steps. It should not be edited. cmake_minimum_required(VERSION 3.14) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") diff --git a/provider_shopper/windows/runner/CMakeLists.txt b/provider_shopper/windows/runner/CMakeLists.txt index de2d8916b..394917c05 100644 --- a/provider_shopper/windows/runner/CMakeLists.txt +++ b/provider_shopper/windows/runner/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.14) project(runner LANGUAGES CXX) +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} WIN32 "flutter_window.cpp" "main.cpp" @@ -10,8 +15,26 @@ add_executable(${BINARY_NAME} WIN32 "Runner.rc" "runner.exe.manifest" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/provider_shopper/windows/runner/Runner.rc b/provider_shopper/windows/runner/Runner.rc index 16a1c2f02..5a6de2241 100644 --- a/provider_shopper/windows/runner/Runner.rc +++ b/provider_shopper/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "provider_shopper" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "provider_shopper" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "provider_shopper.exe" "\0" VALUE "ProductName", "provider_shopper" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/provider_shopper/windows/runner/flutter_window.cpp b/provider_shopper/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/provider_shopper/windows/runner/flutter_window.cpp +++ b/provider_shopper/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/provider_shopper/windows/runner/main.cpp b/provider_shopper/windows/runner/main.cpp index 3733f6e0b..ec36daf39 100644 --- a/provider_shopper/windows/runner/main.cpp +++ b/provider_shopper/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"provider_shopper", origin, size)) { + if (!window.Create(L"provider_shopper", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/provider_shopper/windows/runner/runner.exe.manifest b/provider_shopper/windows/runner/runner.exe.manifest index c977c4a42..a42ea7687 100644 --- a/provider_shopper/windows/runner/runner.exe.manifest +++ b/provider_shopper/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/provider_shopper/windows/runner/utils.cpp b/provider_shopper/windows/runner/utils.cpp index d19bdbbcc..f5bf9fa0f 100644 --- a/provider_shopper/windows/runner/utils.cpp +++ b/provider_shopper/windows/runner/utils.cpp @@ -48,10 +48,10 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, nullptr, 0, nullptr, nullptr); - if (target_length == 0) { - return std::string(); - } std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, diff --git a/provider_shopper/windows/runner/win32_window.cpp b/provider_shopper/windows/runner/win32_window.cpp index c10f08dc7..041a38554 100644 --- a/provider_shopper/windows/runner/win32_window.cpp +++ b/provider_shopper/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/provider_shopper/windows/runner/win32_window.h b/provider_shopper/windows/runner/win32_window.h index 17ba43112..c86632d8a 100644 --- a/provider_shopper/windows/runner/win32_window.h +++ b/provider_shopper/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/simplistic_calculator/pubspec.yaml b/simplistic_calculator/pubspec.yaml index 8d4963f8b..9230b4ad8 100644 --- a/simplistic_calculator/pubspec.yaml +++ b/simplistic_calculator/pubspec.yaml @@ -9,12 +9,12 @@ environment: dependencies: auto_size_text: ^3.0.0 cupertino_icons: ^1.0.2 - fluent_ui: ^3.11.1 + fluent_ui: ^4.0.0 fluentui_system_icons: ^1.1.168 flutter: sdk: flutter flutter_layout_grid: ^2.0.1 - flutter_riverpod: ^1.0.3 + flutter_riverpod: ^2.0.2 math_expressions: ^2.3.0 window_size: git: diff --git a/simplistic_calculator/typer/main_01.dart b/simplistic_calculator/typer/main_01.dart deleted file mode 100644 index fff109107..000000000 --- a/simplistic_calculator/typer/main_01.dart +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2022 The Flutter team. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -void main() { - runApp( - const CalculatorApp(), - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_02.dart b/simplistic_calculator/typer/main_02.dart deleted file mode 100644 index fde62b05b..000000000 --- a/simplistic_calculator/typer/main_02.dart +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - runApp( - const CalculatorApp(), - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_03.dart b/simplistic_calculator/typer/main_03.dart deleted file mode 100644 index baec2b123..000000000 --- a/simplistic_calculator/typer/main_03.dart +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const CalculatorApp(), - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_04.dart b/simplistic_calculator/typer/main_04.dart deleted file mode 100644 index 22169ea79..000000000 --- a/simplistic_calculator/typer/main_04.dart +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const CalculatorApp(), - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_05.dart b/simplistic_calculator/typer/main_05.dart deleted file mode 100644 index 3b51f76dc..000000000 --- a/simplistic_calculator/typer/main_05.dart +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_06.dart b/simplistic_calculator/typer/main_06.dart deleted file mode 100644 index bab6c706c..000000000 --- a/simplistic_calculator/typer/main_06.dart +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState {} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_07.dart b/simplistic_calculator/typer/main_07.dart deleted file mode 100644 index 8dd5e2739..000000000 --- a/simplistic_calculator/typer/main_07.dart +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - final String buffer; -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_08.dart b/simplistic_calculator/typer/main_08.dart deleted file mode 100644 index b093a70eb..000000000 --- a/simplistic_calculator/typer/main_08.dart +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - final String buffer; - final String error; -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_09.dart b/simplistic_calculator/typer/main_09.dart deleted file mode 100644 index 2eed048b7..000000000 --- a/simplistic_calculator/typer/main_09.dart +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - this.buffer, - this.error, - }); - - final String buffer; - final String error; -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_10.dart b/simplistic_calculator/typer/main_10.dart deleted file mode 100644 index a4d19e396..000000000 --- a/simplistic_calculator/typer/main_10.dart +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_11.dart b/simplistic_calculator/typer/main_11.dart deleted file mode 100644 index 051d1ab5f..000000000 --- a/simplistic_calculator/typer/main_11.dart +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_12.dart b/simplistic_calculator/typer/main_12.dart deleted file mode 100644 index 22ee384fc..000000000 --- a/simplistic_calculator/typer/main_12.dart +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier {} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_13.dart b/simplistic_calculator/typer/main_13.dart deleted file mode 100644 index 99eef9eb3..000000000 --- a/simplistic_calculator/typer/main_13.dart +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine(CalculatorState state) : super(state); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_14.dart b/simplistic_calculator/typer/main_14.dart deleted file mode 100644 index 436d11b1e..000000000 --- a/simplistic_calculator/typer/main_14.dart +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_15.dart b/simplistic_calculator/typer/main_15.dart deleted file mode 100644 index fe1304381..000000000 --- a/simplistic_calculator/typer/main_15.dart +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) {} -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_16.dart b/simplistic_calculator/typer/main_16.dart deleted file mode 100644 index 29a1b8b03..000000000 --- a/simplistic_calculator/typer/main_16.dart +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_17.dart b/simplistic_calculator/typer/main_17.dart deleted file mode 100644 index 20fda7036..000000000 --- a/simplistic_calculator/typer/main_17.dart +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends StatelessWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_18.dart b/simplistic_calculator/typer/main_18.dart deleted file mode 100644 index d4a93f7ba..000000000 --- a/simplistic_calculator/typer/main_18.dart +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_19.dart b/simplistic_calculator/typer/main_19.dart deleted file mode 100644 index 543a11054..000000000 --- a/simplistic_calculator/typer/main_19.dart +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_20.dart b/simplistic_calculator/typer/main_20.dart deleted file mode 100644 index 02340e6a5..000000000 --- a/simplistic_calculator/typer/main_20.dart +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - 'Hello GDSC!', - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_21.dart b/simplistic_calculator/typer/main_21.dart deleted file mode 100644 index bfaa5502a..000000000 --- a/simplistic_calculator/typer/main_21.dart +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: const Center( - child: Text( - state.buffer, - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_22.dart b/simplistic_calculator/typer/main_22.dart deleted file mode 100644 index bcd11f443..000000000 --- a/simplistic_calculator/typer/main_22.dart +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: Center( - child: Text( - state.buffer, - style: TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_23.dart b/simplistic_calculator/typer/main_23.dart deleted file mode 100644 index f16360538..000000000 --- a/simplistic_calculator/typer/main_23.dart +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: Center( - child: Text( - state.buffer, - style: const TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_24.dart b/simplistic_calculator/typer/main_24.dart deleted file mode 100644 index fa539f1af..000000000 --- a/simplistic_calculator/typer/main_24.dart +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: Center( - child: Text( - state.buffer, - style: const TextStyle(fontSize: 40), - ), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_25.dart b/simplistic_calculator/typer/main_25.dart deleted file mode 100644 index 86c77c3f1..000000000 --- a/simplistic_calculator/typer/main_25.dart +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - children: [ - Text( - state.buffer, - style: const TextStyle(fontSize: 40), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_26.dart b/simplistic_calculator/typer/main_26.dart deleted file mode 100644 index 6eb6fe206..000000000 --- a/simplistic_calculator/typer/main_26.dart +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - columnSizes: [1.fr], - rowSizes: [1.fr], - children: [ - Text( - state.buffer, - style: const TextStyle(fontSize: 40), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_27.dart b/simplistic_calculator/typer/main_27.dart deleted file mode 100644 index 8cef3a277..000000000 --- a/simplistic_calculator/typer/main_27.dart +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - Text( - state.buffer, - style: const TextStyle(fontSize: 40), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_28.dart b/simplistic_calculator/typer/main_28.dart deleted file mode 100644 index 184dab6ea..000000000 --- a/simplistic_calculator/typer/main_28.dart +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: Text( - state.buffer, - style: const TextStyle(fontSize: 40), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_29.dart b/simplistic_calculator/typer/main_29.dart deleted file mode 100644 index f6cd577f7..000000000 --- a/simplistic_calculator/typer/main_29.dart +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 40), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_30.dart b/simplistic_calculator/typer/main_30.dart deleted file mode 100644 index c13a0007f..000000000 --- a/simplistic_calculator/typer/main_30.dart +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 40), - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_31.dart b/simplistic_calculator/typer/main_31.dart deleted file mode 100644 index 6d2facae1..000000000 --- a/simplistic_calculator/typer/main_31.dart +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 40), - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_32.dart b/simplistic_calculator/typer/main_32.dart deleted file mode 100644 index 07400f74d..000000000 --- a/simplistic_calculator/typer/main_32.dart +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_33.dart b/simplistic_calculator/typer/main_33.dart deleted file mode 100644 index 0a76af2ce..000000000 --- a/simplistic_calculator/typer/main_33.dart +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget {} diff --git a/simplistic_calculator/typer/main_34.dart b/simplistic_calculator/typer/main_34.dart deleted file mode 100644 index 1a4a59e3d..000000000 --- a/simplistic_calculator/typer/main_34.dart +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - @override - Widget build(BuildContext context, WidgetRef ref) { - // TODO: implement build - throw UnimplementedError(); - } -} diff --git a/simplistic_calculator/typer/main_35.dart b/simplistic_calculator/typer/main_35.dart deleted file mode 100644 index 8691ffc00..000000000 --- a/simplistic_calculator/typer/main_35.dart +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton(); - } -} diff --git a/simplistic_calculator/typer/main_36.dart b/simplistic_calculator/typer/main_36.dart deleted file mode 100644 index 4d25b1a13..000000000 --- a/simplistic_calculator/typer/main_36.dart +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - child: null, - ); - } -} diff --git a/simplistic_calculator/typer/main_37.dart b/simplistic_calculator/typer/main_37.dart deleted file mode 100644 index cb8a5d60c..000000000 --- a/simplistic_calculator/typer/main_37.dart +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: null, - ); - } -} diff --git a/simplistic_calculator/typer/main_38.dart b/simplistic_calculator/typer/main_38.dart deleted file mode 100644 index be7a56bcb..000000000 --- a/simplistic_calculator/typer/main_38.dart +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: Text(), - ); - } -} diff --git a/simplistic_calculator/typer/main_39.dart b/simplistic_calculator/typer/main_39.dart deleted file mode 100644 index 6781ecb95..000000000 --- a/simplistic_calculator/typer/main_39.dart +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: Text(), - ); - } -} diff --git a/simplistic_calculator/typer/main_40.dart b/simplistic_calculator/typer/main_40.dart deleted file mode 100644 index 81481339c..000000000 --- a/simplistic_calculator/typer/main_40.dart +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_41.dart b/simplistic_calculator/typer/main_41.dart deleted file mode 100644 index 99d26bfa5..000000000 --- a/simplistic_calculator/typer/main_41.dart +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.label, - }) : super(key: key); - - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_42.dart b/simplistic_calculator/typer/main_42.dart deleted file mode 100644 index 25345c8e6..000000000 --- a/simplistic_calculator/typer/main_42.dart +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.label, - }) : super(key: key); - - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_43.dart b/simplistic_calculator/typer/main_43.dart deleted file mode 100644 index 9657008ad..000000000 --- a/simplistic_calculator/typer/main_43.dart +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () {}, - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_44.dart b/simplistic_calculator/typer/main_44.dart deleted file mode 100644 index cb3864359..000000000 --- a/simplistic_calculator/typer/main_44.dart +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_45.dart b/simplistic_calculator/typer/main_45.dart deleted file mode 100644 index 2ba090a28..000000000 --- a/simplistic_calculator/typer/main_45.dart +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition {} - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_46.dart b/simplistic_calculator/typer/main_46.dart deleted file mode 100644 index 738e694a2..000000000 --- a/simplistic_calculator/typer/main_46.dart +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_47.dart b/simplistic_calculator/typer/main_47.dart deleted file mode 100644 index 48c063782..000000000 --- a/simplistic_calculator/typer/main_47.dart +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_48.dart b/simplistic_calculator/typer/main_48.dart deleted file mode 100644 index 7a81ccd09..000000000 --- a/simplistic_calculator/typer/main_48.dart +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = []; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_49.dart b/simplistic_calculator/typer/main_49.dart deleted file mode 100644 index 057e2efc8..000000000 --- a/simplistic_calculator/typer/main_49.dart +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_50.dart b/simplistic_calculator/typer/main_50.dart deleted file mode 100644 index 17a6d072e..000000000 --- a/simplistic_calculator/typer/main_50.dart +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_51.dart b/simplistic_calculator/typer/main_51.dart deleted file mode 100644 index 73ba9625d..000000000 --- a/simplistic_calculator/typer/main_51.dart +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_52.dart b/simplistic_calculator/typer/main_52.dart deleted file mode 100644 index 03b3b6bc0..000000000 --- a/simplistic_calculator/typer/main_52.dart +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_53.dart b/simplistic_calculator/typer/main_53.dart deleted file mode 100644 index a7e89aef2..000000000 --- a/simplistic_calculator/typer/main_53.dart +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_54.dart b/simplistic_calculator/typer/main_54.dart deleted file mode 100644 index 19986ba8a..000000000 --- a/simplistic_calculator/typer/main_54.dart +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_55.dart b/simplistic_calculator/typer/main_55.dart deleted file mode 100644 index 71615663a..000000000 --- a/simplistic_calculator/typer/main_55.dart +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_56.dart b/simplistic_calculator/typer/main_56.dart deleted file mode 100644 index b53af6855..000000000 --- a/simplistic_calculator/typer/main_56.dart +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_57.dart b/simplistic_calculator/typer/main_57.dart deleted file mode 100644 index d8cf69196..000000000 --- a/simplistic_calculator/typer/main_57.dart +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_58.dart b/simplistic_calculator/typer/main_58.dart deleted file mode 100644 index e9292f58d..000000000 --- a/simplistic_calculator/typer/main_58.dart +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_59.dart b/simplistic_calculator/typer/main_59.dart deleted file mode 100644 index 560936de4..000000000 --- a/simplistic_calculator/typer/main_59.dart +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_60.dart b/simplistic_calculator/typer/main_60.dart deleted file mode 100644 index b78278083..000000000 --- a/simplistic_calculator/typer/main_60.dart +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_61.dart b/simplistic_calculator/typer/main_61.dart deleted file mode 100644 index 8faa17d78..000000000 --- a/simplistic_calculator/typer/main_61.dart +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ); - } -} diff --git a/simplistic_calculator/typer/main_62.dart b/simplistic_calculator/typer/main_62.dart deleted file mode 100644 index 0331cec5b..000000000 --- a/simplistic_calculator/typer/main_62.dart +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox( - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_63.dart b/simplistic_calculator/typer/main_63.dart deleted file mode 100644 index b2329800f..000000000 --- a/simplistic_calculator/typer/main_63.dart +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox.expand( - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_64.dart b/simplistic_calculator/typer/main_64.dart deleted file mode 100644 index e7ac179b8..000000000 --- a/simplistic_calculator/typer/main_64.dart +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text(label), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_65.dart b/simplistic_calculator/typer/main_65.dart deleted file mode 100644 index c016cfb6e..000000000 --- a/simplistic_calculator/typer/main_65.dart +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_66.dart b/simplistic_calculator/typer/main_66.dart deleted file mode 100644 index 7d5a850af..000000000 --- a/simplistic_calculator/typer/main_66.dart +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_67.dart b/simplistic_calculator/typer/main_67.dart deleted file mode 100644 index 51816ea8a..000000000 --- a/simplistic_calculator/typer/main_67.dart +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_68.dart b/simplistic_calculator/typer/main_68.dart deleted file mode 100644 index 32081d148..000000000 --- a/simplistic_calculator/typer/main_68.dart +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_69.dart b/simplistic_calculator/typer/main_69.dart deleted file mode 100644 index a544355d0..000000000 --- a/simplistic_calculator/typer/main_69.dart +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: OutlinedButton( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_70.dart b/simplistic_calculator/typer/main_70.dart deleted file mode 100644 index 56417fe3a..000000000 --- a/simplistic_calculator/typer/main_70.dart +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_71.dart b/simplistic_calculator/typer/main_71.dart deleted file mode 100644 index 82ee08275..000000000 --- a/simplistic_calculator/typer/main_71.dart +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_72.dart b/simplistic_calculator/typer/main_72.dart deleted file mode 100644 index efbefcd6a..000000000 --- a/simplistic_calculator/typer/main_72.dart +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_73.dart b/simplistic_calculator/typer/main_73.dart deleted file mode 100644 index 6b4ff5218..000000000 --- a/simplistic_calculator/typer/main_73.dart +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_74.dart b/simplistic_calculator/typer/main_74.dart deleted file mode 100644 index 60ef01f00..000000000 --- a/simplistic_calculator/typer/main_74.dart +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_75.dart b/simplistic_calculator/typer/main_75.dart deleted file mode 100644 index 24a8e744e..000000000 --- a/simplistic_calculator/typer/main_75.dart +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_76.dart b/simplistic_calculator/typer/main_76.dart deleted file mode 100644 index c54c641cd..000000000 --- a/simplistic_calculator/typer/main_76.dart +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_77.dart b/simplistic_calculator/typer/main_77.dart deleted file mode 100644 index 7fe7bcf43..000000000 --- a/simplistic_calculator/typer/main_77.dart +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_78.dart b/simplistic_calculator/typer/main_78.dart deleted file mode 100644 index 12282200d..000000000 --- a/simplistic_calculator/typer/main_78.dart +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_79.dart b/simplistic_calculator/typer/main_79.dart deleted file mode 100644 index 9c4c7a64f..000000000 --- a/simplistic_calculator/typer/main_79.dart +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_80.dart b/simplistic_calculator/typer/main_80.dart deleted file mode 100644 index 2b8524e24..000000000 --- a/simplistic_calculator/typer/main_80.dart +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_81.dart b/simplistic_calculator/typer/main_81.dart deleted file mode 100644 index d9f5ac0d3..000000000 --- a/simplistic_calculator/typer/main_81.dart +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display - seven eight nine - four five six - one two three - zero point equals - ''', - columnSizes: [1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_82.dart b/simplistic_calculator/typer/main_82.dart deleted file mode 100644 index b6bb21537..000000000 --- a/simplistic_calculator/typer/main_82.dart +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_83.dart b/simplistic_calculator/typer/main_83.dart deleted file mode 100644 index 8f16d34a7..000000000 --- a/simplistic_calculator/typer/main_83.dart +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_84.dart b/simplistic_calculator/typer/main_84.dart deleted file mode 100644 index 860489dbd..000000000 --- a/simplistic_calculator/typer/main_84.dart +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_85.dart b/simplistic_calculator/typer/main_85.dart deleted file mode 100644 index 16fa9bb1e..000000000 --- a/simplistic_calculator/typer/main_85.dart +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_86.dart b/simplistic_calculator/typer/main_86.dart deleted file mode 100644 index c6ea1f4b1..000000000 --- a/simplistic_calculator/typer/main_86.dart +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_87.dart b/simplistic_calculator/typer/main_87.dart deleted file mode 100644 index ab7e9a08b..000000000 --- a/simplistic_calculator/typer/main_87.dart +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_88.dart b/simplistic_calculator/typer/main_88.dart deleted file mode 100644 index 49828dfe2..000000000 --- a/simplistic_calculator/typer/main_88.dart +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() {} -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_89.dart b/simplistic_calculator/typer/main_89.dart deleted file mode 100644 index 9beed7e72..000000000 --- a/simplistic_calculator/typer/main_89.dart +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() { - try {} catch (err) { - state = state.copyWith( - error: err.toString(), - buffer: '', - mode: CalculatorEngineMode.result, - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_90.dart b/simplistic_calculator/typer/main_90.dart deleted file mode 100644 index 6863c6ce1..000000000 --- a/simplistic_calculator/typer/main_90.dart +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() { - try { - final parser = Parser(); - final cm = ContextModel(); - final exp = parser.parse(state.buffer); - final result = exp.evaluate(EvaluationType.REAL, cm) as double; - } catch (err) { - state = state.copyWith( - error: err.toString(), - buffer: '', - mode: CalculatorEngineMode.result, - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_91.dart b/simplistic_calculator/typer/main_91.dart deleted file mode 100644 index 27e6e2a31..000000000 --- a/simplistic_calculator/typer/main_91.dart +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() { - try { - final parser = Parser(); - final cm = ContextModel(); - final exp = parser.parse(state.buffer); - final result = exp.evaluate(EvaluationType.REAL, cm) as double; - - if (result.isInfinite) { - state = state.copyWith( - error: 'Result is Infinite', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else if (result.isNaN) { - state = state.copyWith( - error: 'Result is Not a Number', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } catch (err) { - state = state.copyWith( - error: err.toString(), - buffer: '', - mode: CalculatorEngineMode.result, - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_92.dart b/simplistic_calculator/typer/main_92.dart deleted file mode 100644 index dbd6e6f49..000000000 --- a/simplistic_calculator/typer/main_92.dart +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() { - try { - final parser = Parser(); - final cm = ContextModel(); - final exp = parser.parse(state.buffer); - final result = exp.evaluate(EvaluationType.REAL, cm) as double; - - if (result.isInfinite) { - state = state.copyWith( - error: 'Result is Infinite', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else if (result.isNaN) { - state = state.copyWith( - error: 'Result is Not a Number', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else { - final resultStr = result.ceil() == result - ? result.toInt().toString() - : result.toString(); - state = state.copyWith( - buffer: resultStr, - mode: CalculatorEngineMode.result, - ); - } - } catch (err) { - state = state.copyWith( - error: err.toString(), - buffer: '', - mode: CalculatorEngineMode.result, - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) {}, - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_93.dart b/simplistic_calculator/typer/main_93.dart deleted file mode 100644 index 4790a7dbe..000000000 --- a/simplistic_calculator/typer/main_93.dart +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() { - try { - final parser = Parser(); - final cm = ContextModel(); - final exp = parser.parse(state.buffer); - final result = exp.evaluate(EvaluationType.REAL, cm) as double; - - if (result.isInfinite) { - state = state.copyWith( - error: 'Result is Infinite', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else if (result.isNaN) { - state = state.copyWith( - error: 'Result is Not a Number', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else { - final resultStr = result.ceil() == result - ? result.toInt().toString() - : result.toString(); - state = state.copyWith( - buffer: resultStr, - mode: CalculatorEngineMode.result, - ); - } - } catch (err) { - state = state.copyWith( - error: err.toString(), - buffer: '', - mode: CalculatorEngineMode.result, - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) => engine.evaluate(), - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - Key? key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/main_94.dart b/simplistic_calculator/typer/main_94.dart deleted file mode 100644 index 37998b854..000000000 --- a/simplistic_calculator/typer/main_94.dart +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright 2022 The Flutter team. 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:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_layout_grid/flutter_layout_grid.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:math_expressions/math_expressions.dart'; -import 'package:window_size/window_size.dart'; - -void main() { - if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) { - WidgetsFlutterBinding.ensureInitialized(); - setWindowTitle('Simplistic Calculator'); - } - - runApp( - const ProviderScope( - child: CalculatorApp(), - ), - ); -} - -@immutable -class CalculatorState { - const CalculatorState({ - required this.buffer, - required this.mode, - required this.error, - }); - - final String buffer; - final CalculatorEngineMode mode; - final String error; - - CalculatorState copyWith({ - String? buffer, - CalculatorEngineMode? mode, - String? error, - }) => - CalculatorState( - buffer: buffer ?? this.buffer, - mode: mode ?? this.mode, - error: error ?? this.error, - ); -} - -enum CalculatorEngineMode { input, result } - -class CalculatorEngine extends StateNotifier { - CalculatorEngine() - : super( - const CalculatorState( - buffer: '0', - mode: CalculatorEngineMode.result, - error: '', - ), - ); - - void addToBuffer(String str) { - if (state.mode == CalculatorEngineMode.result) { - state = state.copyWith( - buffer: str, - mode: CalculatorEngineMode.input, - error: '', - ); - } else { - state = state.copyWith( - buffer: state.buffer + str, - error: '', - ); - } - } - - void evaluate() { - try { - final parser = Parser(); - final cm = ContextModel(); - final exp = parser.parse(state.buffer); - final result = exp.evaluate(EvaluationType.REAL, cm) as double; - - if (result.isInfinite) { - state = state.copyWith( - error: 'Result is Infinite', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else if (result.isNaN) { - state = state.copyWith( - error: 'Result is Not a Number', - buffer: '', - mode: CalculatorEngineMode.result, - ); - } else { - final resultStr = result.ceil() == result - ? result.toInt().toString() - : result.toString(); - state = state.copyWith( - buffer: resultStr, - mode: CalculatorEngineMode.result, - ); - } - } catch (err) { - state = state.copyWith( - error: err.toString(), - buffer: '', - mode: CalculatorEngineMode.result, - ); - } - } -} - -final calculatorStateProvider = - StateNotifierProvider( - (_) => CalculatorEngine()); - -class ButtonDefinition { - const ButtonDefinition({ - required this.areaName, - required this.label, - required this.op, - this.type = CalcButtonType.outlined, - }); - - final String areaName; - final String label; - final CalculatorEngineCallback op; - final CalcButtonType type; -} - -final buttonDefinitions = [ - ButtonDefinition( - areaName: 'seven', - op: (engine) => engine.addToBuffer('7'), - label: '7', - ), - ButtonDefinition( - areaName: 'eight', - op: (engine) => engine.addToBuffer('8'), - label: '8', - ), - ButtonDefinition( - areaName: 'nine', - op: (engine) => engine.addToBuffer('9'), - label: '9', - ), - ButtonDefinition( - areaName: 'four', - op: (engine) => engine.addToBuffer('4'), - label: '4', - ), - ButtonDefinition( - areaName: 'five', - op: (engine) => engine.addToBuffer('5'), - label: '5', - ), - ButtonDefinition( - areaName: 'six', - op: (engine) => engine.addToBuffer('6'), - label: '6', - ), - ButtonDefinition( - areaName: 'one', - op: (engine) => engine.addToBuffer('1'), - label: '1', - ), - ButtonDefinition( - areaName: 'two', - op: (engine) => engine.addToBuffer('2'), - label: '2', - ), - ButtonDefinition( - areaName: 'three', - op: (engine) => engine.addToBuffer('3'), - label: '3', - ), - ButtonDefinition( - areaName: 'zero', - op: (engine) => engine.addToBuffer('0'), - label: '0', - ), - ButtonDefinition( - areaName: 'point', - op: (engine) => engine.addToBuffer('.'), - label: '.', - ), - ButtonDefinition( - areaName: 'equals', - op: (engine) => engine.evaluate(), - label: '=', - type: CalcButtonType.elevated, - ), - ButtonDefinition( - areaName: 'plus', - op: (engine) => engine.addToBuffer('+'), - label: '+', - ), - ButtonDefinition( - areaName: 'minus', - op: (engine) => engine.addToBuffer('-'), - label: '-', - ), - ButtonDefinition( - areaName: 'multiply', - op: (engine) => engine.addToBuffer('*'), - label: '*', - ), - ButtonDefinition( - areaName: 'divide', - op: (engine) => engine.addToBuffer('/'), - label: '/', - ), -]; - -class CalculatorApp extends ConsumerWidget { - const CalculatorApp({super.key}); - - @override - Widget build(BuildContext context, WidgetRef ref) { - final state = ref.watch(calculatorStateProvider); - - return MaterialApp( - debugShowCheckedModeBanner: false, - home: Scaffold( - body: Container( - color: Colors.white, - child: LayoutGrid( - areas: ''' - display display display display - seven eight nine divide - four five six multiply - one two three minus - zero point equals plus - ''', - columnSizes: [1.fr, 1.fr, 1.fr, 1.fr], - rowSizes: [ - 1.fr, - 1.fr, - 1.fr, - 1.fr, - 1.fr, - ], - children: [ - NamedAreaGridPlacement( - areaName: 'display', - child: SizedBox.expand( - child: state.error.isEmpty - ? Text( - state.buffer, - textAlign: TextAlign.end, - style: const TextStyle(fontSize: 80), - ) - : Text( - state.error, - textAlign: TextAlign.start, - style: const TextStyle( - fontSize: 40, - color: Colors.red, - ), - maxLines: 2, - ), - ), - ), - ...buttonDefinitions.map( - (definition) => NamedAreaGridPlacement( - areaName: definition.areaName, - child: CalcButton( - label: definition.label, - op: definition.op, - type: definition.type, - ), - ), - ), - ], - ), - ), - ), - ); - } -} - -typedef CalculatorEngineCallback = void Function(CalculatorEngine engine); - -enum CalcButtonType { outlined, elevated } - -class CalcButton extends ConsumerWidget { - const CalcButton({ - super.key, - required this.op, - required this.label, - required this.type, - }) : super(key: key); - - final CalculatorEngineCallback op; - final String label; - final CalcButtonType type; - - @override - Widget build(BuildContext context, WidgetRef ref) { - final buttonConstructor = type == CalcButtonType.elevated - ? ElevatedButton.new - : OutlinedButton.new; - - return SizedBox.expand( - child: Padding( - padding: const EdgeInsets.all(8), - child: buttonConstructor( - onPressed: () => op(ref.read(calculatorStateProvider.notifier)), - child: Text( - label, - style: const TextStyle(fontSize: 40, color: Colors.black54), - ), - ), - ), - ); - } -} diff --git a/simplistic_calculator/typer/steps.json b/simplistic_calculator/typer/steps.json deleted file mode 100644 index 9fd2c2335..000000000 --- a/simplistic_calculator/typer/steps.json +++ /dev/null @@ -1,378 +0,0 @@ -[ - { - "file":"lib/main.dart", - "content":"typer/main_01.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_02.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_03.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_04.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_05.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_06.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_07.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_08.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_09.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_10.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_11.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_12.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_13.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_14.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_15.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_16.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_17.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_18.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_19.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_20.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_21.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_22.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_23.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_24.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_25.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_26.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_27.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_28.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_29.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_30.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_31.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_32.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_33.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_34.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_35.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_36.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_37.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_38.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_39.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_40.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_41.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_42.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_43.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_44.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_45.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_46.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_47.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_48.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_49.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_50.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_51.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_52.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_53.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_54.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_55.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_56.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_57.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_58.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_59.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_60.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_61.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_62.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_63.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_64.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_65.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_66.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_67.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_68.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_69.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_70.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_71.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_72.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_73.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_74.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_75.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_76.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_77.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_78.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_79.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_80.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_81.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_82.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_83.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_84.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_85.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_86.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_87.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_88.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_89.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_90.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_91.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_92.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_93.dart" - }, - { - "file":"lib/main.dart", - "content":"typer/main_94.dart" - } -] \ No newline at end of file diff --git a/simplistic_editor/lib/basic_text_field.dart b/simplistic_editor/lib/basic_text_field.dart index 12b32666e..a082e396a 100644 --- a/simplistic_editor/lib/basic_text_field.dart +++ b/simplistic_editor/lib/basic_text_field.dart @@ -104,8 +104,7 @@ class _BasicTextFieldState extends State { break; } - return FocusTrapArea( - focusNode: widget.focusNode, + return TextFieldTapRegion( child: GestureDetector( behavior: HitTestBehavior.translucent, onPanStart: (dragStartDetails) => _onDragStart(dragStartDetails), diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index ae601f82b..4e24c86d2 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -40,8 +40,7 @@ class BasicTextInputClient extends StatefulWidget { } class BasicTextInputClientState extends State - with TextSelectionDelegate - implements DeltaTextInputClient { + with TextSelectionDelegate, TextInputClient, DeltaTextInputClient { final GlobalKey _textKey = GlobalKey(); late AppStateWidgetState manager; final ClipboardStatusNotifier? _clipboardStatus = @@ -66,6 +65,15 @@ class BasicTextInputClientState extends State super.dispose(); } + @override + void didChangeInputControl( + TextInputControl? oldControl, TextInputControl? newControl) { + if (_hasFocus && _hasInputConnection) { + oldControl?.hide(); + newControl?.show(); + } + } + /// [DeltaTextInputClient] method implementations. @override void connectionClosed() { @@ -100,6 +108,11 @@ class BasicTextInputClientState extends State // Will not implement. } + @override + void performSelector(String selectorName) { + // Will not implement. + } + @override void removeTextPlaceholder() { // Will not implement. This method is used for Scribble support. @@ -299,7 +312,7 @@ class BasicTextInputClientState extends State TextSelection get _selection => _value.selection; late final Map> _actions = >{ DeleteCharacterIntent: CallbackAction( - onInvoke: (intent) => _delete(), + onInvoke: (intent) => _delete(intent.forward), ), ExtendSelectionByCharacterIntent: CallbackAction( @@ -315,22 +328,35 @@ class BasicTextInputClientState extends State PasteTextIntent: CallbackAction( onInvoke: (intent) => pasteText(intent.cause), ), + DoNothingAndStopPropagationTextIntent: DoNothingAction( + consumesKey: false, + ), }; - void _delete() { + void _delete(bool forward) { if (_value.text.isEmpty) return; late final TextRange deletedRange; late final TextRange newComposing; - final int deletedLength = - _value.text.substring(0, _selection.baseOffset).characters.last.length; + late final String deletedText; + final int offset = _selection.baseOffset; if (_selection.isCollapsed) { - if (_selection.baseOffset == 0) return; - deletedRange = TextRange( - start: _selection.baseOffset - deletedLength, - end: _selection.baseOffset, - ); + if (forward) { + if (_selection.baseOffset == _value.text.length) return; + deletedText = _value.text.substring(offset).characters.first; + deletedRange = TextRange( + start: offset, + end: offset + deletedText.length, + ); + } else { + if (_selection.baseOffset == 0) return; + deletedText = _value.text.substring(0, offset).characters.last; + deletedRange = TextRange( + start: offset - deletedText.length, + end: offset, + ); + } } else { deletedRange = _selection; } @@ -672,6 +698,7 @@ class BasicTextInputClientState extends State onSelectionHandleTapped: () { _toggleToolbar(); }, + magnifierConfiguration: TextMagnifierConfiguration.disabled, ); } else { _selectionOverlay!.update(_value); @@ -744,7 +771,8 @@ class BasicTextInputClientState extends State textAlign: TextAlign.left, textDirection: _textDirection, locale: Localizations.maybeLocaleOf(context), - textHeightBehavior: DefaultTextHeightBehavior.of(context), + textHeightBehavior: + DefaultTextHeightBehavior.maybeOf(context), textWidthBasis: TextWidthBasis.parent, obscuringCharacter: '•', obscureText: diff --git a/testing_app/lib/main.dart b/testing_app/lib/main.dart index c00cef8f8..c30ea7927 100644 --- a/testing_app/lib/main.dart +++ b/testing_app/lib/main.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/favorites.dart'; @@ -12,6 +13,23 @@ void main() { runApp(const TestingApp()); } +GoRouter router() { + return GoRouter( + routes: [ + GoRoute( + path: HomePage.routeName, + builder: (context, state) => const HomePage(), + routes: [ + GoRoute( + path: FavoritesPage.routeName, + builder: (context, state) => const FavoritesPage(), + ), + ], + ), + ], + ); +} + class TestingApp extends StatelessWidget { const TestingApp({super.key}); @@ -19,17 +37,13 @@ class TestingApp extends StatelessWidget { Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => Favorites(), - child: MaterialApp( + child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), - routes: { - HomePage.routeName: (context) => const HomePage(), - FavoritesPage.routeName: (context) => const FavoritesPage(), - }, - initialRoute: HomePage.routeName, + routerConfig: router(), ), ); } diff --git a/testing_app/lib/screens/favorites.dart b/testing_app/lib/screens/favorites.dart index a245a4b38..83c1a7751 100644 --- a/testing_app/lib/screens/favorites.dart +++ b/testing_app/lib/screens/favorites.dart @@ -7,7 +7,8 @@ import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; class FavoritesPage extends StatelessWidget { - static const routeName = '/favorites_page'; + static const routeName = 'favorites_page'; + static const fullPath = '/$routeName'; const FavoritesPage({super.key}); diff --git a/testing_app/lib/screens/home.dart b/testing_app/lib/screens/home.dart index 0ff150e97..949f55901 100644 --- a/testing_app/lib/screens/home.dart +++ b/testing_app/lib/screens/home.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:testing_app/models/favorites.dart'; import 'package:testing_app/screens/favorites.dart'; @@ -21,7 +22,7 @@ class HomePage extends StatelessWidget { TextButton.icon( style: TextButton.styleFrom(foregroundColor: Colors.white), onPressed: () { - Navigator.pushNamed(context, FavoritesPage.routeName); + context.go(FavoritesPage.fullPath); }, icon: const Icon(Icons.favorite_border), label: const Text('Favorites'), diff --git a/testing_app/pubspec.yaml b/testing_app/pubspec.yaml index e9ad16357..d63dcce09 100644 --- a/testing_app/pubspec.yaml +++ b/testing_app/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: cupertino_icons: ^1.0.3 provider: ^6.0.2 + go_router: ^6.0.0 dev_dependencies: integration_test: diff --git a/testing_app/test/home_test.dart b/testing_app/test/home_test.dart index 1808cc126..cd06114fb 100644 --- a/testing_app/test/home_test.dart +++ b/testing_app/test/home_test.dart @@ -5,13 +5,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; +import 'package:testing_app/main.dart'; import 'package:testing_app/models/favorites.dart'; -import 'package:testing_app/screens/home.dart'; Widget createHomeScreen() => ChangeNotifierProvider( create: (context) => Favorites(), - child: const MaterialApp( - home: HomePage(), + child: MaterialApp.router( + routerConfig: router(), ), ); @@ -65,5 +65,16 @@ void main() { // Check if the filled icon changes back to bordered icon. expect(find.byIcon(Icons.favorite), findsNothing); }); + + testWidgets('Testing Navigation', (tester) async { + await tester.pumpWidget(createHomeScreen()); + + // Tap the Favorites button in the app bar + await tester.tap(find.text('Favorites')); + await tester.pumpAndSettle(); + + // Verify if the empty favorites screen is shown. + expect(find.text('No favorites added.'), findsOneWidget); + }); }); } diff --git a/tool/flutter_ci_script_beta.sh b/tool/flutter_ci_script_beta.sh index ec569675e..d126c7fe3 100755 --- a/tool/flutter_ci_script_beta.sh +++ b/tool/flutter_ci_script_beta.sh @@ -8,6 +8,7 @@ source "$DIR/flutter_ci_script_shared.sh" flutter doctor -v declare -ar PROJECT_NAMES=( + "add_to_app/android_view/flutter_module_using_plugin" "add_to_app/books/flutter_module_books" "add_to_app/fullscreen/flutter_module" "add_to_app/multiple_flutters/multiple_flutters_module" @@ -15,11 +16,24 @@ declare -ar PROJECT_NAMES=( "add_to_app/prebuilt_module/flutter_module" "android_splash_screen" "animations" + "background_isolate_channels" + "code_sharing/client" + "code_sharing/server" + "code_sharing/shared" "desktop_photo_search/fluent_ui" "desktop_photo_search/material" + "experimental/context_menus" "experimental/federated_plugin/federated_plugin" - "experimental/web_dashboard" + "experimental/federated_plugin/federated_plugin/example" + "experimental/federated_plugin/federated_plugin_macos" + "experimental/federated_plugin/federated_plugin_platform_interface" + "experimental/federated_plugin/federated_plugin_web" + "experimental/federated_plugin/federated_plugin_windows" "experimental/linting_tool" + "experimental/material_3_demo" + "experimental/pedometer" + "experimental/varfont_shader_puzzle" + "experimental/web_dashboard" "flutter_maps_firestore" "form_app" "game_template" @@ -29,17 +43,18 @@ declare -ar PROJECT_NAMES=( "jsonexample" "material_3_demo" "navigation_and_routing" - "null_safety/null_safe_app" - "null_safety/null_unsafe_app" "place_tracker" "platform_channels" "platform_design" "platform_view_swift" "provider_counter" "provider_shopper" + "simplistic_calculator" "simplistic_editor" "testing_app" "veggieseasons" + "web/_tool" + "web/samples_index" ) ci_projects "beta" "${PROJECT_NAMES[@]}" diff --git a/tool/flutter_ci_script_master.sh b/tool/flutter_ci_script_master.sh index f03d83a09..501ad44ee 100755 --- a/tool/flutter_ci_script_master.sh +++ b/tool/flutter_ci_script_master.sh @@ -8,6 +8,7 @@ source "$DIR/flutter_ci_script_shared.sh" flutter doctor -v declare -ar PROJECT_NAMES=( + "add_to_app/android_view/flutter_module_using_plugin" "add_to_app/books/flutter_module_books" "add_to_app/fullscreen/flutter_module" "add_to_app/multiple_flutters/multiple_flutters_module" @@ -15,35 +16,50 @@ declare -ar PROJECT_NAMES=( "add_to_app/prebuilt_module/flutter_module" "android_splash_screen" "animations" + "background_isolate_channels" + # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. + # "code_sharing/client" + "code_sharing/server" + "code_sharing/shared" "desktop_photo_search/fluent_ui" "desktop_photo_search/material" + "experimental/context_menus" + "experimental/element_embedding_demo" "experimental/federated_plugin/federated_plugin" + "experimental/federated_plugin/federated_plugin/example" + "experimental/federated_plugin/federated_plugin_macos" + "experimental/federated_plugin/federated_plugin_platform_interface" + "experimental/federated_plugin/federated_plugin_web" + "experimental/federated_plugin/federated_plugin_windows" + "experimental/linting_tool" + # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. + # "experimental/material_3_demo" + "experimental/pedometer" + "experimental/varfont_shader_puzzle" "experimental/web_dashboard" - # TODO(domesticmouse): Needs a reformat to work on master - # "experimental/linting_tool" - "experimental/material_3_demo" "flutter_maps_firestore" - # TODO(domesticmouse): 'errorColor' is deprecated and shouldn't be used. - # "form_app" + "form_app" "game_template" "infinite_list" "ios_app_clip" "isolate_example" "jsonexample" - "material_3_demo" + # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. + # "material_3_demo" "navigation_and_routing" - "null_safety/null_safe_app" - "null_safety/null_unsafe_app" - "place_tracker" + # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. + # "place_tracker" "platform_channels" "platform_design" "platform_view_swift" "provider_counter" "provider_shopper" - # TODO(domesticmouse): Missing concrete implementation of 'TextInputClient.performSelector' - # "simplistic_editor" + "simplistic_calculator" + "simplistic_editor" "testing_app" "veggieseasons" + "web/_tool" + "web/samples_index" ) ci_projects "master" "${PROJECT_NAMES[@]}" diff --git a/tool/flutter_ci_script_stable.sh b/tool/flutter_ci_script_stable.sh index 40ecf362f..561835b79 100755 --- a/tool/flutter_ci_script_stable.sh +++ b/tool/flutter_ci_script_stable.sh @@ -8,6 +8,7 @@ source "$DIR/flutter_ci_script_shared.sh" flutter doctor -v declare -ar PROJECT_NAMES=( + "add_to_app/android_view/flutter_module_using_plugin" "add_to_app/books/flutter_module_books" "add_to_app/fullscreen/flutter_module" "add_to_app/multiple_flutters/multiple_flutters_module" @@ -15,11 +16,24 @@ declare -ar PROJECT_NAMES=( "add_to_app/prebuilt_module/flutter_module" "android_splash_screen" "animations" + "background_isolate_channels" + "code_sharing/client" + "code_sharing/server" + "code_sharing/shared" "desktop_photo_search/fluent_ui" "desktop_photo_search/material" + "experimental/context_menus" "experimental/federated_plugin/federated_plugin" - "experimental/web_dashboard" + "experimental/federated_plugin/federated_plugin/example" + "experimental/federated_plugin/federated_plugin_macos" + "experimental/federated_plugin/federated_plugin_platform_interface" + "experimental/federated_plugin/federated_plugin_web" + "experimental/federated_plugin/federated_plugin_windows" "experimental/linting_tool" + "experimental/material_3_demo" + "experimental/pedometer" + "experimental/varfont_shader_puzzle" + "experimental/web_dashboard" "flutter_maps_firestore" "form_app" "game_template" @@ -29,17 +43,18 @@ declare -ar PROJECT_NAMES=( "jsonexample" "material_3_demo" "navigation_and_routing" - "null_safety/null_safe_app" - "null_safety/null_unsafe_app" "place_tracker" "platform_channels" "platform_design" "platform_view_swift" "provider_counter" "provider_shopper" + "simplistic_calculator" "simplistic_editor" "testing_app" "veggieseasons" + "web/_tool" + "web/samples_index" ) ci_projects "stable" "${PROJECT_NAMES[@]}" diff --git a/veggieseasons/macos/Flutter/GeneratedPluginRegistrant.swift b/veggieseasons/macos/Flutter/GeneratedPluginRegistrant.swift index 6c0c3d478..f71750892 100644 --- a/veggieseasons/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/veggieseasons/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,7 +5,7 @@ import FlutterMacOS import Foundation -import shared_preferences_macos +import shared_preferences_foundation import window_size func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { diff --git a/veggieseasons/pubspec.yaml b/veggieseasons/pubspec.yaml index 775333150..c1ee8e719 100644 --- a/veggieseasons/pubspec.yaml +++ b/veggieseasons/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: cupertino_icons: ^1.0.2 font_awesome_flutter: ^10.1.0 - intl: ^0.17.0 + intl: ^0.18.0 provider: ^6.0.1 shared_preferences: ^2.0.14 window_size: @@ -25,7 +25,7 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.1 - flutter_launcher_icons: ^0.10.0 + flutter_launcher_icons: ^0.11.0 flutter: assets: diff --git a/web/.gitignore b/web/.gitignore index dea4d4c6d..5c644e171 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,2 +1 @@ -!**/pubspec.lock */build diff --git a/web/_tool/build_ci.dart b/web/_tool/build_ci.dart index 5882c274a..1713607be 100644 --- a/web/_tool/build_ci.dart +++ b/web/_tool/build_ci.dart @@ -7,9 +7,9 @@ import 'package:path/path.dart' as p; import 'common.dart'; import 'fix_base_tags.dart'; -final ignoredDirectories = ['_tool', 'samples_index']; +const ignoredDirectories = ['_tool', 'samples_index']; -main() async { +void main() async { final packageDirs = [ ...listPackageDirs(Directory.current) .map((path) => p.relative(path, from: Directory.current.path)) diff --git a/web/_tool/peanut_post_build.dart b/web/_tool/peanut_post_build.dart index 683132d3f..c7482751f 100644 --- a/web/_tool/peanut_post_build.dart +++ b/web/_tool/peanut_post_build.dart @@ -14,7 +14,7 @@ import 'package:path/path.dart' as p; import 'common.dart'; -main(List args) async { +void main(List args) async { final buildDir = args[0]; final fileMap = (jsonDecode(args[1]) as Map).cast(); diff --git a/web/_tool/pubspec.yaml b/web/_tool/pubspec.yaml index 157e4f497..ba5630c78 100644 --- a/web/_tool/pubspec.yaml +++ b/web/_tool/pubspec.yaml @@ -2,7 +2,7 @@ name: tool publish_to: none environment: - sdk: '>=2.12.0 <3.0.0' + sdk: '>=2.17.0 <3.0.0' dependencies: markdown: ^6.0.0 diff --git a/web/charts/README.md b/web/charts/README.md deleted file mode 100644 index 86741043c..000000000 --- a/web/charts/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Examples of the [charts_flutter](https://pub.dev/packages/charts_flutter) package running on the web. - -Original source at [github.com/google/charts](https://github.com/google/charts). - -Copied from -[commit 35aeffe7c9](https://github.com/google/charts/commit/35aeffe7c96aa7d231c90fddd9766998545f1080). - -With changes to run on the web. diff --git a/web/charts/assets/preview.png b/web/charts/assets/preview.png deleted file mode 100644 index 45399d470..000000000 Binary files a/web/charts/assets/preview.png and /dev/null differ diff --git a/web/charts/lib/a11y/a11y_gallery.dart b/web/charts/lib/a11y/a11y_gallery.dart deleted file mode 100644 index d44299b4f..000000000 --- a/web/charts/lib/a11y/a11y_gallery.dart +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'domain_a11y_explore_bar_chart.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.accessibility), - title: 'Screen reader enabled bar chart', - subtitle: 'Requires TalkBack or Voiceover turned on to work. ' - 'Bar chart with domain selection explore mode behavior.', - childBuilder: () => DomainA11yExploreBarChart.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/a11y/domain_a11y_explore_bar_chart.dart b/web/charts/lib/a11y/domain_a11y_explore_bar_chart.dart deleted file mode 100644 index 6e8a6053a..000000000 --- a/web/charts/lib/a11y/domain_a11y_explore_bar_chart.dart +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a bar chart with domain selection A11y behavior. -/// -/// The OS screen reader (TalkBack / VoiceOver) setting must be turned on, or -/// the behavior does not do anything. -/// -/// Note that the screenshot does not show any visual differences but when the -/// OS screen reader is enabled, the node that is being read out loud will be -/// surrounded by a rectangle. -/// -/// When [DomainA11yExploreBehavior] is added to the chart, the chart will -/// listen for the gesture that triggers "explore mode". -/// "Explore mode" creates semantic nodes for each domain value in the chart -/// with a description (customizable, defaults to domain value) and a bounding -/// box that surrounds the domain. -/// -/// These semantic node descriptions are read out loud by the OS screen reader -/// when the user taps within the bounding box, or when the user cycles through -/// the screen's elements (such as swiping left and right). -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class DomainA11yExploreBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DomainA11yExploreBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory DomainA11yExploreBarChart.withSampleData() { - return DomainA11yExploreBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DomainA11yExploreBarChart.withRandomData() { - return DomainA11yExploreBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final mobileData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tabletData = [ - // Purposely missing data to show that only measures that are available - // are vocalized. - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Mobile Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileData, - ), - charts.Series( - id: 'Tablet Sales', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletData, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - /// An example of how to generate a customized vocalization for - /// [DomainA11yExploreBehavior] from a list of [SeriesDatum]s. - /// - /// The list of series datums is for one domain. - /// - /// This example vocalizes the domain, then for each series that has that - /// domain, it vocalizes the series display name and the measure and a - /// description of that measure. - String vocalizeDomainAndMeasures(List seriesDatums) { - final buffer = StringBuffer(); - - // The datum's type in this case is [OrdinalSales]. - // So we can access year and sales information here. - buffer.write(seriesDatums.first.datum.year); - - for (charts.SeriesDatum seriesDatum in seriesDatums) { - final series = seriesDatum.series; - final datum = seriesDatum.datum; - - buffer.write(' ${series.displayName} ' - '${datum.sales / 1000} thousand dollars'); - } - - return buffer.toString(); - } - - @override - Widget build(BuildContext context) { - return Semantics( - // Describe your chart - label: 'Yearly sales bar chart', - // Optionally provide a hint for the user to know how to trigger - // explore mode. - hint: 'Press and hold to enable explore', - child: charts.BarChart( - seriesList, - animate: animate, - // To prevent conflict with the select nearest behavior that uses the - // tap gesture, turn off default interactions when the user is using - // an accessibility service like TalkBack or VoiceOver to interact - // with the application. - defaultInteractions: !MediaQuery.of(context).accessibleNavigation, - behaviors: [ - charts.DomainA11yExploreBehavior( - // Callback for generating the message that is vocalized. - // An example of how to use is in [vocalizeDomainAndMeasures]. - // If none is set, the default only vocalizes the domain value. - vocalizationCallback: vocalizeDomainAndMeasures, - // The following settings are optional, but shown here for - // demonstration purchases. - // [exploreModeTrigger] Default is press and hold, can be - // changed to tap. - exploreModeTrigger: charts.ExploreModeTrigger.pressHold, - // [exploreModeEnabledAnnouncement] Optionally notify the OS - // when explore mode is enabled. - exploreModeEnabledAnnouncement: 'Explore mode enabled', - // [exploreModeDisabledAnnouncement] Optionally notify the OS - // when explore mode is disabled. - exploreModeDisabledAnnouncement: 'Explore mode disabled', - // [minimumWidth] Default and minimum is 1.0. This is the - // minimum width of the screen reader bounding box. The bounding - // box width is calculated based on the domain axis step size. - // Minimum width will be used if the step size is smaller. - minimumWidth: 1.0, - ), - // Optionally include domain highlighter as a behavior. - // This behavior is included in this example to show that when an - // a11y node has focus, the chart's internal selection model is - // also updated. - charts.DomainHighlighter(charts.SelectionModelType.info), - ], - )); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final mobileData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletData = [ - // Purposely missing data to show that only measures that are available - // are vocalized. - OrdinalSales('2016', 25), - OrdinalSales('2017', 50), - ]; - - return [ - charts.Series( - id: 'Mobile Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileData, - ), - charts.Series( - id: 'Tablet Sales', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletData, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/app_config.dart b/web/charts/lib/app_config.dart deleted file mode 100644 index 760e8e680..000000000 --- a/web/charts/lib/app_config.dart +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; - -/// A particular configuration of the app. -class AppConfig { - final String appName; - final String appLink; - final ThemeData theme; - final bool showPerformanceOverlay; - - AppConfig({ - required this.appName, - required this.appLink, - required this.theme, - required this.showPerformanceOverlay, - }); -} - -/// The default configuration of the app. -AppConfig get defaultConfig { - return AppConfig( - appName: 'Charts Gallery', - appLink: '', - theme: ThemeData( - brightness: Brightness.light, - primarySwatch: Colors.lightBlue, - ), - showPerformanceOverlay: false, - ); -} diff --git a/web/charts/lib/axes/axes_gallery.dart b/web/charts/lib/axes/axes_gallery.dart deleted file mode 100644 index f7b9cc5e2..000000000 --- a/web/charts/lib/axes/axes_gallery.dart +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'bar_secondary_axis.dart'; -import 'bar_secondary_axis_only.dart'; -import 'custom_axis_tick_formatters.dart'; -import 'custom_font_size_and_color.dart'; -import 'custom_measure_tick_count.dart'; -import 'gridline_dash_pattern.dart'; -import 'hidden_ticks_and_labels_axis.dart'; -import 'horizontal_bar_secondary_axis.dart'; -import 'integer_only_measure_axis.dart'; -import 'line_disjoint_axis.dart'; -import 'measure_axis_label_alignment.dart'; -import 'numeric_initial_viewport.dart'; -import 'nonzero_bound_measure_axis.dart'; -import 'ordinal_initial_viewport.dart'; -import 'short_tick_length_axis.dart'; -import 'statically_provided_ticks.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Bar chart with Secondary Measure Axis', - subtitle: 'Bar chart with a series using a secondary measure axis', - childBuilder: () => BarChartWithSecondaryAxis.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Bar chart with Secondary Measure Axis only', - subtitle: 'Bar chart with both series using secondary measure axis', - childBuilder: () => BarChartWithSecondaryAxisOnly.withRandomData(), - ), - GalleryScaffold( - listTileIcon: Transform.rotate( - angle: 1.5708, child: const Icon(Icons.insert_chart)), - title: 'Horizontal bar chart with Secondary Measure Axis', - subtitle: - 'Horizontal Bar chart with a series using secondary measure axis', - childBuilder: () => HorizontalBarChartWithSecondaryAxis.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Short Ticks Axis', - subtitle: 'Bar chart with the primary measure axis having short ticks', - childBuilder: () => ShortTickLengthAxis.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Custom Axis Fonts', - subtitle: 'Bar chart with custom axis font size and color', - childBuilder: () => CustomFontSizeAndColor.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Label Alignment Axis', - subtitle: 'Bar chart with custom measure axis label alignments', - childBuilder: () => MeasureAxisLabelAlignment.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'No Axis', - subtitle: 'Bar chart with only the axis line drawn', - childBuilder: () => HiddenTicksAndLabelsAxis.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Statically Provided Ticks', - subtitle: 'Bar chart with statically provided ticks', - childBuilder: () => StaticallyProvidedTicks.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Custom Formatter', - subtitle: 'Timeseries with custom domain and measure tick formatters', - childBuilder: () => CustomAxisTickFormatters.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Custom Tick Count', - subtitle: 'Timeseries with custom measure axis tick count', - childBuilder: () => CustomMeasureTickCount.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Integer Measure Ticks', - subtitle: 'Timeseries with only whole number measure axis ticks', - childBuilder: () => IntegerOnlyMeasureAxis.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Non-zero bound Axis', - subtitle: 'Timeseries with measure axis that does not include zero', - childBuilder: () => NonzeroBoundMeasureAxis.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Ordinal axis with initial viewport', - subtitle: 'Single series with initial viewport', - childBuilder: () => OrdinalInitialViewport.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Numeric axis with initial viewport', - subtitle: 'Initial viewport is set to a subset of the data', - childBuilder: () => NumericInitialViewport.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Gridline dash pattern', - subtitle: 'Timeseries with measure gridlines that have a dash pattern', - childBuilder: () => GridlineDashPattern.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Disjoint Measure Axes', - subtitle: 'Line chart with disjoint measure axes', - childBuilder: () => DisjointMeasureAxisLineChart.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/axes/bar_secondary_axis.dart b/web/charts/lib/axes/bar_secondary_axis.dart deleted file mode 100644 index 1197d6de4..000000000 --- a/web/charts/lib/axes/bar_secondary_axis.dart +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of using a primary and secondary axis (left & right respectively) -/// for a set of grouped bars. This is useful for comparing Series that have -/// different units (revenue vs clicks by region), or different magnitudes (2017 -/// revenue vs 1/1/2017 revenue by region). -/// -/// The first series plots using the primary axis to position its measure -/// values (bar height). This is the default axis used if the measureAxisId is -/// not set. -/// -/// The second series plots using the secondary axis due to the measureAxisId of -/// secondaryMeasureAxisId. -/// -/// Note: primary and secondary may flip left and right positioning when -/// RTL.flipAxisLocations is set. -class BarChartWithSecondaryAxis extends StatelessWidget { - static const secondaryMeasureAxisId = 'secondaryMeasureAxisId'; - final List> seriesList; - final bool? animate; - - const BarChartWithSecondaryAxis(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory BarChartWithSecondaryAxis.withSampleData() { - return BarChartWithSecondaryAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory BarChartWithSecondaryAxis.withRandomData() { - return BarChartWithSecondaryAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - final losAngelesSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - charts.Series( - id: 'Los Angeles Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: losAngelesSalesData, - )..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId) - // Set the 'Los Angeles Revenue' series to use the secondary measure axis. - // All series that have this set will use the secondary measure axis. - // All other series will use the primary measure axis. - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // It is important when using both primary and secondary axes to choose - // the same number of ticks for both sides to get the gridlines to line - // up. - primaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: - charts.BasicNumericTickProviderSpec(desiredTickCount: 3)), - secondaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: - charts.BasicNumericTickProviderSpec(desiredTickCount: 3)), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - final losAngelesSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - charts.Series( - id: 'Los Angeles Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: losAngelesSalesData, - )..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId) - // Set the 'Los Angeles Revenue' series to use the secondary measure axis. - // All series that have this set will use the secondary measure axis. - // All other series will use the primary measure axis. - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/bar_secondary_axis_only.dart b/web/charts/lib/axes/bar_secondary_axis_only.dart deleted file mode 100644 index 3acc51239..000000000 --- a/web/charts/lib/axes/bar_secondary_axis_only.dart +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of using only a secondary axis (on the right) for a set of grouped -/// bars. -/// -/// Both series plots using the secondary axis due to the measureAxisId of -/// secondaryMeasureAxisId. -/// -/// Note: secondary may flip left and right positioning when -/// RTL.flipAxisLocations is set. -class BarChartWithSecondaryAxisOnly extends StatelessWidget { - static const secondaryMeasureAxisId = 'secondaryMeasureAxisId'; - final List> seriesList; - final bool? animate; - - const BarChartWithSecondaryAxisOnly(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory BarChartWithSecondaryAxisOnly.withSampleData() { - return BarChartWithSecondaryAxisOnly( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory BarChartWithSecondaryAxisOnly.withRandomData() { - return BarChartWithSecondaryAxisOnly(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ) - // Set series to use the secondary measure axis. - ..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 500), - OrdinalSales('2015', 2500), - OrdinalSales('2016', 1000), - OrdinalSales('2017', 7500), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ) - // Set series to use the secondary measure axis. - ..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/custom_axis_tick_formatters.dart b/web/charts/lib/axes/custom_axis_tick_formatters.dart deleted file mode 100644 index 53f9c1f5e..000000000 --- a/web/charts/lib/axes/custom_axis_tick_formatters.dart +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of timeseries chart with custom measure and domain formatters. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; - -class CustomAxisTickFormatters extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const CustomAxisTickFormatters(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory CustomAxisTickFormatters.withSampleData() { - return CustomAxisTickFormatters( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory CustomAxisTickFormatters.withRandomData() { - return CustomAxisTickFormatters(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - MyRow(DateTime(2017, 9, 25), random.nextInt(100)), - MyRow(DateTime(2017, 9, 26), random.nextInt(100)), - MyRow(DateTime(2017, 9, 27), random.nextInt(100)), - MyRow(DateTime(2017, 9, 28), random.nextInt(100)), - MyRow(DateTime(2017, 9, 29), random.nextInt(100)), - MyRow(DateTime(2017, 9, 30), random.nextInt(100)), - MyRow(DateTime(2017, 10, 01), random.nextInt(100)), - MyRow(DateTime(2017, 10, 02), random.nextInt(100)), - MyRow(DateTime(2017, 10, 03), random.nextInt(100)), - MyRow(DateTime(2017, 10, 04), random.nextInt(100)), - MyRow(DateTime(2017, 10, 05), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Cost', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.cost, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - /// Formatter for numeric ticks using [NumberFormat] to format into currency - /// - /// This is what is used in the [NumericAxisSpec] below. - final simpleCurrencyFormatter = - charts.BasicNumericTickFormatterSpec.fromNumberFormat( - NumberFormat.compactSimpleCurrency()); - - /// Formatter for numeric ticks that uses the callback provided. - /// - /// Use this formatter if you need to format values that [NumberFormat] - /// cannot provide. - /// - /// To see this formatter, change [NumericAxisSpec] to use this formatter. - // final customTickFormatter = - // charts.BasicNumericTickFormatterSpec((num value) => 'MyValue: $value'); - - return charts.TimeSeriesChart(seriesList, - animate: animate, - // Sets up a currency formatter for the measure axis. - primaryMeasureAxis: - charts.NumericAxisSpec(tickFormatterSpec: simpleCurrencyFormatter), - - /// Customizes the date tick formatter. It will print the day of month - /// as the default format, but include the month and year if it - /// transitions to a new month. - /// - /// minute, hour, day, month, and year are all provided by default and - /// you can override them following this pattern. - domainAxis: const charts.DateTimeAxisSpec( - tickFormatterSpec: charts.AutoDateTimeTickFormatterSpec( - day: charts.TimeFormatterSpec( - format: 'd', transitionFormat: 'MM/dd/yyyy')))); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - MyRow(DateTime(2017, 9, 25), 6), - MyRow(DateTime(2017, 9, 26), 8), - MyRow(DateTime(2017, 9, 27), 6), - MyRow(DateTime(2017, 9, 28), 9), - MyRow(DateTime(2017, 9, 29), 11), - MyRow(DateTime(2017, 9, 30), 15), - MyRow(DateTime(2017, 10, 01), 25), - MyRow(DateTime(2017, 10, 02), 33), - MyRow(DateTime(2017, 10, 03), 27), - MyRow(DateTime(2017, 10, 04), 31), - MyRow(DateTime(2017, 10, 05), 23), - ]; - - return [ - charts.Series( - id: 'Cost', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.cost, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class MyRow { - final DateTime timeStamp; - final int cost; - MyRow(this.timeStamp, this.cost); -} diff --git a/web/charts/lib/axes/custom_font_size_and_color.dart b/web/charts/lib/axes/custom_font_size_and_color.dart deleted file mode 100644 index 2f02cce22..000000000 --- a/web/charts/lib/axes/custom_font_size_and_color.dart +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Custom Font Style Example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of using a custom primary measure and domain axis replacing the -/// renderSpec with one with a custom font size and a custom color. -/// -/// There are many axis styling options in the SmallTickRenderer allowing you -/// to customize the font, tick lengths, and offsets. -class CustomFontSizeAndColor extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const CustomFontSizeAndColor(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory CustomFontSizeAndColor.withSampleData() { - return CustomFontSizeAndColor( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory CustomFontSizeAndColor.withRandomData() { - return CustomFontSizeAndColor(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - - /// Assign a custom style for the domain axis. - /// - /// This is an OrdinalAxisSpec to match up with BarChart's default - /// ordinal domain axis (use NumericAxisSpec or DateTimeAxisSpec for - /// other charts). - domainAxis: const charts.OrdinalAxisSpec( - renderSpec: charts.SmallTickRendererSpec( - - // Tick and Label styling here. - labelStyle: charts.TextStyleSpec( - fontSize: 18, // size in Pts. - color: charts.MaterialPalette.black), - - // Change the line colors to match text color. - lineStyle: - charts.LineStyleSpec(color: charts.MaterialPalette.black))), - - /// Assign a custom style for the measure axis. - primaryMeasureAxis: const charts.NumericAxisSpec( - renderSpec: charts.GridlineRendererSpec( - - // Tick and Label styling here. - labelStyle: charts.TextStyleSpec( - fontSize: 18, // size in Pts. - color: charts.MaterialPalette.black), - - // Change the line colors to match text color. - lineStyle: - charts.LineStyleSpec(color: charts.MaterialPalette.black))), - ); - } - - /// Create series list with single series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/custom_measure_tick_count.dart b/web/charts/lib/axes/custom_measure_tick_count.dart deleted file mode 100644 index 4c230113d..000000000 --- a/web/charts/lib/axes/custom_measure_tick_count.dart +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of timeseries chart with a custom number of ticks -/// -/// The tick count can be set by setting the [desiredMinTickCount] and -/// [desiredMaxTickCount] for automatically adjusted tick counts (based on -/// how 'nice' the ticks are) or [desiredTickCount] for a fixed tick count. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class CustomMeasureTickCount extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const CustomMeasureTickCount(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory CustomMeasureTickCount.withSampleData() { - return CustomMeasureTickCount( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory CustomMeasureTickCount.withRandomData() { - return CustomMeasureTickCount(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - MyRow(DateTime(2017, 9, 25), random.nextInt(100)), - MyRow(DateTime(2017, 9, 26), random.nextInt(100)), - MyRow(DateTime(2017, 9, 27), random.nextInt(100)), - MyRow(DateTime(2017, 9, 28), random.nextInt(100)), - MyRow(DateTime(2017, 9, 29), random.nextInt(100)), - MyRow(DateTime(2017, 9, 30), random.nextInt(100)), - MyRow(DateTime(2017, 10, 01), random.nextInt(100)), - MyRow(DateTime(2017, 10, 02), random.nextInt(100)), - MyRow(DateTime(2017, 10, 03), random.nextInt(100)), - MyRow(DateTime(2017, 10, 04), random.nextInt(100)), - MyRow(DateTime(2017, 10, 05), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Cost', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.cost, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart(seriesList, - animate: animate, - - /// Customize the measure axis to have 2 ticks, - primaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: - charts.BasicNumericTickProviderSpec(desiredTickCount: 2))); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - MyRow(DateTime(2017, 9, 25), 6), - MyRow(DateTime(2017, 9, 26), 8), - MyRow(DateTime(2017, 9, 27), 6), - MyRow(DateTime(2017, 9, 28), 9), - MyRow(DateTime(2017, 9, 29), 11), - MyRow(DateTime(2017, 9, 30), 15), - MyRow(DateTime(2017, 10, 01), 25), - MyRow(DateTime(2017, 10, 02), 33), - MyRow(DateTime(2017, 10, 03), 27), - MyRow(DateTime(2017, 10, 04), 31), - MyRow(DateTime(2017, 10, 05), 23), - ]; - - return [ - charts.Series( - id: 'Cost', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.cost, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class MyRow { - final DateTime timeStamp; - final int cost; - MyRow(this.timeStamp, this.cost); -} diff --git a/web/charts/lib/axes/flipped_vertical_axis.dart b/web/charts/lib/axes/flipped_vertical_axis.dart deleted file mode 100644 index 475e32569..000000000 --- a/web/charts/lib/axes/flipped_vertical_axis.dart +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of flipping the vertical measure axis direction so that larger -/// values render downward instead of the usual rendering up. -/// -/// flipVerticalAxis, when set, flips the vertical axis from its default -/// direction. -/// -/// Note: primary and secondary may flip left and right positioning when -/// RTL.flipAxisLocations is set. -class FlippedVerticalAxis extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const FlippedVerticalAxis(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory FlippedVerticalAxis.withSampleData() { - return FlippedVerticalAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory FlippedVerticalAxis.withRandomData() { - return FlippedVerticalAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - const runners = ['Smith', 'Jones', 'Brown', 'Doe']; - - // Randomly assign runners, but leave the order of the places. - final raceData = [ - RunnerRank(runners.removeAt(random.nextInt(runners.length)), 1), - RunnerRank(runners.removeAt(random.nextInt(runners.length)), 2), - RunnerRank(runners.removeAt(random.nextInt(runners.length)), 3), - RunnerRank(runners.removeAt(random.nextInt(runners.length)), 4), - ]; - - return [ - charts.Series( - id: 'Race Results', - domainFn: (RunnerRank row, _) => row.name, - measureFn: (RunnerRank row, _) => row.place, - data: raceData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - // Known Issue, the bar chart cannot render negative direction bars at this - // time so the result is an empty chart. - // TODO: Remove this comment - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - flipVerticalAxis: true, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final raceData = [ - RunnerRank('Smith', 1), - RunnerRank('Jones', 2), - RunnerRank('Brown', 3), - RunnerRank('Doe', 4), - ]; - - return [ - charts.Series( - id: 'Race Results', - domainFn: (RunnerRank row, _) => row.name, - measureFn: (RunnerRank row, _) => row.place, - data: raceData), - ]; - } -} - -/// Datum/Row for the chart. -class RunnerRank { - final String name; - final int place; - RunnerRank(this.name, this.place); -} diff --git a/web/charts/lib/axes/gridline_dash_pattern.dart b/web/charts/lib/axes/gridline_dash_pattern.dart deleted file mode 100644 index fe6c20c3f..000000000 --- a/web/charts/lib/axes/gridline_dash_pattern.dart +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of timeseries chart with gridlines that have a dash pattern. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class GridlineDashPattern extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GridlineDashPattern(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory GridlineDashPattern.withSampleData() { - return GridlineDashPattern( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GridlineDashPattern.withRandomData() { - return GridlineDashPattern(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - MyRow(DateTime(2017, 9, 25), random.nextInt(100)), - MyRow(DateTime(2017, 9, 26), random.nextInt(100)), - MyRow(DateTime(2017, 9, 27), random.nextInt(100)), - MyRow(DateTime(2017, 9, 28), random.nextInt(100)), - MyRow(DateTime(2017, 9, 29), random.nextInt(100)), - MyRow(DateTime(2017, 9, 30), random.nextInt(100)), - MyRow(DateTime(2017, 10, 01), random.nextInt(100)), - MyRow(DateTime(2017, 10, 02), random.nextInt(100)), - MyRow(DateTime(2017, 10, 03), random.nextInt(100)), - MyRow(DateTime(2017, 10, 04), random.nextInt(100)), - MyRow(DateTime(2017, 10, 05), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Cost', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.cost, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart(seriesList, - animate: animate, - - /// Customize the gridlines to use a dash pattern. - primaryMeasureAxis: const charts.NumericAxisSpec( - renderSpec: charts.GridlineRendererSpec( - lineStyle: charts.LineStyleSpec( - dashPattern: [4, 4], - )))); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - MyRow(DateTime(2017, 9, 25), 6), - MyRow(DateTime(2017, 9, 26), 8), - MyRow(DateTime(2017, 9, 27), 6), - MyRow(DateTime(2017, 9, 28), 9), - MyRow(DateTime(2017, 9, 29), 11), - MyRow(DateTime(2017, 9, 30), 15), - MyRow(DateTime(2017, 10, 01), 25), - MyRow(DateTime(2017, 10, 02), 33), - MyRow(DateTime(2017, 10, 03), 27), - MyRow(DateTime(2017, 10, 04), 31), - MyRow(DateTime(2017, 10, 05), 23), - ]; - - return [ - charts.Series( - id: 'Cost', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.cost, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class MyRow { - final DateTime timeStamp; - final int cost; - MyRow(this.timeStamp, this.cost); -} diff --git a/web/charts/lib/axes/hidden_ticks_and_labels_axis.dart b/web/charts/lib/axes/hidden_ticks_and_labels_axis.dart deleted file mode 100644 index aaee6565d..000000000 --- a/web/charts/lib/axes/hidden_ticks_and_labels_axis.dart +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// No Axis Example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of hiding both axis. -class HiddenTicksAndLabelsAxis extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const HiddenTicksAndLabelsAxis(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory HiddenTicksAndLabelsAxis.withSampleData() { - return HiddenTicksAndLabelsAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory HiddenTicksAndLabelsAxis.withRandomData() { - return HiddenTicksAndLabelsAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - - /// Assign a custom style for the measure axis. - /// - /// The NoneRenderSpec can still draw an axis line with - /// showAxisLine=true. - primaryMeasureAxis: - const charts.NumericAxisSpec(renderSpec: charts.NoneRenderSpec()), - - /// This is an OrdinalAxisSpec to match up with BarChart's default - /// ordinal domain axis (use NumericAxisSpec or DateTimeAxisSpec for - /// other charts). - domainAxis: const charts.OrdinalAxisSpec( - // Make sure that we draw the domain axis line. - showAxisLine: true, - // But don't draw anything else. - renderSpec: charts.NoneRenderSpec()), - ); - } - - /// Create series list with single series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/horizontal_bar_secondary_axis.dart b/web/charts/lib/axes/horizontal_bar_secondary_axis.dart deleted file mode 100644 index 13fe15b73..000000000 --- a/web/charts/lib/axes/horizontal_bar_secondary_axis.dart +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of using a primary and secondary axis (left & right respectively) -/// for a set of grouped bars. This is useful for comparing Series that have -/// different units (revenue vs clicks by region), or different magnitudes (2017 -/// revenue vs 1/1/2017 revenue by region). -/// -/// The first series plots using the primary axis to position its measure -/// values (bar height). This is the default axis used if the measureAxisId is -/// not set. -/// -/// The second series plots using the secondary axis due to the measureAxisId of -/// secondaryMeasureAxisId. -/// -/// Note: primary and secondary may flip left and right positioning when -/// RTL.flipAxisLocations is set. -class HorizontalBarChartWithSecondaryAxis extends StatelessWidget { - static const secondaryMeasureAxisId = 'secondaryMeasureAxisId'; - final List> seriesList; - final bool? animate; - - const HorizontalBarChartWithSecondaryAxis(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - factory HorizontalBarChartWithSecondaryAxis.withSampleData() { - return HorizontalBarChartWithSecondaryAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory HorizontalBarChartWithSecondaryAxis.withRandomData() { - return HorizontalBarChartWithSecondaryAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - final losAngelesSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - charts.Series( - id: 'Los Angeles Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: losAngelesSalesData, - )..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId) - // Set the 'Los Angeles Revenue' series to use the secondary measure axis. - // All series that have this set will use the secondary measure axis. - // All other series will use the primary measure axis. - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // For horizontal bar charts, set the [vertical] flag to false. - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - vertical: false, - // It is important when using both primary and secondary axes to choose - // the same number of ticks for both sides to get the gridlines to line - // up. - primaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: - charts.BasicNumericTickProviderSpec(desiredTickCount: 3)), - secondaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: - charts.BasicNumericTickProviderSpec(desiredTickCount: 3)), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - final losAngelesSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - charts.Series( - id: 'Los Angeles Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: losAngelesSalesData, - )..setAttribute(charts.measureAxisIdKey, secondaryMeasureAxisId) - // Set the 'Los Angeles Revenue' series to use the secondary measure axis. - // All series that have this set will use the secondary measure axis. - // All other series will use the primary measure axis. - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/integer_only_measure_axis.dart b/web/charts/lib/axes/integer_only_measure_axis.dart deleted file mode 100644 index 54a51c537..000000000 --- a/web/charts/lib/axes/integer_only_measure_axis.dart +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of timeseries chart forcing the measure axis to have whole number -/// ticks. This is useful if the measure units don't make sense to present as -/// fractional. -/// -/// This is done by customizing the measure axis and setting -/// [dataIsInWholeNumbers] on the tick provider. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class IntegerOnlyMeasureAxis extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const IntegerOnlyMeasureAxis(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory IntegerOnlyMeasureAxis.withSampleData() { - return IntegerOnlyMeasureAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory IntegerOnlyMeasureAxis.withRandomData() { - return IntegerOnlyMeasureAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - MyRow(DateTime(2017, 9, 25), random.nextDouble().round()), - MyRow(DateTime(2017, 9, 26), random.nextDouble().round()), - MyRow(DateTime(2017, 9, 27), random.nextDouble().round()), - MyRow(DateTime(2017, 9, 28), random.nextDouble().round()), - MyRow(DateTime(2017, 9, 29), random.nextDouble().round()), - MyRow(DateTime(2017, 9, 30), random.nextDouble().round()), - MyRow(DateTime(2017, 10, 01), random.nextDouble().round()), - MyRow(DateTime(2017, 10, 02), random.nextDouble().round()), - MyRow(DateTime(2017, 10, 03), random.nextDouble().round()), - MyRow(DateTime(2017, 10, 04), random.nextDouble().round()), - MyRow(DateTime(2017, 10, 05), random.nextDouble().round()), - ]; - - return [ - charts.Series( - id: 'Headcount', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.headcount, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Provides a custom axis ensuring that the ticks are in whole numbers. - primaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: charts.BasicNumericTickProviderSpec( - // Make sure we don't have values less than 1 as ticks - // (ie: counts). - dataIsInWholeNumbers: true, - // Fixed tick count to highlight the integer only behavior - // generating ticks [0, 1, 2, 3, 4]. - desiredTickCount: 5)), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - MyRow(DateTime(2017, 9, 25), 0), - MyRow(DateTime(2017, 9, 26), 0), - MyRow(DateTime(2017, 9, 27), 0), - MyRow(DateTime(2017, 9, 28), 0), - MyRow(DateTime(2017, 9, 29), 0), - MyRow(DateTime(2017, 9, 30), 0), - MyRow(DateTime(2017, 10, 01), 1), - MyRow(DateTime(2017, 10, 02), 1), - MyRow(DateTime(2017, 10, 03), 1), - MyRow(DateTime(2017, 10, 04), 1), - MyRow(DateTime(2017, 10, 05), 1), - ]; - - return [ - charts.Series( - id: 'Headcount', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.headcount, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class MyRow { - final DateTime timeStamp; - final int headcount; - MyRow(this.timeStamp, this.headcount); -} diff --git a/web/charts/lib/axes/line_disjoint_axis.dart b/web/charts/lib/axes/line_disjoint_axis.dart deleted file mode 100644 index 87dee4fb9..000000000 --- a/web/charts/lib/axes/line_disjoint_axis.dart +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of using disjoint measure axes to render 4 series of lines with -/// separate scales. The general use case for this type of chart is to show -/// differences in the trends of the data, without comparing their absolute -/// values. -/// -/// Disjoint measure axes will be used to scale the series associated with them, -/// but they will not render any tick elements on either side of the chart. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:collection' show LinkedHashMap; -import 'dart:math'; - -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class DisjointMeasureAxisLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DisjointMeasureAxisLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory DisjointMeasureAxisLineChart.withSampleData() { - return DisjointMeasureAxisLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DisjointMeasureAxisLineChart.withRandomData() { - return DisjointMeasureAxisLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - // The first three series contain similar data with different magnitudes. - // This demonstrates the ability to graph the trends in each series relative - // to each other, without the largest magnitude series compressing the - // smallest. - final myFakeDesktopData = [ - LinearClicks(0, clickCount: random.nextInt(100)), - LinearClicks(1, clickCount: random.nextInt(100)), - LinearClicks(2, clickCount: random.nextInt(100)), - LinearClicks(3, clickCount: random.nextInt(100)), - ]; - - final myFakeTabletData = [ - LinearClicks(0, clickCount: random.nextInt(100) * 100), - LinearClicks(1, clickCount: random.nextInt(100) * 100), - LinearClicks(2, clickCount: random.nextInt(100) * 100), - LinearClicks(3, clickCount: random.nextInt(100) * 100), - ]; - - final myFakeMobileData = [ - LinearClicks(0, clickCount: random.nextInt(100) * 1000), - LinearClicks(1, clickCount: random.nextInt(100) * 1000), - LinearClicks(2, clickCount: random.nextInt(100) * 1000), - LinearClicks(3, clickCount: random.nextInt(100) * 1000), - ]; - - // The fourth series renders with decimal values, representing a very - // different sort ratio-based data. If this was on the same axis as any of - // the other series, it would be squashed near zero. - final myFakeClickRateData = [ - LinearClicks(0, clickRate: .25), - LinearClicks(1, clickRate: .65), - LinearClicks(2, clickRate: .50), - LinearClicks(3, clickRate: .30), - ]; - - return [ - // We render an empty series on the primary measure axis to ensure that - // the axis itself gets rendered. This helps us draw the gridlines on the - // chart. - charts.Series( - id: 'Fake Series', - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: []), - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeDesktopData, - ) - // Set the 'Desktop' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 1'), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeTabletData, - ) - // Set the 'Tablet' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 2'), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeMobileData, - ) - // Set the 'Mobile' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 3'), - charts.Series( - id: 'Click Rate', - colorFn: (_, __) => charts.MaterialPalette.purple.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeClickRateData, - ) - // Set the 'Click Rate' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 4'), - ]; - } - - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - animate: animate, - // Configure a primary measure axis that will render gridlines across - // the chart. This axis uses fake ticks with no labels to ensure that we - // get 5 grid lines. - // - // We do this because disjoint measure axes do not draw any tick - // elements on the chart. - primaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: charts.StaticNumericTickProviderSpec( - // Create the ticks to be used the domain axis. - [ - charts.TickSpec(0, label: ''), - charts.TickSpec(1, label: ''), - charts.TickSpec(2, label: ''), - charts.TickSpec(3, label: ''), - charts.TickSpec(4, label: ''), - ], - )), - // Create one disjoint measure axis per series on the chart. - // - // Disjoint measure axes will be used to scale the rendered data, - // without drawing any tick elements on either side of the chart. - disjointMeasureAxes: - LinkedHashMap.from({ - 'axis 1': const charts.NumericAxisSpec(), - 'axis 2': const charts.NumericAxisSpec(), - 'axis 3': const charts.NumericAxisSpec(), - 'axis 4': const charts.NumericAxisSpec(), - })); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - // The first three series contain similar data with different magnitudes. - // This demonstrates the ability to graph the trends in each series relative - // to each other, without the largest magnitude series compressing the - // smallest. - final myFakeDesktopData = [ - LinearClicks(0, clickCount: 25), - LinearClicks(1, clickCount: 125), - LinearClicks(2, clickCount: 920), - LinearClicks(3, clickCount: 375), - ]; - - final myFakeTabletData = [ - LinearClicks(0, clickCount: 375), - LinearClicks(1, clickCount: 1850), - LinearClicks(2, clickCount: 9700), - LinearClicks(3, clickCount: 5000), - ]; - - final myFakeMobileData = [ - LinearClicks(0, clickCount: 5000), - LinearClicks(1, clickCount: 25000), - LinearClicks(2, clickCount: 100000), - LinearClicks(3, clickCount: 75000), - ]; - - // The fourth series renders with decimal values, representing a very - // different sort ratio-based data. If this was on the same axis as any of - // the other series, it would be squashed near zero. - final myFakeClickRateData = [ - LinearClicks(0, clickRate: .25), - LinearClicks(1, clickRate: .65), - LinearClicks(2, clickRate: .50), - LinearClicks(3, clickRate: .30), - ]; - - return [ - // We render an empty series on the primary measure axis to ensure that - // the axis itself gets rendered. This helps us draw the gridlines on the - // chart. - charts.Series( - id: 'Fake Series', - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: []), - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeDesktopData, - ) - // Set the 'Desktop' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 1'), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeTabletData, - ) - // Set the 'Tablet' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 2'), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickCount, - data: myFakeMobileData, - ) - // Set the 'Mobile' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 3'), - charts.Series( - id: 'Click Rate', - colorFn: (_, __) => charts.MaterialPalette.purple.shadeDefault, - domainFn: (LinearClicks clickCount, _) => clickCount.year, - measureFn: (LinearClicks clickCount, _) => clickCount.clickRate, - data: myFakeClickRateData, - ) - // Set the 'Click Rate' series to use a disjoint axis. - ..setAttribute(charts.measureAxisIdKey, 'axis 4'), - ]; - } -} - -/// Sample linear data type. -class LinearClicks { - final int year; - final int? clickCount; - final double? clickRate; - - LinearClicks(this.year, {this.clickCount, this.clickRate}); -} diff --git a/web/charts/lib/axes/measure_axis_label_alignment.dart b/web/charts/lib/axes/measure_axis_label_alignment.dart deleted file mode 100644 index 9cf596642..000000000 --- a/web/charts/lib/axes/measure_axis_label_alignment.dart +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Custom Tick Label Alignment Example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of using a custom primary measure replacing the renderSpec with one -/// that aligns the text under the tick and left justifies. -class MeasureAxisLabelAlignment extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const MeasureAxisLabelAlignment(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory MeasureAxisLabelAlignment.withSampleData() { - return MeasureAxisLabelAlignment( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory MeasureAxisLabelAlignment.withRandomData() { - return MeasureAxisLabelAlignment(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - - /// Customize the primary measure axis using a small tick renderer. - /// Use String instead of num for ordinal domain axis - /// (typically bar charts). - primaryMeasureAxis: const charts.NumericAxisSpec( - renderSpec: charts.GridlineRendererSpec( - // Display the measure axis labels below the gridline. - // - // 'Before' & 'after' follow the axis value direction. - // Vertical axes draw 'before' below & 'after' above the tick. - // Horizontal axes draw 'before' left & 'after' right the tick. - labelAnchor: charts.TickLabelAnchor.before, - - // Left justify the text in the axis. - // - // Note: outside means that the secondary measure axis would right - // justify. - labelJustification: charts.TickLabelJustification.outside, - )), - ); - } - - /// Create series list with single series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/nonzero_bound_measure_axis.dart b/web/charts/lib/axes/nonzero_bound_measure_axis.dart deleted file mode 100644 index 2ed666a4b..000000000 --- a/web/charts/lib/axes/nonzero_bound_measure_axis.dart +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of timeseries chart that has a measure axis that does NOT include -/// zero. It starts at 100 and goes to 140. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class NonzeroBoundMeasureAxis extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const NonzeroBoundMeasureAxis(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory NonzeroBoundMeasureAxis.withSampleData() { - return NonzeroBoundMeasureAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory NonzeroBoundMeasureAxis.withRandomData() { - return NonzeroBoundMeasureAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - MyRow(DateTime(2017, 9, 25), random.nextInt(100) + 100), - MyRow(DateTime(2017, 9, 26), random.nextInt(100) + 100), - MyRow(DateTime(2017, 9, 27), random.nextInt(100) + 100), - MyRow(DateTime(2017, 9, 28), random.nextInt(100) + 100), - MyRow(DateTime(2017, 9, 29), random.nextInt(100) + 100), - MyRow(DateTime(2017, 9, 30), random.nextInt(100) + 100), - MyRow(DateTime(2017, 10, 01), random.nextInt(100) + 100), - MyRow(DateTime(2017, 10, 02), random.nextInt(100) + 100), - MyRow(DateTime(2017, 10, 03), random.nextInt(100) + 100), - MyRow(DateTime(2017, 10, 04), random.nextInt(100) + 100), - MyRow(DateTime(2017, 10, 05), random.nextInt(100) + 100), - ]; - - return [ - charts.Series( - id: 'Headcount', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.headcount, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart(seriesList, - animate: animate, - // Provide a tickProviderSpec which does NOT require that zero is - // included. - primaryMeasureAxis: const charts.NumericAxisSpec( - tickProviderSpec: - charts.BasicNumericTickProviderSpec(zeroBound: false))); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - MyRow(DateTime(2017, 9, 25), 106), - MyRow(DateTime(2017, 9, 26), 108), - MyRow(DateTime(2017, 9, 27), 106), - MyRow(DateTime(2017, 9, 28), 109), - MyRow(DateTime(2017, 9, 29), 111), - MyRow(DateTime(2017, 9, 30), 115), - MyRow(DateTime(2017, 10, 01), 125), - MyRow(DateTime(2017, 10, 02), 133), - MyRow(DateTime(2017, 10, 03), 127), - MyRow(DateTime(2017, 10, 04), 131), - MyRow(DateTime(2017, 10, 05), 123), - ]; - - return [ - charts.Series( - id: 'Headcount', - domainFn: (MyRow row, _) => row.timeStamp, - measureFn: (MyRow row, _) => row.headcount, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class MyRow { - final DateTime timeStamp; - final int headcount; - MyRow(this.timeStamp, this.headcount); -} diff --git a/web/charts/lib/axes/numeric_initial_viewport.dart b/web/charts/lib/axes/numeric_initial_viewport.dart deleted file mode 100644 index ca3e1d363..000000000 --- a/web/charts/lib/axes/numeric_initial_viewport.dart +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of setting an initial viewport for ordinal axis. -/// -/// This allows for specifying the specific range of data to show that differs -/// from what was provided in the series list. -/// -/// In this example, the series list has numeric data from 0 to 10, but we -/// want to show from 3 to 7. -/// We can do this by specifying an [NumericExtents] in [NumericAxisSpec]. - -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class NumericInitialViewport extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const NumericInitialViewport(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory NumericInitialViewport.withSampleData() { - return NumericInitialViewport( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory NumericInitialViewport.withRandomData() { - return NumericInitialViewport(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - LinearSales(4, random.nextInt(100)), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - LinearSales(7, random.nextInt(100)), - LinearSales(8, random.nextInt(100)), - LinearSales(9, random.nextInt(100)), - LinearSales(10, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart( - seriesList, - animate: animate, - domainAxis: const charts.NumericAxisSpec( - // Set the initial viewport by providing a new AxisSpec with the - // desired viewport, in NumericExtents. - viewport: charts.NumericExtents(3.0, 7.0)), - // Optionally add a pan or pan and zoom behavior. - // If pan/zoom is not added, the viewport specified remains the viewport. - behaviors: [charts.PanAndZoomBehavior()], - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - LinearSales(4, 55), - LinearSales(5, 66), - LinearSales(6, 110), - LinearSales(7, 70), - LinearSales(8, 20), - LinearSales(9, 25), - LinearSales(10, 45), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/ordinal_initial_viewport.dart b/web/charts/lib/axes/ordinal_initial_viewport.dart deleted file mode 100644 index cd48b2024..000000000 --- a/web/charts/lib/axes/ordinal_initial_viewport.dart +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of setting an initial viewport for ordinal axis. -/// -/// This allows for specifying the specific range of data to show that differs -/// from what was provided in the series list. -/// -/// In this example, the series list has ordinal data from year 2014 to 2030, -/// but we want to show starting at 2018 and we only want to show 4 values. -/// We can do this by specifying an [OrdinalViewport] in [OrdinalAxisSpec]. - -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class OrdinalInitialViewport extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const OrdinalInitialViewport(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory OrdinalInitialViewport.withSampleData() { - return OrdinalInitialViewport( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory OrdinalInitialViewport.withRandomData() { - return OrdinalInitialViewport(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - OrdinalSales('2018', random.nextInt(100)), - OrdinalSales('2019', random.nextInt(100)), - OrdinalSales('2020', random.nextInt(100)), - OrdinalSales('2021', random.nextInt(100)), - OrdinalSales('2022', random.nextInt(100)), - OrdinalSales('2023', random.nextInt(100)), - OrdinalSales('2024', random.nextInt(100)), - OrdinalSales('2025', random.nextInt(100)), - OrdinalSales('2026', random.nextInt(100)), - OrdinalSales('2027', random.nextInt(100)), - OrdinalSales('2028', random.nextInt(100)), - OrdinalSales('2029', random.nextInt(100)), - OrdinalSales('2030', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - // Set the initial viewport by providing a new AxisSpec with the - // desired viewport: a starting domain and the data size. - domainAxis: - charts.OrdinalAxisSpec(viewport: charts.OrdinalViewport('2018', 4)), - // Optionally add a pan or pan and zoom behavior. - // If pan/zoom is not added, the viewport specified remains the viewport. - behaviors: [charts.PanAndZoomBehavior()], - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - OrdinalSales('2018', 33), - OrdinalSales('2019', 80), - OrdinalSales('2020', 21), - OrdinalSales('2021', 77), - OrdinalSales('2022', 8), - OrdinalSales('2023', 12), - OrdinalSales('2024', 42), - OrdinalSales('2025', 70), - OrdinalSales('2026', 77), - OrdinalSales('2027', 55), - OrdinalSales('2028', 19), - OrdinalSales('2029', 66), - OrdinalSales('2030', 27), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/short_tick_length_axis.dart b/web/charts/lib/axes/short_tick_length_axis.dart deleted file mode 100644 index cc510b04b..000000000 --- a/web/charts/lib/axes/short_tick_length_axis.dart +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Custom Tick Style Example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of using a custom primary measure axis replacing the default -/// gridline rendering with a short tick rendering. It also turns on the axis -/// line so that the ticks have something to line up against. -/// -/// There are many axis styling options in the SmallTickRenderer allowing you -/// to customize the font, tick lengths, and offsets. -class ShortTickLengthAxis extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const ShortTickLengthAxis(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory ShortTickLengthAxis.withSampleData() { - return ShortTickLengthAxis( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory ShortTickLengthAxis.withRandomData() { - return ShortTickLengthAxis(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - - /// Customize the primary measure axis using a small tick renderer. - /// Note: use String instead of num for ordinal domain axis - /// (typically bar charts). - primaryMeasureAxis: const charts.NumericAxisSpec( - renderSpec: charts.SmallTickRendererSpec( - // Tick and Label styling here. - )), - ); - } - - /// Create series list with single series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/axes/statically_provided_ticks.dart b/web/charts/lib/axes/statically_provided_ticks.dart deleted file mode 100644 index 1f155595b..000000000 --- a/web/charts/lib/axes/statically_provided_ticks.dart +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of axis using statically provided ticks. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of specifying a custom set of ticks to be used on the domain axis. -/// -/// Specifying custom set of ticks allows specifying exactly what ticks are -/// used in the axis. Each tick is also allowed to have a different style set. -/// -/// For an ordinal axis, the [StaticOrdinalTickProviderSpec] is shown in this -/// example defining ticks to be used with [TickSpec] of String. -/// -/// For numeric axis, the [StaticNumericTickProviderSpec] can be used by passing -/// in a list of ticks defined with [TickSpec] of num. -/// -/// For datetime axis, the [StaticDateTimeTickProviderSpec] can be used by -/// passing in a list of ticks defined with [TickSpec] of datetime. -class StaticallyProvidedTicks extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StaticallyProvidedTicks(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory StaticallyProvidedTicks.withSampleData() { - return StaticallyProvidedTicks( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StaticallyProvidedTicks.withRandomData() { - return StaticallyProvidedTicks(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2014', random.nextInt(100) * 100), - OrdinalSales('2015', random.nextInt(100) * 100), - OrdinalSales('2016', random.nextInt(100) * 100), - OrdinalSales('2017', random.nextInt(100) * 100), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // Create the ticks to be used the domain axis. - final staticTicks = [ - const charts.TickSpec( - // Value must match the domain value. - '2014', - // Optional label for this tick, defaults to domain value if not set. - label: 'Year 2014', - // The styling for this tick. - style: charts.TextStyleSpec( - color: charts.Color(r: 0x4C, g: 0xAF, b: 0x50))), - // If no text style is specified - the style from renderSpec will be used - // if one is specified. - const charts.TickSpec('2015'), - const charts.TickSpec('2016'), - const charts.TickSpec('2017'), - ]; - - return charts.BarChart( - seriesList, - animate: animate, - domainAxis: charts.OrdinalAxisSpec( - tickProviderSpec: charts.StaticOrdinalTickProviderSpec(staticTicks)), - ); - } - - /// Create series list with single series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2014', 5000), - OrdinalSales('2015', 25000), - OrdinalSales('2016', 100000), - OrdinalSales('2017', 750000), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/bar_gallery.dart b/web/charts/lib/bar_chart/bar_gallery.dart deleted file mode 100644 index caf9b302b..000000000 --- a/web/charts/lib/bar_chart/bar_gallery.dart +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'custom_rounded_bars.dart'; -import 'grouped.dart'; -import 'grouped_fill_color.dart'; -import 'grouped_single_target_line.dart'; -import 'grouped_stacked.dart'; -import 'grouped_stacked_weight_pattern.dart'; -import 'grouped_target_line.dart'; -import 'horizontal.dart'; -import 'horizontal_bar_label.dart'; -import 'horizontal_bar_label_custom.dart'; -import 'horizontal_pattern_forward_hatch.dart'; -import 'pattern_forward_hatch.dart'; -import 'simple.dart'; -import 'stacked.dart'; -import 'stacked_fill_color.dart'; -import 'stacked_horizontal.dart'; -import 'stacked_target_line.dart'; -import 'spark_bar.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Simple Bar Chart', - subtitle: 'Simple bar chart with a single series', - childBuilder: () => SimpleBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Stacked Bar Chart', - subtitle: 'Stacked bar chart with multiple series', - childBuilder: () => StackedBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Grouped Bar Chart', - subtitle: 'Grouped bar chart with multiple series', - childBuilder: () => GroupedBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Grouped Stacked Bar Chart', - subtitle: 'Grouped and stacked bar chart with multiple series', - childBuilder: () => GroupedStackedBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Grouped Bar Target Line Chart', - subtitle: 'Grouped bar target line chart with multiple series', - childBuilder: () => GroupedBarTargetLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Grouped Bar Single Target Line Chart', - subtitle: - 'Grouped bar target line chart with multiple series and a single target', - childBuilder: () => GroupedBarSingleTargetLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Stacked Bar Target Line Chart', - subtitle: 'Stacked bar target line chart with multiple series', - childBuilder: () => StackedBarTargetLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: Transform.rotate( - angle: 1.5708, child: const Icon(Icons.insert_chart)), - title: 'Horizontal Bar Chart', - subtitle: 'Horizontal bar chart with a single series', - childBuilder: () => HorizontalBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: Transform.rotate( - angle: 1.5708, child: const Icon(Icons.insert_chart)), - title: 'Stacked Horizontal Bar Chart', - subtitle: 'Stacked horizontal bar chart with multiple series', - childBuilder: () => StackedHorizontalBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: Transform.rotate( - angle: 1.5708, child: const Icon(Icons.insert_chart)), - title: 'Horizontal Bar Chart with Bar Labels', - subtitle: 'Horizontal bar chart with a single series and bar labels', - childBuilder: () => HorizontalBarLabelChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: Transform.rotate( - angle: 1.5708, child: const Icon(Icons.insert_chart)), - title: 'Horizontal Bar Chart with Custom Bar Labels', - subtitle: 'Bar labels with customized styling', - childBuilder: () => HorizontalBarLabelCustomChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Spark Bar Chart', - subtitle: 'Spark Bar Chart', - childBuilder: () => SparkBar.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Grouped Fill Color Bar Chart', - subtitle: 'Grouped bar chart with fill colors', - childBuilder: () => GroupedFillColorBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Stacked Fill Color Bar Chart', - subtitle: 'Stacked bar chart with fill colors', - childBuilder: () => StackedFillColorBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Pattern Forward Hatch Bar Chart', - subtitle: 'Pattern Forward Hatch Bar Chart', - childBuilder: () => PatternForwardHatchBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: Transform.rotate( - angle: 1.5708, child: const Icon(Icons.insert_chart)), - title: 'Horizontal Pattern Forward Hatch Bar Chart', - subtitle: 'Horizontal Pattern Forward Hatch Bar Chart', - childBuilder: () => - HorizontalPatternForwardHatchBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Weight Pattern Bar Chart', - subtitle: 'Grouped and stacked bar chart with a weight pattern', - childBuilder: () => GroupedStackedWeightPatternBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Bar Chart with custom bar radius', - subtitle: 'Custom rounded bar corners', - childBuilder: () => CustomRoundedBars.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/bar_chart/custom_rounded_bars.dart b/web/charts/lib/bar_chart/custom_rounded_bars.dart deleted file mode 100644 index 7f0a755fc..000000000 --- a/web/charts/lib/bar_chart/custom_rounded_bars.dart +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class CustomRoundedBars extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const CustomRoundedBars(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with custom rounded bars. - factory CustomRoundedBars.withSampleData() { - return CustomRoundedBars( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory CustomRoundedBars.withRandomData() { - return CustomRoundedBars(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - defaultRenderer: charts.BarRendererConfig( - // By default, bar renderer will draw rounded bars with a constant - // radius of 30. - // To not have any rounded corners, use [NoCornerStrategy] - // To change the radius of the bars, use [ConstCornerStrategy] - cornerStrategy: const charts.ConstCornerStrategy(30)), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/grouped.dart b/web/charts/lib/bar_chart/grouped.dart deleted file mode 100644 index db7357983..000000000 --- a/web/charts/lib/bar_chart/grouped.dart +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class GroupedBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GroupedBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory GroupedBarChart.withSampleData() { - return GroupedBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GroupedBarChart.withRandomData() { - return GroupedBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/grouped_fill_color.dart b/web/charts/lib/bar_chart/grouped_fill_color.dart deleted file mode 100644 index 887deaddd..000000000 --- a/web/charts/lib/bar_chart/grouped_fill_color.dart +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of a grouped bar chart with three series, each rendered with -/// different fill colors. -class GroupedFillColorBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GroupedFillColorBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory GroupedFillColorBarChart.withSampleData() { - return GroupedFillColorBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GroupedFillColorBarChart.withRandomData() { - return GroupedFillColorBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - // Blue bars with a lighter center color. - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - fillColorFn: (_, __) => - charts.MaterialPalette.blue.shadeDefault.lighter, - ), - // Solid red bars. Fill color will default to the series color if no - // fillColorFn is configured. - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - ), - // Hollow green bars. - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - fillColorFn: (_, __) => charts.MaterialPalette.transparent, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - // Configure a stroke width to enable borders on the bars. - defaultRenderer: charts.BarRendererConfig( - groupingType: charts.BarGroupingType.grouped, strokeWidthPx: 2.0), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 50), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - // Blue bars with a lighter center color. - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - fillColorFn: (_, __) => - charts.MaterialPalette.blue.shadeDefault.lighter, - ), - // Solid red bars. Fill color will default to the series color if no - // fillColorFn is configured. - charts.Series( - id: 'Tablet', - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - ), - // Hollow green bars. - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - fillColorFn: (_, __) => charts.MaterialPalette.transparent, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/grouped_single_target_line.dart b/web/charts/lib/bar_chart/grouped_single_target_line.dart deleted file mode 100644 index fc767e1e8..000000000 --- a/web/charts/lib/bar_chart/grouped_single_target_line.dart +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class GroupedBarSingleTargetLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GroupedBarSingleTargetLineChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - factory GroupedBarSingleTargetLineChart.withSampleData() { - return GroupedBarSingleTargetLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GroupedBarSingleTargetLineChart.withRandomData() { - return GroupedBarSingleTargetLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final targetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData), - charts.Series( - id: 'Desktop Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: targetLineData) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart(seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - customSeriesRenderers: [ - charts.BarTargetLineRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customTargetLine', - groupingType: charts.BarGroupingType.grouped) - ]); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final targetLineData = [ - OrdinalSales('2014', 30), - OrdinalSales('2015', 55), - OrdinalSales('2016', 15), - OrdinalSales('2017', 25), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData), - charts.Series( - id: 'Desktop Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: targetLineData) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/grouped_stacked.dart b/web/charts/lib/bar_chart/grouped_stacked.dart deleted file mode 100644 index 98cfa51f6..000000000 --- a/web/charts/lib/bar_chart/grouped_stacked.dart +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a bar chart with grouped, stacked series oriented vertically. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class GroupedStackedBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GroupedStackedBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory GroupedStackedBarChart.withSampleData() { - return GroupedStackedBarChart( - createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GroupedStackedBarChart.withRandomData() { - return GroupedStackedBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final desktopSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataA, - ), - charts.Series( - id: 'Tablet A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataA, - ), - charts.Series( - id: 'Mobile A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataA, - ), - charts.Series( - id: 'Desktop B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataB, - ), - charts.Series( - id: 'Tablet B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataB, - ), - charts.Series( - id: 'Mobile B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataB, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.groupedStacked, - ); - } - - /// Create series list with multiple series - static List> createSampleData() { - final desktopSalesDataA = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesDataA = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesDataA = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final desktopSalesDataB = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesDataB = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesDataB = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataA, - ), - charts.Series( - id: 'Tablet A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataA, - ), - charts.Series( - id: 'Mobile A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataA, - ), - charts.Series( - id: 'Desktop B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataB, - ), - charts.Series( - id: 'Tablet B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataB, - ), - charts.Series( - id: 'Mobile B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataB, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/grouped_stacked_weight_pattern.dart b/web/charts/lib/bar_chart/grouped_stacked_weight_pattern.dart deleted file mode 100644 index 263a324a1..000000000 --- a/web/charts/lib/bar_chart/grouped_stacked_weight_pattern.dart +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a bar chart with grouped, stacked series oriented vertically with -/// a custom weight pattern. -/// -/// This is a pattern of weights used to calculate the width of bars within a -/// bar group. If not specified, each bar in the group will have an equal width. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class GroupedStackedWeightPatternBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GroupedStackedWeightPatternBarChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - factory GroupedStackedWeightPatternBarChart.withSampleData() { - return GroupedStackedWeightPatternBarChart( - createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GroupedStackedWeightPatternBarChart.withRandomData() { - return GroupedStackedWeightPatternBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final desktopSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataA, - ), - charts.Series( - id: 'Tablet A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataA, - ), - charts.Series( - id: 'Mobile A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataA, - ), - charts.Series( - id: 'Desktop B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataB, - ), - charts.Series( - id: 'Tablet B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataB, - ), - charts.Series( - id: 'Mobile B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataB, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - // Configure the bar renderer in grouped stacked rendering mode with a - // custom weight pattern. - // - // The first stack of bars in each group is configured to be twice as wide - // as the second stack of bars in each group. - defaultRenderer: charts.BarRendererConfig( - groupingType: charts.BarGroupingType.groupedStacked, - weightPattern: [2, 1], - ), - ); - } - - /// Create series list with multiple series - static List> createSampleData() { - final desktopSalesDataA = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesDataA = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesDataA = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final desktopSalesDataB = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesDataB = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesDataB = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataA, - ), - charts.Series( - id: 'Tablet A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataA, - ), - charts.Series( - id: 'Mobile A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataA, - ), - charts.Series( - id: 'Desktop B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataB, - ), - charts.Series( - id: 'Tablet B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataB, - ), - charts.Series( - id: 'Mobile B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataB, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/grouped_target_line.dart b/web/charts/lib/bar_chart/grouped_target_line.dart deleted file mode 100644 index a3ba85104..000000000 --- a/web/charts/lib/bar_chart/grouped_target_line.dart +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class GroupedBarTargetLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GroupedBarTargetLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory GroupedBarTargetLineChart.withSampleData() { - return GroupedBarTargetLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GroupedBarTargetLineChart.withRandomData() { - return GroupedBarTargetLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final desktopTargetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableTargetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileTargetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Desktop Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Tablet Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Mobile Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart(seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - customSeriesRenderers: [ - charts.BarTargetLineRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customTargetLine', - groupingType: charts.BarGroupingType.grouped) - ]); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final desktopTargetLineData = [ - OrdinalSales('2014', 4), - OrdinalSales('2015', 20), - OrdinalSales('2016', 80), - OrdinalSales('2017', 65), - ]; - - final tableTargetLineData = [ - OrdinalSales('2014', 30), - OrdinalSales('2015', 55), - OrdinalSales('2016', 15), - OrdinalSales('2017', 25), - ]; - - final mobileTargetLineData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 5), - OrdinalSales('2016', 45), - OrdinalSales('2017', 35), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Desktop Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Tablet Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Mobile Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/horizontal.dart b/web/charts/lib/bar_chart/horizontal.dart deleted file mode 100644 index 18bc6cc0b..000000000 --- a/web/charts/lib/bar_chart/horizontal.dart +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Horizontal bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class HorizontalBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const HorizontalBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory HorizontalBarChart.withSampleData() { - return HorizontalBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory HorizontalBarChart.withRandomData() { - return HorizontalBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // For horizontal bar charts, set the [vertical] flag to false. - return charts.BarChart( - seriesList, - animate: animate, - vertical: false, - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/horizontal_bar_label.dart b/web/charts/lib/bar_chart/horizontal_bar_label.dart deleted file mode 100644 index af5e38516..000000000 --- a/web/charts/lib/bar_chart/horizontal_bar_label.dart +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Horizontal bar chart with bar label renderer example and hidden domain axis. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class HorizontalBarLabelChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const HorizontalBarLabelChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory HorizontalBarLabelChart.withSampleData() { - return HorizontalBarLabelChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory HorizontalBarLabelChart.withRandomData() { - return HorizontalBarLabelChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the bar label. - labelAccessorFn: (OrdinalSales sales, _) => - '${sales.year}: \$${sales.sales.toString()}') - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - // [BarLabelDecorator] will automatically position the label - // inside the bar if the label will fit. If the label will not fit and the - // area outside of the bar is larger than the bar, it will draw outside of the - // bar. Labels can always display inside or outside using [LabelPosition]. - // - // Text style for inside / outside can be controlled independently by setting - // [insideLabelStyleSpec] and [outsideLabelStyleSpec]. - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - vertical: false, - // Set a bar label decorator. - // Example configuring different styles for inside/outside: - // barRendererDecorator: new charts.BarLabelDecorator( - // insideLabelStyleSpec: new charts.TextStyleSpec(...), - // outsideLabelStyleSpec: new charts.TextStyleSpec(...)), - barRendererDecorator: charts.BarLabelDecorator(), - // Hide domain axis. - domainAxis: - const charts.OrdinalAxisSpec(renderSpec: charts.NoneRenderSpec()), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the bar label. - labelAccessorFn: (OrdinalSales sales, _) => - '${sales.year}: \$${sales.sales.toString()}') - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/horizontal_bar_label_custom.dart b/web/charts/lib/bar_chart/horizontal_bar_label_custom.dart deleted file mode 100644 index f84332670..000000000 --- a/web/charts/lib/bar_chart/horizontal_bar_label_custom.dart +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Horizontal bar chart with custom style for each datum in the bar label. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class HorizontalBarLabelCustomChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const HorizontalBarLabelCustomChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - static HorizontalBarLabelCustomChart createWithSampleData() { - return HorizontalBarLabelCustomChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory HorizontalBarLabelCustomChart.withRandomData() { - return HorizontalBarLabelCustomChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the bar label. - labelAccessorFn: (OrdinalSales sales, _) => - '${sales.year}: \$${sales.sales.toString()}', - insideLabelStyleAccessorFn: (OrdinalSales sales, _) { - final color = (sales.year == '2014') - ? charts.MaterialPalette.red.shadeDefault - : charts.MaterialPalette.yellow.shadeDefault.darker; - return charts.TextStyleSpec(color: color); - }, - outsideLabelStyleAccessorFn: (OrdinalSales sales, _) { - final color = (sales.year == '2014') - ? charts.MaterialPalette.red.shadeDefault - : charts.MaterialPalette.yellow.shadeDefault.darker; - return charts.TextStyleSpec(color: color); - }, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - // The [BarLabelDecorator] has settings to set the text style for all labels - // for inside the bar and outside the bar. To be able to control each datum's - // style, set the style accessor functions on the series. - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - vertical: false, - barRendererDecorator: charts.BarLabelDecorator(), - // Hide domain axis. - domainAxis: - const charts.OrdinalAxisSpec(renderSpec: charts.NoneRenderSpec()), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the bar label. - labelAccessorFn: (OrdinalSales sales, _) => - '${sales.year}: \$${sales.sales.toString()}', - insideLabelStyleAccessorFn: (OrdinalSales sales, _) { - final color = (sales.year == '2014') - ? charts.MaterialPalette.red.shadeDefault - : charts.MaterialPalette.yellow.shadeDefault.darker; - return charts.TextStyleSpec(color: color); - }, - outsideLabelStyleAccessorFn: (OrdinalSales sales, _) { - final color = (sales.year == '2014') - ? charts.MaterialPalette.red.shadeDefault - : charts.MaterialPalette.yellow.shadeDefault.darker; - return charts.TextStyleSpec(color: color); - }, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/horizontal_pattern_forward_hatch.dart b/web/charts/lib/bar_chart/horizontal_pattern_forward_hatch.dart deleted file mode 100644 index fdb05814e..000000000 --- a/web/charts/lib/bar_chart/horizontal_pattern_forward_hatch.dart +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Forward pattern hatch bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Forward hatch pattern horizontal bar chart example. -/// -/// The second series of bars is rendered with a pattern by defining a -/// fillPatternFn mapping function. -class HorizontalPatternForwardHatchBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const HorizontalPatternForwardHatchBarChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - factory HorizontalPatternForwardHatchBarChart.withSampleData() { - return HorizontalPatternForwardHatchBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory HorizontalPatternForwardHatchBarChart.withRandomData() { - return HorizontalPatternForwardHatchBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - fillPatternFn: (OrdinalSales sales, _) => - charts.FillPatternType.forwardHatch, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - vertical: false, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - fillPatternFn: (OrdinalSales sales, _) => - charts.FillPatternType.forwardHatch, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/pattern_forward_hatch.dart b/web/charts/lib/bar_chart/pattern_forward_hatch.dart deleted file mode 100644 index 1ac515099..000000000 --- a/web/charts/lib/bar_chart/pattern_forward_hatch.dart +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Forward hatch pattern bar chart example. -/// -/// The second series of bars is rendered with a pattern by defining a -/// fillPatternFn mapping function. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class PatternForwardHatchBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PatternForwardHatchBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory PatternForwardHatchBarChart.withSampleData() { - return PatternForwardHatchBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PatternForwardHatchBarChart.withRandomData() { - return PatternForwardHatchBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - fillPatternFn: (OrdinalSales sales, _) => - charts.FillPatternType.forwardHatch, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - fillPatternFn: (OrdinalSales sales, _) => - charts.FillPatternType.forwardHatch, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/simple.dart b/web/charts/lib/bar_chart/simple.dart deleted file mode 100644 index 4f90aaa1c..000000000 --- a/web/charts/lib/bar_chart/simple.dart +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimpleBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory SimpleBarChart.withSampleData() { - return SimpleBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleBarChart.withRandomData() { - return SimpleBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/spark_bar.dart b/web/charts/lib/bar_chart/spark_bar.dart deleted file mode 100644 index abac92cf5..000000000 --- a/web/charts/lib/bar_chart/spark_bar.dart +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Spark Bar Example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of a Spark Bar by hiding both axis, reducing the chart margins. -class SparkBar extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SparkBar(this.seriesList, {this.animate, Key? key}) : super(key: key); - - factory SparkBar.withSampleData() { - return SparkBar( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SparkBar.withRandomData() { - return SparkBar(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final globalSalesData = [ - OrdinalSales('2007', random.nextInt(100)), - OrdinalSales('2008', random.nextInt(100)), - OrdinalSales('2009', random.nextInt(100)), - OrdinalSales('2010', random.nextInt(100)), - OrdinalSales('2011', random.nextInt(100)), - OrdinalSales('2012', random.nextInt(100)), - OrdinalSales('2013', random.nextInt(100)), - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - - /// Assign a custom style for the measure axis. - /// - /// The NoneRenderSpec only draws an axis line (and even that can be hidden - /// with showAxisLine=false). - primaryMeasureAxis: - const charts.NumericAxisSpec(renderSpec: charts.NoneRenderSpec()), - - /// This is an OrdinalAxisSpec to match up with BarChart's default - /// ordinal domain axis (use NumericAxisSpec or DateTimeAxisSpec for - /// other charts). - domainAxis: const charts.OrdinalAxisSpec( - // Make sure that we draw the domain axis line. - showAxisLine: true, - // But don't draw anything else. - renderSpec: charts.NoneRenderSpec()), - - // With a spark chart we likely don't want large chart margins. - // 1px is the smallest we can make each margin. - layoutConfig: charts.LayoutConfig( - leftMarginSpec: charts.MarginSpec.fixedPixel(0), - topMarginSpec: charts.MarginSpec.fixedPixel(0), - rightMarginSpec: charts.MarginSpec.fixedPixel(0), - bottomMarginSpec: charts.MarginSpec.fixedPixel(0)), - ); - } - - /// Create series list with single series - static List> _createSampleData() { - final globalSalesData = [ - OrdinalSales('2007', 3100), - OrdinalSales('2008', 3500), - OrdinalSales('2009', 5000), - OrdinalSales('2010', 2500), - OrdinalSales('2011', 3200), - OrdinalSales('2012', 4500), - OrdinalSales('2013', 4400), - OrdinalSales('2014', 5000), - OrdinalSales('2015', 5000), - OrdinalSales('2016', 4500), - OrdinalSales('2017', 4300), - ]; - - return [ - charts.Series( - id: 'Global Revenue', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: globalSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/stacked.dart b/web/charts/lib/bar_chart/stacked.dart deleted file mode 100644 index 44ffb0394..000000000 --- a/web/charts/lib/bar_chart/stacked.dart +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class StackedBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a stacked [BarChart] with sample data and no transition. - factory StackedBarChart.withSampleData() { - return StackedBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedBarChart.withRandomData() { - return StackedBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.stacked, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/stacked_fill_color.dart b/web/charts/lib/bar_chart/stacked_fill_color.dart deleted file mode 100644 index 772221dfa..000000000 --- a/web/charts/lib/bar_chart/stacked_fill_color.dart +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example of a stacked bar chart with three series, each rendered with -/// different fill colors. -class StackedFillColorBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedFillColorBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory StackedFillColorBarChart.withSampleData() { - return StackedFillColorBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedFillColorBarChart.withRandomData() { - return StackedFillColorBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - // Blue bars with a lighter center color. - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - fillColorFn: (_, __) => - charts.MaterialPalette.blue.shadeDefault.lighter, - ), - // Solid red bars. Fill color will default to the series color if no - // fillColorFn is configured. - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - ), - // Hollow green bars. - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - fillColorFn: (_, __) => charts.MaterialPalette.transparent, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - // Configure a stroke width to enable borders on the bars. - defaultRenderer: charts.BarRendererConfig( - groupingType: charts.BarGroupingType.stacked, strokeWidthPx: 2.0), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 50), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - // Blue bars with a lighter center color. - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - fillColorFn: (_, __) => - charts.MaterialPalette.blue.shadeDefault.lighter, - ), - // Solid red bars. Fill color will default to the series color if no - // fillColorFn is configured. - charts.Series( - id: 'Tablet', - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - ), - // Hollow green bars. - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - fillColorFn: (_, __) => charts.MaterialPalette.transparent, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/stacked_horizontal.dart b/web/charts/lib/bar_chart/stacked_horizontal.dart deleted file mode 100644 index 30c557e9c..000000000 --- a/web/charts/lib/bar_chart/stacked_horizontal.dart +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class StackedHorizontalBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedHorizontalBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a stacked [BarChart] with sample data and no transition. - factory StackedHorizontalBarChart.withSampleData() { - return StackedHorizontalBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedHorizontalBarChart.withRandomData() { - return StackedHorizontalBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // For horizontal bar charts, set the [vertical] flag to false. - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.stacked, - vertical: false, - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/bar_chart/stacked_target_line.dart b/web/charts/lib/bar_chart/stacked_target_line.dart deleted file mode 100644 index 832059cad..000000000 --- a/web/charts/lib/bar_chart/stacked_target_line.dart +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class StackedBarTargetLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedBarTargetLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a stacked [BarChart] with sample data and no transition. - factory StackedBarTargetLineChart.withSampleData() { - return StackedBarTargetLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedBarTargetLineChart.withRandomData() { - return StackedBarTargetLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final desktopTargetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableTargetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileTargetLineData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Desktop Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Tablet Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Mobile Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart(seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.stacked, - customSeriesRenderers: [ - charts.BarTargetLineRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customTargetLine', - groupingType: charts.BarGroupingType.stacked) - ]); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final desktopTargetLineData = [ - OrdinalSales('2014', 4), - OrdinalSales('2015', 20), - OrdinalSales('2016', 80), - OrdinalSales('2017', 65), - ]; - - final tableTargetLineData = [ - OrdinalSales('2014', 30), - OrdinalSales('2015', 55), - OrdinalSales('2016', 15), - OrdinalSales('2017', 25), - ]; - - final mobileTargetLineData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 5), - OrdinalSales('2016', 45), - OrdinalSales('2017', 35), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Desktop Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Tablet Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - charts.Series( - id: 'Mobile Target Line', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileTargetLineData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customTargetLine'), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/behaviors_gallery.dart b/web/charts/lib/behaviors/behaviors_gallery.dart deleted file mode 100644 index 94e3fc615..000000000 --- a/web/charts/lib/behaviors/behaviors_gallery.dart +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'chart_title.dart'; -import 'initial_hint_animation.dart'; -import 'initial_selection.dart'; -import 'percent_of_domain.dart'; -import 'percent_of_domain_by_category.dart'; -import 'percent_of_series.dart'; -import 'selection_bar_highlight.dart'; -import 'selection_line_highlight.dart'; -import 'selection_line_highlight_custom_shape.dart'; -import 'selection_callback_example.dart'; -import 'selection_scatter_plot_highlight.dart'; -import 'selection_user_managed.dart'; -import 'slider.dart'; -import 'sliding_viewport_on_selection.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Selection Bar Highlight', - subtitle: 'Simple bar chart with tap activation', - childBuilder: () => SelectionBarHighlight.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Selection Line Highlight', - subtitle: 'Line chart with tap and drag activation', - childBuilder: () => SelectionLineHighlight.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Selection Line Highlight Custom Shape', - subtitle: 'Line chart with tap and drag activation and a custom shape', - childBuilder: () => SelectionLineHighlightCustomShape.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Selection Scatter Plot Highlight', - subtitle: 'Scatter plot chart with tap and drag activation', - childBuilder: () => SelectionScatterPlotHighlight.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Selection Callback Example', - subtitle: 'Timeseries that updates external components on selection', - childBuilder: () => SelectionCallbackExample.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'User managed selection', - subtitle: - 'Example where selection can be set and cleared programmatically', - childBuilder: () => SelectionUserManaged.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Bar Chart with initial selection', - subtitle: 'Single series with initial selection', - childBuilder: () => InitialSelection.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Line Chart with Chart Titles', - subtitle: 'Line chart with four chart titles', - childBuilder: () => ChartTitleLine.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'Line Chart with Slider', - subtitle: 'Line chart with a slider behavior', - childBuilder: () => SliderLine.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Percent of Domain', - subtitle: - 'Stacked bar chart with measures calculated as percent of ' 'domain', - childBuilder: () => PercentOfDomainBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Percent of Domain by Category', - subtitle: 'Grouped stacked bar chart with measures calculated as ' - 'percent of domain and series category', - childBuilder: () => PercentOfDomainByCategoryBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Percent of Series', - subtitle: - 'Grouped bar chart with measures calculated as percent of ' 'series', - childBuilder: () => PercentOfSeriesBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Sliding viewport on domain selection', - subtitle: 'Center viewport on selected domain', - childBuilder: () => SlidingViewportOnSelection.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Initial hint animation ', - subtitle: 'Animate into final viewport', - childBuilder: () => InitialHintAnimation.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/behaviors/chart_title.dart b/web/charts/lib/behaviors/chart_title.dart deleted file mode 100644 index f1daa3faf..000000000 --- a/web/charts/lib/behaviors/chart_title.dart +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -/// This is a line chart with a title text in every margin. -/// -/// A series of [ChartTitle] behaviors are used to render titles, one per -/// margin. -class ChartTitleLine extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const ChartTitleLine(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory ChartTitleLine.withSampleData() { - return ChartTitleLine( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory ChartTitleLine.withRandomData() { - return ChartTitleLine(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart( - seriesList, - animate: animate, - // Configures four [ChartTitle] behaviors to render titles in each chart - // margin. The top title has a sub-title, and is aligned to the left edge - // of the chart. The other titles are aligned with the middle of the draw - // area. - behaviors: [ - charts.ChartTitle('Top title text', - subTitle: 'Top sub-title text', - behaviorPosition: charts.BehaviorPosition.top, - titleOutsideJustification: charts.OutsideJustification.start, - // Set a larger inner padding than the default (10) to avoid - // rendering the text too close to the top measure axis tick label. - // The top tick label may extend upwards into the top margin region - // if it is located at the top of the draw area. - innerPadding: 18), - charts.ChartTitle('Bottom title text', - behaviorPosition: charts.BehaviorPosition.bottom, - titleOutsideJustification: - charts.OutsideJustification.middleDrawArea), - charts.ChartTitle('Start title', - behaviorPosition: charts.BehaviorPosition.start, - titleOutsideJustification: - charts.OutsideJustification.middleDrawArea), - charts.ChartTitle('End title', - behaviorPosition: charts.BehaviorPosition.end, - titleOutsideJustification: - charts.OutsideJustification.middleDrawArea), - ], - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/initial_hint_animation.dart b/web/charts/lib/behaviors/initial_hint_animation.dart deleted file mode 100644 index 65827ae55..000000000 --- a/web/charts/lib/behaviors/initial_hint_animation.dart +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of initial hint animation behavior. -/// -/// To see the animation, please run the example app and select -/// "Initial hint animation". -/// -/// This behavior is intended to be used with charts that also have pan/zoom -/// behaviors added and/or the initial viewport set in [AxisSpec]. -/// -/// Adding this behavior will cause the chart to animate from a scale and/or -/// offset of the desired final viewport. If the user taps the widget prior -/// to the animation being completed, animation will stop. -/// -/// [maxHintScaleFactor] is the amount the domain axis will be scaled at the -/// start of te hint. By default, this is null, indicating that there will be -/// no scale factor hint. A value of 1.0 means the viewport is showing all -/// domains in the viewport. If a value is provided, it cannot be less than 1.0. -/// -/// [maxHintTranslate] is the amount of ordinal values to translate the viewport -/// from the desired initial viewport. Currently only works for ordinal axis. -/// -/// In this example, the series list has ordinal data from year 2014 to 2030, -/// and we have the initial viewport set to start at 2018 that shows 4 values by -/// specifying an [OrdinalViewport] in [OrdinalAxisSpec]. We can add the hint -/// animation by adding behavior [InitialHintBehavior] with [maxHintTranslate] -/// of 4. When the chart is drawn for the first time, the viewport will show -/// 2022 as the first value and the viewport will animate by panning values to -/// the right until 2018 is the first value in the viewport. - -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class InitialHintAnimation extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const InitialHintAnimation(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory InitialHintAnimation.withSampleData() { - return InitialHintAnimation( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory InitialHintAnimation.withRandomData() { - return InitialHintAnimation(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - OrdinalSales('2018', random.nextInt(100)), - OrdinalSales('2019', random.nextInt(100)), - OrdinalSales('2020', random.nextInt(100)), - OrdinalSales('2021', random.nextInt(100)), - OrdinalSales('2022', random.nextInt(100)), - OrdinalSales('2023', random.nextInt(100)), - OrdinalSales('2024', random.nextInt(100)), - OrdinalSales('2025', random.nextInt(100)), - OrdinalSales('2026', random.nextInt(100)), - OrdinalSales('2027', random.nextInt(100)), - OrdinalSales('2028', random.nextInt(100)), - OrdinalSales('2029', random.nextInt(100)), - OrdinalSales('2030', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - // Optionally turn off the animation that animates values up from the - // bottom of the domain axis. If animation is on, the bars will animate up - // and then animate to the final viewport. - animationDuration: Duration.zero, - // Set the initial viewport by providing a new AxisSpec with the - // desired viewport: a starting domain and the data size. - domainAxis: - charts.OrdinalAxisSpec(viewport: charts.OrdinalViewport('2018', 4)), - behaviors: [ - // Add this behavior to show initial hint animation that will pan to the - // final desired viewport. - // The duration of the animation can be adjusted by pass in - // [hintDuration]. By default this is 3000ms. - charts.InitialHintBehavior(maxHintTranslate: 4.0), - // Optionally add a pan or pan and zoom behavior. - // If pan/zoom is not added, the viewport specified remains the viewport - charts.PanAndZoomBehavior(), - ], - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - OrdinalSales('2018', 33), - OrdinalSales('2019', 80), - OrdinalSales('2020', 21), - OrdinalSales('2021', 77), - OrdinalSales('2022', 8), - OrdinalSales('2023', 12), - OrdinalSales('2024', 42), - OrdinalSales('2025', 70), - OrdinalSales('2026', 77), - OrdinalSales('2027', 55), - OrdinalSales('2028', 19), - OrdinalSales('2029', 66), - OrdinalSales('2030', 27), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/initial_selection.dart b/web/charts/lib/behaviors/initial_selection.dart deleted file mode 100644 index 4f3fed928..000000000 --- a/web/charts/lib/behaviors/initial_selection.dart +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of adding an initial selection behavior. -/// -/// This example adds initial selection to a bar chart, but any chart can use -/// the initial selection behavior. -/// -/// Initial selection is only set on the very first draw and will not be set -/// again in subsequent draws unless the behavior is reconfigured. -/// -/// The selection will remain on the chart unless another behavior is added -/// that updates the selection. - -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class InitialSelection extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const InitialSelection(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with initial selection behavior. - factory InitialSelection.withSampleData() { - return InitialSelection( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory InitialSelection.withRandomData() { - return InitialSelection(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - behaviors: [ - // Initial selection can be configured by passing in: - // - // A list of datum config, specified with series ID and domain value. - // A list of series config, which is a list of series ID(s). - // - // Initial selection can be applied to any chart type. - // - // [BarChart] by default includes behaviors [SelectNearest] and - // [DomainHighlighter]. So this behavior shows the initial selection - // highlighted and when another datum is tapped, the selection changes. - charts.InitialSelection(selectedDataConfig: [ - charts.SeriesDatumConfig('Sales', '2016') - ]) - ], - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/percent_of_domain.dart b/web/charts/lib/behaviors/percent_of_domain.dart deleted file mode 100644 index bdefa6292..000000000 --- a/web/charts/lib/behaviors/percent_of_domain.dart +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a percentage bar chart with stacked series oriented vertically. -/// -/// Each bar stack shows the percentage of each measure out of the total measure -/// value of the stack. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class PercentOfDomainBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PercentOfDomainBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a stacked [BarChart] with sample data and no transition. - factory PercentOfDomainBarChart.withSampleData() { - return PercentOfDomainBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PercentOfDomainBarChart.withRandomData() { - return PercentOfDomainBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.stacked, - // Configures a [PercentInjector] behavior that will calculate measure - // values as the percentage of the total of all data that shares a - // domain value. - behaviors: [ - charts.PercentInjector( - totalType: charts.PercentInjectorTotalType.domain) - ], - // Configure the axis spec to show percentage values. - primaryMeasureAxis: charts.PercentAxisSpec(), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/percent_of_domain_by_category.dart b/web/charts/lib/behaviors/percent_of_domain_by_category.dart deleted file mode 100644 index 86a519d3e..000000000 --- a/web/charts/lib/behaviors/percent_of_domain_by_category.dart +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a percentage bar chart with grouped, stacked series oriented -/// vertically. -/// -/// Each bar stack shows the percentage of each measure out of the total measure -/// value of the stack. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class PercentOfDomainByCategoryBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PercentOfDomainByCategoryBarChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - factory PercentOfDomainByCategoryBarChart.withSampleData() { - return PercentOfDomainByCategoryBarChart( - createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PercentOfDomainByCategoryBarChart.withRandomData() { - return PercentOfDomainByCategoryBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesDataA = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final desktopSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesDataB = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataA, - ), - charts.Series( - id: 'Tablet A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataA, - ), - charts.Series( - id: 'Mobile A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataA, - ), - charts.Series( - id: 'Desktop B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataB, - ), - charts.Series( - id: 'Tablet B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataB, - ), - charts.Series( - id: 'Mobile B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataB, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.groupedStacked, - // Configures a [PercentInjector] behavior that will calculate measure - // values as the percentage of the total of all data that shares both a - // domain and a series category. - // - // We use this option on a grouped stacked bar chart to ensure that the - // total value for each bar stack is 100%. A stacked bar chart that does - // not group by series category would use the "domain" option. - behaviors: [ - charts.PercentInjector( - totalType: charts.PercentInjectorTotalType.domainBySeriesCategory) - ], - // Configure the axis spec to show percentage values. - primaryMeasureAxis: charts.PercentAxisSpec(), - ); - } - - /// Create series list with multiple series - static List> createSampleData() { - final desktopSalesDataA = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesDataA = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesDataA = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final desktopSalesDataB = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesDataB = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesDataB = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - return [ - charts.Series( - id: 'Desktop A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataA, - ), - charts.Series( - id: 'Tablet A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataA, - ), - charts.Series( - id: 'Mobile A', - seriesCategory: 'A', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataA, - ), - charts.Series( - id: 'Desktop B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesDataB, - ), - charts.Series( - id: 'Tablet B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesDataB, - ), - charts.Series( - id: 'Mobile B', - seriesCategory: 'B', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesDataB, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/percent_of_series.dart b/web/charts/lib/behaviors/percent_of_series.dart deleted file mode 100644 index 70dd79cb0..000000000 --- a/web/charts/lib/behaviors/percent_of_series.dart +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a percentage bar chart which shows each bar as the percentage of -/// the total series measure value. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class PercentOfSeriesBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PercentOfSeriesBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a stacked [BarChart] with sample data and no transition. - factory PercentOfSeriesBarChart.withSampleData() { - return PercentOfSeriesBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PercentOfSeriesBarChart.withRandomData() { - return PercentOfSeriesBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // Configures a [PercentInjector] behavior that will calculate measure - // values as the percentage of the total of all data in its series. - behaviors: [ - charts.PercentInjector( - totalType: charts.PercentInjectorTotalType.series) - ], - // Configure the axis spec to show percentage values. - primaryMeasureAxis: charts.PercentAxisSpec(), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2011', 5), - OrdinalSales('2012', 25), - OrdinalSales('2013', 50), - OrdinalSales('2014', 75), - OrdinalSales('2015', 100), - OrdinalSales('2016', 125), - OrdinalSales('2017', 200), - OrdinalSales('2018', 150), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/selection_bar_highlight.dart b/web/charts/lib/behaviors/selection_bar_highlight.dart deleted file mode 100644 index ed6abc14b..000000000 --- a/web/charts/lib/behaviors/selection_bar_highlight.dart +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SelectionBarHighlight extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SelectionBarHighlight(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory SelectionBarHighlight.withSampleData() { - return SelectionBarHighlight( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SelectionBarHighlight.withRandomData() { - return SelectionBarHighlight(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // This is just a simple bar chart with optional property - // [defaultInteractions] set to true to include the default - // interactions/behaviors when building the chart. - // This includes bar highlighting. - // - // Note: defaultInteractions defaults to true. - // - // [defaultInteractions] can be set to false to avoid the default - // interactions. - return charts.BarChart( - seriesList, - animate: animate, - defaultInteractions: true, - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/selection_callback_example.dart b/web/charts/lib/behaviors/selection_callback_example.dart deleted file mode 100644 index 886a49de8..000000000 --- a/web/charts/lib/behaviors/selection_callback_example.dart +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Timeseries chart with example of updating external state based on selection. -/// -/// A SelectionModelConfig can be provided for each of the different -/// [SelectionModel] (currently info and action). -/// -/// [SelectionModelType.info] is the default selection chart exploration type -/// initiated by some tap event. This is a different model from -/// [SelectionModelType.action] which is typically used to select some value as -/// an input to some other UI component. This allows dual state of exploring -/// and selecting data via different touch events. -/// -/// See [SelectNearest] behavior on setting the different ways of triggering -/// [SelectionModel] updates from hover & click events. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SelectionCallbackExample extends StatefulWidget { - final List> seriesList; - final bool? animate; - - const SelectionCallbackExample(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [charts.TimeSeriesChart] with sample data and no transition. - factory SelectionCallbackExample.withSampleData() { - return SelectionCallbackExample( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SelectionCallbackExample.withRandomData() { - return SelectionCallbackExample(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final usData = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - final ukData = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'US Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: usData, - ), - charts.Series( - id: 'UK Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: ukData, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - // We need a Stateful widget to build the selection details with the current - // selection as the state. - @override - State createState() => _SelectionCallbackState(); - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final usData = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 78), - TimeSeriesSales(DateTime(2017, 10, 10), 54), - ]; - - final ukData = [ - TimeSeriesSales(DateTime(2017, 9, 19), 15), - TimeSeriesSales(DateTime(2017, 9, 26), 33), - TimeSeriesSales(DateTime(2017, 10, 3), 68), - TimeSeriesSales(DateTime(2017, 10, 10), 48), - ]; - - return [ - charts.Series( - id: 'US Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: usData, - ), - charts.Series( - id: 'UK Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: ukData, - ) - ]; - } -} - -class _SelectionCallbackState extends State { - DateTime? _time; - Map? _measures; - - // Listens to the underlying selection changes, and updates the information - // relevant to building the primitive legend like information under the - // chart. - _onSelectionChanged(charts.SelectionModel model) { - final selectedDatum = model.selectedDatum; - - DateTime? time; - final measures = {}; - - // We get the model that updated with a list of [SeriesDatum] which is - // simply a pair of series & datum. - // - // Walk the selection updating the measures map, storing off the sales and - // series name for each selection point. - if (selectedDatum.isNotEmpty) { - time = selectedDatum.first.datum.time; - for (var datumPair in selectedDatum) { - measures[datumPair.series.displayName] = datumPair.datum.sales; - } - } - - // Request a build. - setState(() { - _time = time; - _measures = measures; - }); - } - - @override - Widget build(BuildContext context) { - // The children consist of a Chart and Text widgets below to hold the info. - final children = [ - SizedBox( - height: 150.0, - child: charts.TimeSeriesChart( - widget.seriesList, - animate: widget.animate, - selectionModels: [ - charts.SelectionModelConfig( - type: charts.SelectionModelType.info, - changedListener: _onSelectionChanged, - ) - ], - )), - ]; - - // If there is a selection, then include the details. - if (_time != null) { - children.add(Padding( - padding: const EdgeInsets.only(top: 5.0), - child: Text(_time.toString()))); - } - _measures?.forEach((String? series, num? value) { - children.add(Text('$series: $value')); - }); - - return Column(children: children); - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/behaviors/selection_line_highlight.dart b/web/charts/lib/behaviors/selection_line_highlight.dart deleted file mode 100644 index b80e71b4f..000000000 --- a/web/charts/lib/behaviors/selection_line_highlight.dart +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SelectionLineHighlight extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SelectionLineHighlight(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory SelectionLineHighlight.withSampleData() { - return SelectionLineHighlight( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SelectionLineHighlight.withRandomData() { - return SelectionLineHighlight(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // This is just a simple line chart with a behavior that highlights the - // selected points along the lines. A point will be drawn at the selected - // datum's x,y coordinate, and a vertical follow line will be drawn through - // it. - // - // A [Charts.LinePointHighlighter] behavior is added manually to enable the - // highlighting effect. - // - // As an alternative, [defaultInteractions] can be set to true to include - // the default chart interactions, including a LinePointHighlighter. - return charts.LineChart(seriesList, animate: animate, behaviors: [ - // Optional - Configures a [LinePointHighlighter] behavior with a - // vertical follow line. A vertical follow line is included by - // default, but is shown here as an example configuration. - // - // By default, the line has default dash pattern of [1,3]. This can be - // set by providing a [dashPattern] or it can be turned off by passing in - // an empty list. An empty list is necessary because passing in a null - // value will be treated the same as not passing in a value at all. - charts.LinePointHighlighter( - showHorizontalFollowLine: - charts.LinePointHighlighterFollowLineType.none, - showVerticalFollowLine: - charts.LinePointHighlighterFollowLineType.nearest), - // Optional - By default, select nearest is configured to trigger - // with tap so that a user can have pan/zoom behavior and line point - // highlighter. Changing the trigger to tap and drag allows the - // highlighter to follow the dragging gesture but it is not - // recommended to be used when pan/zoom behavior is enabled. - charts.SelectNearest(eventTrigger: charts.SelectionTrigger.tapAndDrag) - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/selection_line_highlight_custom_shape.dart b/web/charts/lib/behaviors/selection_line_highlight_custom_shape.dart deleted file mode 100644 index e85e65f7f..000000000 --- a/web/charts/lib/behaviors/selection_line_highlight_custom_shape.dart +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SelectionLineHighlightCustomShape extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SelectionLineHighlightCustomShape(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory SelectionLineHighlightCustomShape.withSampleData() { - return SelectionLineHighlightCustomShape( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SelectionLineHighlightCustomShape.withRandomData() { - return SelectionLineHighlightCustomShape(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // This is a simple line chart with a behavior that highlights hovered - // lines. A hollow rectangular shape will be drawn at the hovered datum's - // x,y coordinate, and a vertical follow line will be drawn through it. - // - // A [Charts.LinePointHighlighter] behavior is added manually to enable the - // highlighting effect. - // - // As an alternative, [defaultInteractions] can be set to true to include - // the default chart interactions, including a LinePointHighlighter. - return charts.LineChart(seriesList, animate: animate, behaviors: [ - // Optional - Configures a [LinePointHighlighter] behavior with a - // vertical follow line. A vertical follow line is included by - // default, but is shown here as an example configuration. - // - // By default, the line has default dash pattern of [1,3]. This can be - // set by providing a [dashPattern] or it can be turned off by passing in - // an empty list. An empty list is necessary because passing in a null - // value will be treated the same as not passing in a value at all. - // - // The symbol renderer is configured to render a hollow shape, for - // demonstration. - charts.LinePointHighlighter( - showHorizontalFollowLine: - charts.LinePointHighlighterFollowLineType.none, - showVerticalFollowLine: - charts.LinePointHighlighterFollowLineType.nearest, - symbolRenderer: charts.RectSymbolRenderer(isSolid: false)), - // Optional - By default, select nearest is configured to trigger - // with tap so that a user can have pan/zoom behavior and line point - // highlighter. Changing the trigger to tap and drag allows the - // highlighter to follow the dragging gesture but it is not - // recommended to be used when pan/zoom behavior is enabled. - charts.SelectNearest(eventTrigger: charts.SelectionTrigger.tapAndDrag) - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/selection_scatter_plot_highlight.dart b/web/charts/lib/behaviors/selection_scatter_plot_highlight.dart deleted file mode 100644 index 5afe543a9..000000000 --- a/web/charts/lib/behaviors/selection_scatter_plot_highlight.dart +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a scatter plot chart using custom symbols for the points and a -/// behavior that highlights selected points. -/// -/// An optional [charts.LinePointHighlighter] behavior has been added to enable -/// a highlighting effect. This behavior will draw a larger symbol on top of the -/// point nearest to the point where a user taps on the chart. It will also draw -/// follow lines. -/// -/// The series has been configured to draw each point as a square by default. -/// -/// Some data will be drawn as a circle, indicated by defining a custom "circle" -/// value referenced by [charts.pointSymbolRendererFnKey]. -/// -/// Some other data have will be drawn as a hollow circle. In addition to the -/// custom renderer key, these data also have stroke and fillColor values -/// defined. Configuring a separate fillColor will cause the center of the shape -/// to be filled in, with white in these examples. The border of the shape will -/// be color with the color of the data. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SelectionScatterPlotHighlight extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SelectionScatterPlotHighlight(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory SelectionScatterPlotHighlight.withSampleData() { - return SelectionScatterPlotHighlight( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SelectionScatterPlotHighlight.withRandomData() { - return SelectionScatterPlotHighlight(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - makeRadius(int value) => (random.nextInt(value) + 2).toDouble(); - - final data = [ - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), - 'circle', null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - // Render a hollow circle, filled in with white. - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(4) + 4, - 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), - 'circle', null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - // Render a hollow circle, filled in with white. - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(4) + 4, - 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - // Render a hollow square, filled in with white. - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(4) + 4, - null, charts.MaterialPalette.white, 2.0), - ]; - - const maxMeasure = 100; - - return [ - charts.Series( - id: 'Sales', - colorFn: (LinearSales sales, _) { - // Color bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - fillColorFn: (LinearSales row, _) => row.fillColor, - strokeWidthPxFn: (LinearSales row, _) => row.strokeWidth, - data: data, - ) - // Accessor function that associates each datum with a symbol renderer. - ..setAttribute( - charts.pointSymbolRendererFnKey, (int index) => data[index].shape) - // Default symbol renderer ID for data that have no defined shape. - ..setAttribute(charts.pointSymbolRendererIdKey, 'rect') - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, - animate: animate, - behaviors: [ - // Optional - Configures a [LinePointHighlighter] behavior with - // horizontal and vertical follow lines. The highlighter will increase - // the size of the selected points on the chart. - // - // By default, the line has default dash pattern of [1,3]. This can be - // set by providing a [dashPattern] or it can be turned off by passing - // in an empty list. An empty list is necessary because passing in a - // null value will be treated the same as not passing in a value at - // all. - charts.LinePointHighlighter( - showHorizontalFollowLine: - charts.LinePointHighlighterFollowLineType.nearest, - showVerticalFollowLine: - charts.LinePointHighlighterFollowLineType.nearest), - // Optional - By default, select nearest is configured to trigger - // with tap so that a user can have pan/zoom behavior and line point - // highlighter. Changing the trigger to tap and drag allows the - // highlighter to follow the dragging gesture but it is not - // recommended to be used when pan/zoom behavior is enabled. - charts.SelectNearest( - eventTrigger: charts.SelectionTrigger.tapAndDrag), - ], - // Configure the point renderer to have a map of custom symbol - // renderers. - defaultRenderer: - charts.PointRendererConfig(customSymbolRenderers: { - 'circle': charts.CircleSymbolRenderer(), - 'rect': charts.RectSymbolRenderer(), - })); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5, 3.0, 'circle', null, null), - LinearSales(10, 25, 5.0, null, null, null), - LinearSales(12, 75, 4.0, null, null, null), - // Render a hollow circle, filled in with white. - LinearSales(13, 225, 5.0, 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(16, 50, 4.0, null, null, null), - LinearSales(24, 75, 3.0, null, null, null), - LinearSales(25, 100, 3.0, 'circle', null, null), - LinearSales(34, 150, 5.0, null, null, null), - LinearSales(37, 10, 4.5, null, null, null), - // Render a hollow circle, filled in with white. - LinearSales(45, 300, 8.0, 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(52, 15, 4.0, null, null, null), - // Render a hollow square, filled in with white. - LinearSales(56, 200, 7.0, null, charts.MaterialPalette.white, 2.0), - ]; - - const maxMeasure = 300; - - return [ - charts.Series( - id: 'Sales', - // Providing a color function is optional. - colorFn: (LinearSales sales, _) { - // Bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - fillColorFn: (LinearSales row, _) => row.fillColor, - strokeWidthPxFn: (LinearSales row, _) => row.strokeWidth, - data: data, - ) - // Accessor function that associates each datum with a symbol renderer. - ..setAttribute( - charts.pointSymbolRendererFnKey, (int index) => data[index].shape) - // Default symbol renderer ID for data that have no defined shape. - ..setAttribute(charts.pointSymbolRendererIdKey, 'rect') - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final double radius; - final String? shape; - final charts.Color? fillColor; - final double? strokeWidth; - - LinearSales(this.year, this.sales, this.radius, this.shape, this.fillColor, - this.strokeWidth); -} diff --git a/web/charts/lib/behaviors/selection_user_managed.dart b/web/charts/lib/behaviors/selection_user_managed.dart deleted file mode 100644 index 855a47679..000000000 --- a/web/charts/lib/behaviors/selection_user_managed.dart +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of using user managed state to programmatically set selection. -/// -/// In this example, clicking the "clear selection" button sets the selection -/// to an empty selection. This example also shows that initial selection -/// behavior can still be used with user managed state. -/// -/// Note that the picture in this example is not interactive, please run the -/// gallery app to try out using the button to clear selection. -/// -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SelectionUserManaged extends StatefulWidget { - final List> seriesList; - final bool? animate; - - const SelectionUserManaged(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory SelectionUserManaged.withSampleData() { - return SelectionUserManaged( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SelectionUserManaged.withRandomData() { - return SelectionUserManaged(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - - @override - SelectionUserManagedState createState() { - return SelectionUserManagedState(); - } -} - -class SelectionUserManagedState extends State { - final _myState = charts.UserManagedState(); - - @override - Widget build(BuildContext context) { - final chart = charts.BarChart( - widget.seriesList, - animate: false, //widget.animate, - selectionModels: [ - charts.SelectionModelConfig( - type: charts.SelectionModelType.info, - updatedListener: _infoSelectionModelUpdated) - ], - // Pass in the state you manage to the chart. This will be used to - // override the internal chart state. - userManagedState: _myState, - // The initial selection can still be optionally added by adding the - // initial selection behavior. - behaviors: [ - charts.InitialSelection(selectedDataConfig: [ - charts.SeriesDatumConfig('Sales', '2016') - ]) - ], - ); - - final clearSelection = MaterialButton( - onPressed: _handleClearSelection, child: const Text('Clear Selection')); - - return Column( - children: [SizedBox(height: 150.0, child: chart), clearSelection]); - } - - void _infoSelectionModelUpdated(charts.SelectionModel model) { - // If you want to allow the chart to continue to respond to select events - // that update the selection, add an updatedListener that saves off the - // selection model each time the selection model is updated, regardless of - // if there are changes. - // - // This also allows you to listen to the selection model update events and - // alter the selection. - _myState.selectionModels[charts.SelectionModelType.info] = - charts.UserManagedSelectionModel(model: model); - } - - void _handleClearSelection() { - // Call set state to request a rebuild, to pass in the modified selection. - // In this case, passing in an empty [UserManagedSelectionModel] creates a - // no selection model to clear all selection when rebuilt. - setState(() { - _myState.selectionModels[charts.SelectionModelType.info] = - charts.UserManagedSelectionModel(); - }); - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/slider.dart b/web/charts/lib/behaviors/slider.dart deleted file mode 100644 index b4f5d4ad1..000000000 --- a/web/charts/lib/behaviors/slider.dart +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; - -/// This is just a simple line chart with a behavior that adds slider controls. -/// -/// A [Slider] behavior is added manually to enable slider controls, with an -/// initial position at 1 along the domain axis. -/// -/// An onChange event handler has been configured to demonstrate updating a div -/// with data from the slider's current position. An "initial" drag state event -/// will be fired when the chart is drawn because an initial domain value is -/// set. -/// -/// [Slider.moveSliderToDomain] can be called to programmatically position the -/// slider. This is useful for synchronizing the slider with external elements. -class SliderLine extends StatefulWidget { - final List> seriesList; - final bool? animate; - - const SliderLine(this.seriesList, {this.animate, Key? key}) : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory SliderLine.withSampleData() { - return SliderLine( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SliderLine.withRandomData() { - return SliderLine(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - // We need a Stateful widget to build the selection details with the current - // selection as the state. - @override - State createState() => _SliderCallbackState(); - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -class _SliderCallbackState extends State { - num? _sliderDomainValue; - String? _sliderDragState; - Point? _sliderPosition; - - // Handles callbacks when the user drags the slider. - _onSliderChange(Point point, dynamic domain, String roleId, - charts.SliderListenerDragState dragState) { - // Request a build. - void rebuild(_) { - setState(() { - _sliderDomainValue = (domain * 10).round() / 10; - _sliderDragState = dragState.toString(); - _sliderPosition = point; - }); - } - - SchedulerBinding.instance.addPostFrameCallback(rebuild); - } - - @override - Widget build(BuildContext context) { - // The children consist of a Chart and Text widgets below to hold the info. - final children = [ - SizedBox( - height: 150.0, - child: charts.LineChart( - widget.seriesList, - animate: widget.animate, - // Configures a [Slider] behavior. - // - // Available options include: - // - // [eventTrigger] configures the type of mouse gesture that controls - // the slider. - // - // [handleRenderer] draws a handle for the slider. Defaults to a - // rectangle. - // - // [initialDomainValue] sets the initial position of the slider in - // domain units. The default is the center of the chart. - // - // [onChangeCallback] will be called when the position of the slider - // changes during a drag event. - // - // [roleId] optional custom role ID for the slider. This can be used to - // allow multiple [Slider] behaviors on the same chart. Normally, there can - // only be one slider (per event trigger type) on a chart. This setting - // allows for configuring multiple independent sliders. - // - // [snapToDatum] configures the slider to snap snap onto the nearest - // datum (by domain distance) when dragged. By default, the slider - // can be positioned anywhere along the domain axis. - // - // [style] takes in a [SliderStyle] configuration object, and - // configures the color and sizing of the slider line and handle. - behaviors: [ - charts.Slider( - initialDomainValue: 1.0, onChangeCallback: _onSliderChange), - ], - )), - ]; - - // If there is a slider change event, then include the details. - if (_sliderDomainValue != null) { - children.add(Padding( - padding: const EdgeInsets.only(top: 5.0), - child: Text('Slider domain value: $_sliderDomainValue'))); - } - if (_sliderPosition != null) { - children.add(Padding( - padding: const EdgeInsets.only(top: 5.0), - child: Text( - 'Slider position: ${_sliderPosition!.x}, ${_sliderPosition!.y}'))); - } - if (_sliderDragState != null) { - children.add(Padding( - padding: const EdgeInsets.only(top: 5.0), - child: Text('Slider drag state: $_sliderDragState'))); - } - - return Column(children: children); - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/behaviors/sliding_viewport_on_selection.dart b/web/charts/lib/behaviors/sliding_viewport_on_selection.dart deleted file mode 100644 index 585400b50..000000000 --- a/web/charts/lib/behaviors/sliding_viewport_on_selection.dart +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of the chart behavior that centers the viewport on domain selection. - -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SlidingViewportOnSelection extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SlidingViewportOnSelection(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory SlidingViewportOnSelection.withSampleData() { - return SlidingViewportOnSelection( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SlidingViewportOnSelection.withRandomData() { - return SlidingViewportOnSelection(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - OrdinalSales('2018', random.nextInt(100)), - OrdinalSales('2019', random.nextInt(100)), - OrdinalSales('2020', random.nextInt(100)), - OrdinalSales('2021', random.nextInt(100)), - OrdinalSales('2022', random.nextInt(100)), - OrdinalSales('2023', random.nextInt(100)), - OrdinalSales('2024', random.nextInt(100)), - OrdinalSales('2025', random.nextInt(100)), - OrdinalSales('2026', random.nextInt(100)), - OrdinalSales('2027', random.nextInt(100)), - OrdinalSales('2028', random.nextInt(100)), - OrdinalSales('2029', random.nextInt(100)), - OrdinalSales('2030', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - behaviors: [ - // Add the sliding viewport behavior to have the viewport center on the - // domain that is currently selected. - charts.SlidingViewport(), - // A pan and zoom behavior helps demonstrate the sliding viewport - // behavior by allowing the data visible in the viewport to be adjusted - // dynamically. - charts.PanAndZoomBehavior(), - ], - // Set an initial viewport to demonstrate the sliding viewport behavior on - // initial chart load. - domainAxis: - charts.OrdinalAxisSpec(viewport: charts.OrdinalViewport('2018', 4)), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - OrdinalSales('2018', 33), - OrdinalSales('2019', 80), - OrdinalSales('2020', 21), - OrdinalSales('2021', 77), - OrdinalSales('2022', 8), - OrdinalSales('2023', 12), - OrdinalSales('2024', 42), - OrdinalSales('2025', 70), - OrdinalSales('2026', 77), - OrdinalSales('2027', 55), - OrdinalSales('2028', 19), - OrdinalSales('2029', 66), - OrdinalSales('2030', 27), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/combo_chart/combo_gallery.dart b/web/charts/lib/combo_chart/combo_gallery.dart deleted file mode 100644 index d5348dc94..000000000 --- a/web/charts/lib/combo_chart/combo_gallery.dart +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'date_time_line_point.dart'; -import 'numeric_line_bar.dart'; -import 'numeric_line_point.dart'; -import 'ordinal_bar_line.dart'; -import 'scatter_plot_line.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Ordinal Combo Chart', - subtitle: 'Ordinal combo chart with bars and lines', - childBuilder: () => OrdinalComboBarLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Numeric Line Bar Combo Chart', - subtitle: 'Numeric combo chart with lines and bars', - childBuilder: () => NumericComboLineBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Numeric Line Points Combo Chart', - subtitle: 'Numeric combo chart with lines and points', - childBuilder: () => NumericComboLinePointChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Time Series Combo Chart', - subtitle: 'Time series combo chart with lines and points', - childBuilder: () => DateTimeComboLinePointChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.scatter_plot), - title: 'Scatter Plot Combo Chart', - subtitle: 'Scatter plot combo chart with a line', - childBuilder: () => ScatterPlotComboLineChart.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/combo_chart/date_time_line_point.dart b/web/charts/lib/combo_chart/date_time_line_point.dart deleted file mode 100644 index 87f76e1e2..000000000 --- a/web/charts/lib/combo_chart/date_time_line_point.dart +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a combo time series chart with two series rendered as lines, and -/// a third rendered as points along the top line with a different color. -/// -/// This example demonstrates a method for drawing points along a line using a -/// different color from the main series color. The line renderer supports -/// drawing points with the "includePoints" option, but those points will share -/// the same color as the line. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class DateTimeComboLinePointChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DateTimeComboLinePointChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory DateTimeComboLinePointChart.withSampleData() { - return DateTimeComboLinePointChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DateTimeComboLinePointChart.withRandomData() { - return DateTimeComboLinePointChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - final tableSalesData = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - final mobileSalesData = [ - TimeSeriesSales(DateTime(2017, 9, 19), tableSalesData[0].sales), - TimeSeriesSales(DateTime(2017, 9, 26), tableSalesData[1].sales), - TimeSeriesSales(DateTime(2017, 10, 3), tableSalesData[2].sales), - TimeSeriesSales(DateTime(2017, 10, 10), tableSalesData[3].sales), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: mobileSalesData) - // Configure our custom point renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customPoint'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Configure the default renderer as a line renderer. This will be used - // for any series that does not define a rendererIdKey. - // - // This is the default configuration, but is shown here for illustration. - defaultRenderer: charts.LineRendererConfig(), - // Custom renderer configuration for the point series. - customSeriesRenderers: [ - charts.PointRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customPoint') - ], - // Optionally pass in a [DateTimeFactory] used by the chart. The factory - // should create the same type of [DateTime] as the data provided. If none - // specified, the default creates local date time. - dateTimeFactory: const charts.LocalDateTimeFactory(), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final desktopSalesData = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - final tableSalesData = [ - TimeSeriesSales(DateTime(2017, 9, 19), 10), - TimeSeriesSales(DateTime(2017, 9, 26), 50), - TimeSeriesSales(DateTime(2017, 10, 3), 200), - TimeSeriesSales(DateTime(2017, 10, 10), 150), - ]; - - final mobileSalesData = [ - TimeSeriesSales(DateTime(2017, 9, 19), 10), - TimeSeriesSales(DateTime(2017, 9, 26), 50), - TimeSeriesSales(DateTime(2017, 10, 3), 200), - TimeSeriesSales(DateTime(2017, 10, 10), 150), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: mobileSalesData) - // Configure our custom point renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customPoint'), - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/combo_chart/numeric_line_bar.dart b/web/charts/lib/combo_chart/numeric_line_bar.dart deleted file mode 100644 index 4739bafed..000000000 --- a/web/charts/lib/combo_chart/numeric_line_bar.dart +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a numeric combo chart with two series rendered as bars, and a -/// third rendered as a line. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class NumericComboLineBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const NumericComboLineBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory NumericComboLineBarChart.withSampleData() { - return NumericComboLineBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory NumericComboLineBarChart.withRandomData() { - return NumericComboLineBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - final tableSalesData = [ - LinearSales(0, desktopSalesData[0].sales), - LinearSales(1, desktopSalesData[1].sales), - LinearSales(2, desktopSalesData[2].sales), - LinearSales(3, desktopSalesData[3].sales), - ]; - - final mobileSalesData = [ - LinearSales(0, tableSalesData[0].sales * 2), - LinearSales(1, tableSalesData[1].sales * 2), - LinearSales(2, tableSalesData[2].sales * 2), - LinearSales(3, tableSalesData[3].sales * 2), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: desktopSalesData, - ) - // Configure our custom bar renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customBar'), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: tableSalesData, - ) - // Configure our custom bar renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customBar'), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: mobileSalesData), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.NumericComboChart(seriesList, - animate: animate, - // Configure the default renderer as a line renderer. This will be used - // for any series that does not define a rendererIdKey. - defaultRenderer: charts.LineRendererConfig(), - // Custom renderer configuration for the bar series. - customSeriesRenderers: [ - charts.BarRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customBar') - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final desktopSalesData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - final tableSalesData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - final mobileSalesData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: desktopSalesData, - ) - // Configure our custom bar renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customBar'), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: tableSalesData, - ) - // Configure our custom bar renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customBar'), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: mobileSalesData), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/combo_chart/numeric_line_point.dart b/web/charts/lib/combo_chart/numeric_line_point.dart deleted file mode 100644 index 184631b4b..000000000 --- a/web/charts/lib/combo_chart/numeric_line_point.dart +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a numeric combo chart with two series rendered as lines, and a -/// third rendered as points along the top line with a different color. -/// -/// This example demonstrates a method for drawing points along a line using a -/// different color from the main series color. The line renderer supports -/// drawing points with the "includePoints" option, but those points will share -/// the same color as the line. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class NumericComboLinePointChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const NumericComboLinePointChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory NumericComboLinePointChart.withSampleData() { - return NumericComboLinePointChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory NumericComboLinePointChart.withRandomData() { - return NumericComboLinePointChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - final tableSalesData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - final mobileSalesData = [ - LinearSales(0, tableSalesData[0].sales), - LinearSales(1, tableSalesData[1].sales), - LinearSales(2, tableSalesData[2].sales), - LinearSales(3, tableSalesData[3].sales), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: mobileSalesData) - // Configure our custom point renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customPoint'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.NumericComboChart(seriesList, - animate: animate, - // Configure the default renderer as a line renderer. This will be used - // for any series that does not define a rendererIdKey. - defaultRenderer: charts.LineRendererConfig(), - // Custom renderer configuration for the point series. - customSeriesRenderers: [ - charts.PointRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customPoint') - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final desktopSalesData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - final tableSalesData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - final mobileSalesData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: tableSalesData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: mobileSalesData) - // Configure our custom point renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customPoint'), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/combo_chart/ordinal_bar_line.dart b/web/charts/lib/combo_chart/ordinal_bar_line.dart deleted file mode 100644 index 9263dd9b1..000000000 --- a/web/charts/lib/combo_chart/ordinal_bar_line.dart +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of an ordinal combo chart with two series rendered as bars, and a -/// third rendered as a line. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class OrdinalComboBarLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const OrdinalComboBarLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory OrdinalComboBarLineChart.withSampleData() { - return OrdinalComboBarLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory OrdinalComboBarLineChart.withRandomData() { - return OrdinalComboBarLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tableSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData) - // Configure our custom line renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customLine'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.OrdinalComboChart(seriesList, - animate: animate, - // Configure the default renderer as a bar renderer. - defaultRenderer: charts.BarRendererConfig( - groupingType: charts.BarGroupingType.grouped), - // Custom renderer configuration for the line series. This will be used for - // any series that does not define a rendererIdKey. - customSeriesRenderers: [ - charts.LineRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customLine') - ]); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tableSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 50), - OrdinalSales('2016', 200), - OrdinalSales('2017', 150), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tableSalesData), - charts.Series( - id: 'Mobile ', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData) - // Configure our custom line renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customLine'), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/combo_chart/scatter_plot_line.dart b/web/charts/lib/combo_chart/scatter_plot_line.dart deleted file mode 100644 index 48b63e9e1..000000000 --- a/web/charts/lib/combo_chart/scatter_plot_line.dart +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a combo scatter plot chart with a second series rendered as a -/// line. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class ScatterPlotComboLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const ScatterPlotComboLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory ScatterPlotComboLineChart.withSampleData() { - return ScatterPlotComboLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory ScatterPlotComboLineChart.withRandomData() { - return ScatterPlotComboLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - makeRadius(int value) => (random.nextInt(value) + 2).toDouble(); - - final desktopSalesData = [ - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - ]; - - var myRegressionData = [ - LinearSales(0, desktopSalesData[0].sales, 3.5), - LinearSales( - 100, desktopSalesData[desktopSalesData.length - 1].sales, 7.5), - ]; - - const maxMeasure = 100; - - return [ - charts.Series( - id: 'Sales', - // Providing a color function is optional. - colorFn: (LinearSales sales, _) { - // Bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - // Providing a radius function is optional. - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: desktopSalesData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.purple.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myRegressionData) - // Configure our custom line renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customLine'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, - animate: animate, - // Configure the default renderer as a point renderer. This will be used - // for any series that does not define a rendererIdKey. - // - // This is the default configuration, but is shown here for - // illustration. - defaultRenderer: charts.PointRendererConfig(), - // Custom renderer configuration for the line series. - customSeriesRenderers: [ - charts.LineRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customLine', - // Configure the regression line to be painted above the points. - // - // By default, series drawn by the point renderer are painted on - // top of those drawn by a line renderer. - layoutPaintOrder: charts.LayoutViewPaintOrder.point + 1) - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final desktopSalesData = [ - LinearSales(0, 5, 3.0), - LinearSales(10, 25, 5.0), - LinearSales(12, 75, 4.0), - LinearSales(13, 225, 5.0), - LinearSales(16, 50, 4.0), - LinearSales(24, 75, 3.0), - LinearSales(25, 100, 3.0), - LinearSales(34, 150, 5.0), - LinearSales(37, 10, 4.5), - LinearSales(45, 300, 8.0), - LinearSales(52, 15, 4.0), - LinearSales(56, 200, 7.0), - ]; - - var myRegressionData = [ - LinearSales(0, 5, 3.5), - LinearSales(56, 240, 3.5), - ]; - - const maxMeasure = 300; - - return [ - charts.Series( - id: 'Sales', - // Providing a color function is optional. - colorFn: (LinearSales sales, _) { - // Bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - // Providing a radius function is optional. - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: desktopSalesData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.purple.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myRegressionData) - // Configure our custom line renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customLine'), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final double radius; - - LinearSales(this.year, this.sales, this.radius); -} diff --git a/web/charts/lib/drawer.dart b/web/charts/lib/drawer.dart deleted file mode 100644 index 6d9bd0d8b..000000000 --- a/web/charts/lib/drawer.dart +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; - -/// A menu drawer supporting toggling theme and performance overlay. -class GalleryDrawer extends StatelessWidget { - final bool showPerformanceOverlay; - final ValueChanged onShowPerformanceOverlayChanged; - - const GalleryDrawer( - {Key? key, - required this.showPerformanceOverlay, - required this.onShowPerformanceOverlayChanged}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return Drawer( - child: ListView(children: [ - // Performance overlay toggle. - ListTile( - leading: const Icon(Icons.assessment), - title: const Text('Performance Overlay'), - onTap: () { - onShowPerformanceOverlayChanged(!showPerformanceOverlay); - }, - selected: showPerformanceOverlay, - trailing: Checkbox( - value: showPerformanceOverlay, - onChanged: (bool? value) { - onShowPerformanceOverlayChanged(!showPerformanceOverlay); - }, - ), - ), - ]), - ); - } -} diff --git a/web/charts/lib/gallery_scaffold.dart b/web/charts/lib/gallery_scaffold.dart deleted file mode 100644 index 8acaf2e75..000000000 --- a/web/charts/lib/gallery_scaffold.dart +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; - -typedef GalleryWidgetBuilder = Widget Function(); - -/// Helper to build gallery. -class GalleryScaffold extends StatefulWidget { - /// The widget used for leading in a [ListTile]. - final Widget? listTileIcon; - final String title; - final String subtitle; - final GalleryWidgetBuilder childBuilder; - - const GalleryScaffold( - {this.listTileIcon, - required this.title, - required this.subtitle, - required this.childBuilder, - Key? key}) - : super(key: key); - - /// Gets the gallery - Widget buildGalleryListTile(BuildContext context) => ListTile( - leading: listTileIcon, - title: Text(title), - subtitle: Text(subtitle), - onTap: () { - Navigator.push(context, MaterialPageRoute(builder: (_) => this)); - }); - - @override - State createState() => _GalleryScaffoldState(); -} - -class _GalleryScaffoldState extends State { - void _handleButtonPress() { - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text(widget.title)), - body: Padding( - padding: const EdgeInsets.all(8.0), - child: Column(children: [ - SizedBox(height: 250.0, child: widget.childBuilder()), - ])), - floatingActionButton: FloatingActionButton( - onPressed: _handleButtonPress, child: const Icon(Icons.refresh)), - ); - } -} diff --git a/web/charts/lib/home.dart b/web/charts/lib/home.dart deleted file mode 100644 index 377c286cb..000000000 --- a/web/charts/lib/home.dart +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; -import 'dart:developer'; -import 'app_config.dart'; -import 'drawer.dart'; -import 'a11y/a11y_gallery.dart' as a11y show buildGallery; -import 'bar_chart/bar_gallery.dart' as bar show buildGallery; -import 'time_series_chart/time_series_gallery.dart' as time_series - show buildGallery; -import 'line_chart/line_gallery.dart' as line show buildGallery; -import 'scatter_plot_chart/scatter_plot_gallery.dart' as scatter_plot - show buildGallery; -import 'combo_chart/combo_gallery.dart' as combo show buildGallery; -import 'pie_chart/pie_gallery.dart' as pie show buildGallery; -import 'axes/axes_gallery.dart' as axes show buildGallery; -import 'behaviors/behaviors_gallery.dart' as behaviors show buildGallery; -import 'i18n/i18n_gallery.dart' as i18n show buildGallery; -import 'legends/legends_gallery.dart' as legends show buildGallery; - -/// Main entry point of the gallery app. -/// -/// This renders a list of all available demos. -class Home extends StatelessWidget { - final bool showPerformanceOverlay; - final ValueChanged onShowPerformanceOverlayChanged; - final a11yGalleries = a11y.buildGallery(); - final barGalleries = bar.buildGallery(); - final timeSeriesGalleries = time_series.buildGallery(); - final lineGalleries = line.buildGallery(); - final scatterPlotGalleries = scatter_plot.buildGallery(); - final comboGalleries = combo.buildGallery(); - final pieGalleries = pie.buildGallery(); - final axesGalleries = axes.buildGallery(); - final behaviorsGalleries = behaviors.buildGallery(); - final i18nGalleries = i18n.buildGallery(); - final legendsGalleries = legends.buildGallery(); - - Home( - {Key? key, - required this.showPerformanceOverlay, - required this.onShowPerformanceOverlayChanged}) - : super(key: key); - - @override - Widget build(BuildContext context) { - var galleries = []; - - galleries.addAll( - a11yGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example bar charts. - galleries.addAll( - barGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example time series charts. - galleries.addAll(timeSeriesGalleries - .map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example line charts. - galleries.addAll( - lineGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example scatter plot charts. - galleries.addAll(scatterPlotGalleries - .map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example pie charts. - galleries.addAll( - comboGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example pie charts. - galleries.addAll( - pieGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - // Add example custom axis. - galleries.addAll( - axesGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - galleries.addAll(behaviorsGalleries - .map((gallery) => gallery.buildGalleryListTile(context))); - - // Add legends examples - galleries.addAll(legendsGalleries - .map((gallery) => gallery.buildGalleryListTile(context))); - - // Add examples for i18n. - galleries.addAll( - i18nGalleries.map((gallery) => gallery.buildGalleryListTile(context))); - - _setupPerformance(); - - return Scaffold( - drawer: GalleryDrawer( - showPerformanceOverlay: showPerformanceOverlay, - onShowPerformanceOverlayChanged: onShowPerformanceOverlayChanged), - appBar: AppBar(title: Text(defaultConfig.appName)), - body: ListView(padding: kMaterialListPadding, children: galleries), - ); - } - - void _setupPerformance() { - // Change [printPerformance] to true and set the app to release mode to - // print performance numbers to console. By default, Flutter builds in debug - // mode and this mode is slow. To build in release mode, specify the flag - // blaze-run flag "--define flutter_build_mode=release". - // The build target must also be an actual device and not the emulator. - charts.Performance.time = (String tag) => Timeline.startSync(tag); - charts.Performance.timeEnd = (_) => Timeline.finishSync(); - } -} diff --git a/web/charts/lib/i18n/i18n_gallery.dart b/web/charts/lib/i18n/i18n_gallery.dart deleted file mode 100644 index e63a4d1ce..000000000 --- a/web/charts/lib/i18n/i18n_gallery.dart +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'rtl_bar_chart.dart'; -import 'rtl_line_chart.dart'; -import 'rtl_line_segments.dart'; -import 'rtl_series_legend.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'RTL Bar Chart', - subtitle: 'Simple bar chart in RTL', - childBuilder: () => RTLBarChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'RTL Line Chart', - subtitle: 'Simple line chart in RTL', - childBuilder: () => RTLLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'RTL Line Segments', - subtitle: 'Stacked area chart with style segments in RTL', - childBuilder: () => RTLLineSegments.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.flag), - title: 'RTL Series Legend', - subtitle: 'Series legend in RTL', - childBuilder: () => RTLSeriesLegend.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/i18n/rtl_bar_chart.dart b/web/charts/lib/i18n/rtl_bar_chart.dart deleted file mode 100644 index 7f7a1f807..000000000 --- a/web/charts/lib/i18n/rtl_bar_chart.dart +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// RTL Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class RTLBarChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const RTLBarChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory RTLBarChart.withSampleData() { - return RTLBarChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory RTLBarChart.withRandomData() { - return RTLBarChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // Charts will determine if RTL is enabled by checking the directionality by - // requesting Directionality.of(context). This returns the text direction - // from the closest instance of that encloses the context passed to build - // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This - // means that the directionality widget does not have to directly wrap each - // chart. It is show here as an example only. - // - // By default, when a chart detects RTL: - // Measure axis positions are flipped. Primary measure axis is on the right - // and the secondary measure axis is on the left (when used). - // Domain axis' first domain starts on the right and grows left. - // - // Optionally, [RTLSpec] can be passed in when creating the chart to specify - // chart display settings in RTL mode. - return Directionality( - textDirection: TextDirection.rtl, - child: charts.BarChart( - seriesList, - animate: animate, - vertical: false, - )); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/i18n/rtl_line_chart.dart b/web/charts/lib/i18n/rtl_line_chart.dart deleted file mode 100644 index 9385f5dd3..000000000 --- a/web/charts/lib/i18n/rtl_line_chart.dart +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// RTL Line chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class RTLLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const RTLLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory RTLLineChart.withSampleData() { - return RTLLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory RTLLineChart.withRandomData() { - return RTLLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // Charts will determine if RTL is enabled by checking the directionality by - // requesting Directionality.of(context). This returns the text direction - // from the closest instance of that encloses the context passed to build - // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This - // means that the directionality widget does not have to directly wrap each - // chart. It is show here as an example only. - // - // By default, when a chart detects RTL: - // Measure axis positions are flipped. Primary measure axis is on the right - // and the secondary measure axis is on the left (when used). - // Domain axis' first domain starts on the right and grows left. - return Directionality( - textDirection: TextDirection.rtl, - child: charts.LineChart( - seriesList, - animate: animate, - )); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/i18n/rtl_line_segments.dart b/web/charts/lib/i18n/rtl_line_segments.dart deleted file mode 100644 index ac5a00af1..000000000 --- a/web/charts/lib/i18n/rtl_line_segments.dart +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a RTL stacked area chart with changing styles within each line. -/// -/// Each series of data in this example contains different values for color, -/// dashPattern, or strokeWidthPx between each datum. The line and area skirt -/// will be rendered in segments, with the styling of the series changing when -/// these data attributes change. -/// -/// Note that if a dashPattern or strokeWidth value is not found for a -/// particular datum, then the chart will fall back to use the value defined in -/// the [charts.LineRendererConfig]. This could be used, for example, to define -/// a default dash pattern for the series, with only a specific datum called out -/// with a different pattern. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class RTLLineSegments extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const RTLLineSegments(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory RTLLineSegments.withSampleData() { - return RTLLineSegments( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory RTLLineSegments.withRandomData() { - return RTLLineSegments(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - // Series of data with static dash pattern and stroke width. The colorFn - // accessor will colorize each datum (for all three series). - final colorChangeData = [ - LinearSales(0, random.nextInt(100), null, 2.0), - LinearSales(1, random.nextInt(100), null, 2.0), - LinearSales(2, random.nextInt(100), null, 2.0), - LinearSales(3, random.nextInt(100), null, 2.0), - LinearSales(4, random.nextInt(100), null, 2.0), - LinearSales(5, random.nextInt(100), null, 2.0), - LinearSales(6, random.nextInt(100), null, 2.0), - ]; - - // Series of data with changing color and dash pattern. - final dashPatternChangeData = [ - LinearSales(0, random.nextInt(100), [2, 2], 2.0), - LinearSales(1, random.nextInt(100), [2, 2], 2.0), - LinearSales(2, random.nextInt(100), [4, 4], 2.0), - LinearSales(3, random.nextInt(100), [4, 4], 2.0), - LinearSales(4, random.nextInt(100), [4, 4], 2.0), - LinearSales(5, random.nextInt(100), [8, 3, 2, 3], 2.0), - LinearSales(6, random.nextInt(100), [8, 3, 2, 3], 2.0), - ]; - - // Series of data with changing color and stroke width. - final strokeWidthChangeData = [ - LinearSales(0, random.nextInt(100), null, 2.0), - LinearSales(1, random.nextInt(100), null, 2.0), - LinearSales(2, random.nextInt(100), null, 4.0), - LinearSales(3, random.nextInt(100), null, 4.0), - LinearSales(4, random.nextInt(100), null, 4.0), - LinearSales(5, random.nextInt(100), null, 6.0), - LinearSales(6, random.nextInt(100), null, 6.0), - ]; - - // Generate 2 shades of each color so that we can style the line segments. - final blue = charts.MaterialPalette.blue.makeShades(2); - final red = charts.MaterialPalette.red.makeShades(2); - final green = charts.MaterialPalette.green.makeShades(2); - - return [ - charts.Series( - id: 'Color Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? blue[1] : blue[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: colorChangeData, - ), - charts.Series( - id: 'Dash Pattern Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? red[1] : red[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: dashPatternChangeData, - ), - charts.Series( - id: 'Stroke Width Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? green[1] : green[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: strokeWidthChangeData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // Charts will determine if RTL is enabled by checking the directionality by - // requesting Directionality.of(context). This returns the text direction - // from the closest instance of that encloses the context passed to build - // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This - // means that the directionality widget does not have to directly wrap each - // chart. It is show here as an example only. - // - // By default, when a chart detects RTL: - // Measure axis positions are flipped. Primary measure axis is on the right - // and the secondary measure axis is on the left (when used). - // Domain axis' first domain starts on the right and grows left. - return Directionality( - textDirection: TextDirection.rtl, - child: charts.LineChart( - seriesList, - defaultRenderer: - charts.LineRendererConfig(includeArea: true, stacked: true), - animate: animate, - )); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - // Series of data with static dash pattern and stroke width. The colorFn - // accessor will colorize each datum (for all three series). - final colorChangeData = [ - LinearSales(0, 5, null, 2.0), - LinearSales(1, 15, null, 2.0), - LinearSales(2, 25, null, 2.0), - LinearSales(3, 75, null, 2.0), - LinearSales(4, 100, null, 2.0), - LinearSales(5, 90, null, 2.0), - LinearSales(6, 75, null, 2.0), - ]; - - // Series of data with changing color and dash pattern. - final dashPatternChangeData = [ - LinearSales(0, 5, [2, 2], 2.0), - LinearSales(1, 15, [2, 2], 2.0), - LinearSales(2, 25, [4, 4], 2.0), - LinearSales(3, 75, [4, 4], 2.0), - LinearSales(4, 100, [4, 4], 2.0), - LinearSales(5, 90, [8, 3, 2, 3], 2.0), - LinearSales(6, 75, [8, 3, 2, 3], 2.0), - ]; - - // Series of data with changing color and stroke width. - final strokeWidthChangeData = [ - LinearSales(0, 5, null, 2.0), - LinearSales(1, 15, null, 2.0), - LinearSales(2, 25, null, 4.0), - LinearSales(3, 75, null, 4.0), - LinearSales(4, 100, null, 4.0), - LinearSales(5, 90, null, 6.0), - LinearSales(6, 75, null, 6.0), - ]; - - // Generate 2 shades of each color so that we can style the line segments. - final blue = charts.MaterialPalette.blue.makeShades(2); - final red = charts.MaterialPalette.red.makeShades(2); - final green = charts.MaterialPalette.green.makeShades(2); - - return [ - charts.Series( - id: 'Color Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? blue[1] : blue[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: colorChangeData, - ), - charts.Series( - id: 'Dash Pattern Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? red[1] : red[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: dashPatternChangeData, - ), - charts.Series( - id: 'Stroke Width Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? green[1] : green[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: strokeWidthChangeData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final List? dashPattern; - final double strokeWidthPx; - - LinearSales(this.year, this.sales, this.dashPattern, this.strokeWidthPx); -} diff --git a/web/charts/lib/i18n/rtl_series_legend.dart b/web/charts/lib/i18n/rtl_series_legend.dart deleted file mode 100644 index 419d7a110..000000000 --- a/web/charts/lib/i18n/rtl_series_legend.dart +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// RTL Bar chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class RTLSeriesLegend extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const RTLSeriesLegend(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [BarChart] with sample data and no transition. - factory RTLSeriesLegend.withSampleData() { - return RTLSeriesLegend( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory RTLSeriesLegend.withRandomData() { - return RTLSeriesLegend(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final otherSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // Charts will determine if RTL is enabled by checking the directionality by - // requesting Directionality.of(context). This returns the text direction - // from the closest instance of that encloses the context passed to build - // the chart. A [TextDirection.rtl] will be treated as a RTL chart. This - // means that the directionality widget does not have to directly wrap each - // chart. It is show here as an example only. - // - // When the legend behavior detects RTL: - // [BehaviorPosition.start] is to the right of the chart. - // [BehaviorPosition.end] is to the left of the chart. - // - // If the [BehaviorPosition] is top or bottom, the start justification - // is to the right, and the end justification is to the left. - // - // The legend's tabular layout will also layout rows and columns from right - // to left. - // - // The below example changes the position to 'start' and max rows of 2 in - // order to show these effects, but are not required for SeriesLegend to - // work with the correct directionality. - return Directionality( - textDirection: TextDirection.rtl, - child: charts.BarChart( - seriesList, - animate: animate, - behaviors: [ - charts.SeriesLegend( - position: charts.BehaviorPosition.end, desiredMaxRows: 2) - ], - )); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final otherSalesData = [ - OrdinalSales('2014', 20), - OrdinalSales('2015', 35), - OrdinalSales('2016', 15), - OrdinalSales('2017', 10), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/datum_legend_options.dart b/web/charts/lib/legends/datum_legend_options.dart deleted file mode 100644 index e2184beed..000000000 --- a/web/charts/lib/legends/datum_legend_options.dart +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Pie chart with example of a legend with customized position, justification, -/// desired max rows, padding, and entry text styles. These options are shown as -/// an example of how to use the customizations, they do not necessary have to -/// be used together in this way. Choosing [end] as the position does not -/// require the justification to also be [endDrawArea]. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class DatumLegendOptions extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DatumLegendOptions(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory DatumLegendOptions.withSampleData() { - return DatumLegendOptions( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DatumLegendOptions.withRandomData() { - return DatumLegendOptions(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart( - seriesList, - animate: animate, - // Add the legend behavior to the chart to turn on legends. - // This example shows how to change the position and justification of - // the legend, in addition to altering the max rows and padding. - behaviors: [ - charts.DatumLegend( - // Positions for "start" and "end" will be left and right respectively - // for widgets with a build context that has directionality ltr. - // For rtl, "start" and "end" will be right and left respectively. - // Since this example has directionality of ltr, the legend is - // positioned on the right side of the chart. - position: charts.BehaviorPosition.end, - // For a legend that is positioned on the left or right of the chart, - // setting the justification for [endDrawArea] is aligned to the - // bottom of the chart draw area. - outsideJustification: charts.OutsideJustification.endDrawArea, - // By default, if the position of the chart is on the left or right of - // the chart, [horizontalFirst] is set to false. This means that the - // legend entries will grow as new rows first instead of a new column. - horizontalFirst: false, - // By setting this value to 2, the legend entries will grow up to two - // rows before adding a new column. - desiredMaxRows: 2, - // This defines the padding around each legend entry. - cellPadding: const EdgeInsets.only(right: 4.0, bottom: 4.0), - // Render the legend entry text with custom styles. - entryTextStyle: charts.TextStyleSpec( - color: charts.MaterialPalette.purple.shadeDefault, - fontFamily: 'Georgia', - fontSize: 11), - ) - ], - ); - } - - /// Create series list with one series - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/datum_legend_with_measures.dart b/web/charts/lib/legends/datum_legend_with_measures.dart deleted file mode 100644 index c36716291..000000000 --- a/web/charts/lib/legends/datum_legend_with_measures.dart +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with example of a legend with customized position, justification, -/// desired max rows, and padding. These options are shown as an example of how -/// to use the customizations, they do not necessary have to be used together in -/// this way. Choosing [end] as the position does not require the justification -/// to also be [endDrawArea]. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example that shows how to build a datum legend that shows measure values. -/// -/// Also shows the option to provide a custom measure formatter. -class DatumLegendWithMeasures extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DatumLegendWithMeasures(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory DatumLegendWithMeasures.withSampleData() { - return DatumLegendWithMeasures( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DatumLegendWithMeasures.withRandomData() { - return DatumLegendWithMeasures(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(2014, random.nextInt(100)), - LinearSales(2015, random.nextInt(100)), - LinearSales(2016, random.nextInt(100)), - LinearSales(2017, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart( - seriesList, - animate: animate, - // Add the legend behavior to the chart to turn on legends. - // This example shows how to optionally show measure and provide a custom - // formatter. - behaviors: [ - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // This is added in order to generate the image for the gallery to show - // an initial selection so that measure values are shown in the gallery. - charts.InitialSelection( - selectedDataConfig: [ - charts.SeriesDatumConfig('Sales', 0), - ], - ), - // EXCLUDE_FROM_GALLERY_DOCS_END - charts.DatumLegend( - // Positions for "start" and "end" will be left and right respectively - // for widgets with a build context that has directionality ltr. - // For rtl, "start" and "end" will be right and left respectively. - // Since this example has directionality of ltr, the legend is - // positioned on the right side of the chart. - position: charts.BehaviorPosition.end, - // By default, if the position of the chart is on the left or right of - // the chart, [horizontalFirst] is set to false. This means that the - // legend entries will grow as new rows first instead of a new column. - horizontalFirst: false, - // This defines the padding around each legend entry. - cellPadding: const EdgeInsets.only(right: 4.0, bottom: 4.0), - // Set [showMeasures] to true to display measures in series legend. - showMeasures: true, - // Configure the measure value to be shown by default in the legend. - legendDefaultMeasure: charts.LegendDefaultMeasure.firstValue, - // Optionally provide a measure formatter to format the measure value. - // If none is specified the value is formatted as a decimal. - measureFormatter: (num? value) { - return value == null ? '-' : '${value}k'; - }, - ), - ], - ); - } - - /// Create series list with one series - static List> _createSampleData() { - final data = [ - LinearSales(2014, 100), - LinearSales(2015, 75), - LinearSales(2016, 25), - LinearSales(2017, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/default_hidden_series_legend.dart b/web/charts/lib/legends/default_hidden_series_legend.dart deleted file mode 100644 index 8ddb3991c..000000000 --- a/web/charts/lib/legends/default_hidden_series_legend.dart +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with default hidden series legend example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class DefaultHiddenSeriesLegend extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DefaultHiddenSeriesLegend(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory DefaultHiddenSeriesLegend.withSampleData() { - return DefaultHiddenSeriesLegend( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DefaultHiddenSeriesLegend.withRandomData() { - return DefaultHiddenSeriesLegend(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final otherSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // Add the series legend behavior to the chart to turn on series legends. - // By default the legend will display above the chart. - behaviors: [ - charts.SeriesLegend( - // Configures the "Other" series to be hidden on first chart draw. - defaultHiddenSeries: const ['Other'], - ) - ], - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final otherSalesData = [ - OrdinalSales('2014', 20), - OrdinalSales('2015', 35), - OrdinalSales('2016', 15), - OrdinalSales('2017', 10), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/legend_custom_symbol.dart b/web/charts/lib/legends/legend_custom_symbol.dart deleted file mode 100644 index 67a52cf50..000000000 --- a/web/charts/lib/legends/legend_custom_symbol.dart +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with custom symbol in legend example. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example custom renderer that renders [IconData]. -/// -/// This is used to show that legend symbols can be assigned a custom symbol. -class IconRenderer extends charts.CustomSymbolRenderer { - final IconData iconData; - - IconRenderer(this.iconData); - - @override - Widget build(BuildContext context, - {Size? size, Color? color, bool enabled = true}) { - // Lighten the color if the symbol is not enabled - // Example: If user has tapped on a Series deselecting it. - if (!enabled) { - color = color!.withOpacity(0.26); - } - - return SizedBox.fromSize( - size: size, child: Icon(iconData, color: color, size: 12.0)); - } -} - -class LegendWithCustomSymbol extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LegendWithCustomSymbol(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory LegendWithCustomSymbol.withSampleData() { - return LegendWithCustomSymbol( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LegendWithCustomSymbol.withRandomData() { - return LegendWithCustomSymbol(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final otherSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // Add the legend behavior to the chart to turn on legends. - // By default the legend will display above the chart. - // - // To change the symbol used in the legend, set the renderer attribute of - // symbolRendererKey to a SymbolRenderer. - behaviors: [charts.SeriesLegend()], - defaultRenderer: - charts.BarRendererConfig(symbolRenderer: IconRenderer(Icons.cloud)), - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final otherSalesData = [ - OrdinalSales('2014', 20), - OrdinalSales('2015', 35), - OrdinalSales('2016', 15), - OrdinalSales('2017', 10), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ) - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/legends_gallery.dart b/web/charts/lib/legends/legends_gallery.dart deleted file mode 100644 index 7b87716eb..000000000 --- a/web/charts/lib/legends/legends_gallery.dart +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'datum_legend_options.dart'; -import 'datum_legend_with_measures.dart'; -import 'default_hidden_series_legend.dart'; -import 'legend_custom_symbol.dart'; -import 'series_legend_options.dart'; -import 'series_legend_with_measures.dart'; -import 'simple_datum_legend.dart'; -import 'simple_series_legend.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Series Legend', - subtitle: 'A series legend for a bar chart with default settings', - childBuilder: () => SimpleSeriesLegend.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Series Legend Options', - subtitle: - 'A series legend with custom positioning and spacing for a bar chart', - childBuilder: () => LegendOptions.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Series Legend Custom Symbol', - subtitle: 'A series legend using a custom symbol renderer', - childBuilder: () => LegendWithCustomSymbol.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Default Hidden Series Legend', - subtitle: 'A series legend showing a series hidden by default', - childBuilder: () => DefaultHiddenSeriesLegend.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.insert_chart), - title: 'Series legend with measures', - subtitle: 'Series legend with measures and measure formatting', - childBuilder: () => LegendWithMeasures.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Datum Legend', - subtitle: 'A datum legend for a pie chart with default settings', - childBuilder: () => SimpleDatumLegend.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Datum Legend Options', - subtitle: - 'A datum legend with custom positioning and spacing for a pie chart', - childBuilder: () => DatumLegendOptions.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Datum legend with measures', - subtitle: 'Datum legend with measures and measure formatting', - childBuilder: () => DatumLegendWithMeasures.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/legends/series_legend_options.dart b/web/charts/lib/legends/series_legend_options.dart deleted file mode 100644 index b44fcf80d..000000000 --- a/web/charts/lib/legends/series_legend_options.dart +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with example of a legend with customized position, justification, -/// desired max rows, padding, and entry text styles. These options are shown as -/// an example of how to use the customizations, they do not necessary have to -/// be used together in this way. Choosing [end] as the position does not -/// require the justification to also be [endDrawArea]. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class LegendOptions extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LegendOptions(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory LegendOptions.withSampleData() { - return LegendOptions( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LegendOptions.withRandomData() { - return LegendOptions(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final otherSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // Add the legend behavior to the chart to turn on legends. - // This example shows how to change the position and justification of - // the legend, in addition to altering the max rows and padding. - behaviors: [ - charts.SeriesLegend( - // Positions for "start" and "end" will be left and right respectively - // for widgets with a build context that has directionality ltr. - // For rtl, "start" and "end" will be right and left respectively. - // Since this example has directionality of ltr, the legend is - // positioned on the right side of the chart. - position: charts.BehaviorPosition.end, - // For a legend that is positioned on the left or right of the chart, - // setting the justification for [endDrawArea] is aligned to the - // bottom of the chart draw area. - outsideJustification: charts.OutsideJustification.endDrawArea, - // By default, if the position of the chart is on the left or right of - // the chart, [horizontalFirst] is set to false. This means that the - // legend entries will grow as new rows first instead of a new column. - horizontalFirst: false, - // By setting this value to 2, the legend entries will grow up to two - // rows before adding a new column. - desiredMaxRows: 2, - // This defines the padding around each legend entry. - cellPadding: const EdgeInsets.only(right: 4.0, bottom: 4.0), - // Render the legend entry text with custom styles. - entryTextStyle: charts.TextStyleSpec( - color: charts.MaterialPalette.purple.shadeDefault, - fontFamily: 'Georgia', - fontSize: 11), - ) - ], - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final otherSalesData = [ - OrdinalSales('2014', 20), - OrdinalSales('2015', 35), - OrdinalSales('2016', 15), - OrdinalSales('2017', 10), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/series_legend_with_measures.dart b/web/charts/lib/legends/series_legend_with_measures.dart deleted file mode 100644 index c132bdac6..000000000 --- a/web/charts/lib/legends/series_legend_with_measures.dart +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with example of a legend with customized position, justification, -/// desired max rows, and padding. These options are shown as an example of how -/// to use the customizations, they do not necessary have to be used together in -/// this way. Choosing [end] as the position does not require the justification -/// to also be [endDrawArea]. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -/// Example that shows how to build a series legend that shows measure values -/// when a datum is selected. -/// -/// Also shows the option to provide a custom measure formatter. -class LegendWithMeasures extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LegendWithMeasures(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory LegendWithMeasures.withSampleData() { - return LegendWithMeasures( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LegendWithMeasures.withRandomData() { - return LegendWithMeasures(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final otherSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // Add the legend behavior to the chart to turn on legends. - // This example shows how to optionally show measure and provide a custom - // formatter. - behaviors: [ - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // This is added in order to generate the image for the gallery to show - // an initial selection so that measure values are shown in the gallery. - charts.InitialSelection( - selectedDataConfig: [ - charts.SeriesDatumConfig('Desktop', '2016'), - charts.SeriesDatumConfig('Tablet', '2016'), - charts.SeriesDatumConfig('Mobile', '2016'), - charts.SeriesDatumConfig('Other', '2016'), - ], - ), - // EXCLUDE_FROM_GALLERY_DOCS_END - charts.SeriesLegend( - // Positions for "start" and "end" will be left and right respectively - // for widgets with a build context that has directionality ltr. - // For rtl, "start" and "end" will be right and left respectively. - // Since this example has directionality of ltr, the legend is - // positioned on the right side of the chart. - position: charts.BehaviorPosition.end, - // By default, if the position of the chart is on the left or right of - // the chart, [horizontalFirst] is set to false. This means that the - // legend entries will grow as new rows first instead of a new column. - horizontalFirst: false, - // This defines the padding around each legend entry. - cellPadding: const EdgeInsets.only(right: 4.0, bottom: 4.0), - // Set show measures to true to display measures in series legend, - // when the datum is selected. - showMeasures: true, - // Optionally provide a measure formatter to format the measure value. - // If none is specified the value is formatted as a decimal. - measureFormatter: (num? value) { - return value == null ? '-' : '${value}k'; - }, - ), - ], - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - // Purposely have a missing datum for 2016 to show the null measure format - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final otherSalesData = [ - OrdinalSales('2014', 20), - OrdinalSales('2015', 35), - OrdinalSales('2016', 15), - OrdinalSales('2017', 10), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/simple_datum_legend.dart b/web/charts/lib/legends/simple_datum_legend.dart deleted file mode 100644 index c5b2edec2..000000000 --- a/web/charts/lib/legends/simple_datum_legend.dart +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with series legend example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class SimpleDatumLegend extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleDatumLegend(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory SimpleDatumLegend.withSampleData() { - return SimpleDatumLegend( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleDatumLegend.withRandomData() { - return SimpleDatumLegend(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart( - seriesList, - animate: animate, - // Add the series legend behavior to the chart to turn on series legends. - // By default the legend will display above the chart. - behaviors: [charts.DatumLegend()], - ); - } - - /// Create series list with one series - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/legends/simple_series_legend.dart b/web/charts/lib/legends/simple_series_legend.dart deleted file mode 100644 index 41f8c3936..000000000 --- a/web/charts/lib/legends/simple_series_legend.dart +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Bar chart with series legend example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:flutter/material.dart'; -import 'package:charts_flutter/flutter.dart' as charts; - -class SimpleSeriesLegend extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleSeriesLegend(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - factory SimpleSeriesLegend.withSampleData() { - return SimpleSeriesLegend( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleSeriesLegend.withRandomData() { - return SimpleSeriesLegend(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final desktopSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - final otherSalesData = [ - OrdinalSales('2014', random.nextInt(100)), - OrdinalSales('2015', random.nextInt(100)), - OrdinalSales('2016', random.nextInt(100)), - OrdinalSales('2017', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.BarChart( - seriesList, - animate: animate, - barGroupingType: charts.BarGroupingType.grouped, - // Add the series legend behavior to the chart to turn on series legends. - // By default the legend will display above the chart. - behaviors: [charts.SeriesLegend()], - ); - } - - /// Create series list with multiple series - static List> _createSampleData() { - final desktopSalesData = [ - OrdinalSales('2014', 5), - OrdinalSales('2015', 25), - OrdinalSales('2016', 100), - OrdinalSales('2017', 75), - ]; - - final tabletSalesData = [ - OrdinalSales('2014', 25), - OrdinalSales('2015', 50), - OrdinalSales('2016', 10), - OrdinalSales('2017', 20), - ]; - - final mobileSalesData = [ - OrdinalSales('2014', 10), - OrdinalSales('2015', 15), - OrdinalSales('2016', 50), - OrdinalSales('2017', 45), - ]; - - final otherSalesData = [ - OrdinalSales('2014', 20), - OrdinalSales('2015', 35), - OrdinalSales('2016', 15), - OrdinalSales('2017', 10), - ]; - - return [ - charts.Series( - id: 'Desktop', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: desktopSalesData, - ), - charts.Series( - id: 'Tablet', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: tabletSalesData, - ), - charts.Series( - id: 'Mobile', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: mobileSalesData, - ), - charts.Series( - id: 'Other', - domainFn: (OrdinalSales sales, _) => sales.year, - measureFn: (OrdinalSales sales, _) => sales.sales, - data: otherSalesData, - ), - ]; - } -} - -/// Sample ordinal data type. -class OrdinalSales { - final String year; - final int sales; - - OrdinalSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/animation_zoom.dart b/web/charts/lib/line_chart/animation_zoom.dart deleted file mode 100644 index c58189d2a..000000000 --- a/web/charts/lib/line_chart/animation_zoom.dart +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a line chart with pan and zoom enabled via -/// [Charts.PanAndZoomBehavior]. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class LineAnimationZoomChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LineAnimationZoomChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory LineAnimationZoomChart.withSampleData() { - return LineAnimationZoomChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LineAnimationZoomChart.withRandomData() { - return LineAnimationZoomChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = []; - - for (var i = 0; i < 100; i++) { - data.add(LinearSales(i, random.nextInt(100))); - } - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate, behaviors: [ - charts.PanAndZoomBehavior(), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/area_and_line.dart b/web/charts/lib/line_chart/area_and_line.dart deleted file mode 100644 index cf4d0d210..000000000 --- a/web/charts/lib/line_chart/area_and_line.dart +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Line chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class AreaAndLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const AreaAndLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory AreaAndLineChart.withSampleData() { - return AreaAndLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory AreaAndLineChart.withRandomData() { - return AreaAndLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myFakeDesktopData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeTabletData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customArea'), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - animate: animate, - customSeriesRenderers: [ - charts.LineRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customArea', - includeArea: true, - stacked: true), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - var myFakeTabletData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ) - // Configure our custom bar target renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customArea'), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/dash_pattern.dart b/web/charts/lib/line_chart/dash_pattern.dart deleted file mode 100644 index cc9e86b7d..000000000 --- a/web/charts/lib/line_chart/dash_pattern.dart +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Dash pattern line chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -/// Example of a line chart rendered with dash patterns. -class DashPatternLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DashPatternLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory DashPatternLineChart.withSampleData() { - return DashPatternLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DashPatternLineChart.withRandomData() { - return DashPatternLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myFakeDesktopData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeTabletData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeMobileData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - dashPatternFn: (_, __) => [2, 2], - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - dashPatternFn: (_, __) => [8, 3, 2, 3], - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate); - } - - /// Create three series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - var myFakeTabletData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - var myFakeMobileData = [ - LinearSales(0, 15), - LinearSales(1, 75), - LinearSales(2, 300), - LinearSales(3, 225), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - dashPatternFn: (_, __) => [2, 2], - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - dashPatternFn: (_, __) => [8, 3, 2, 3], - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/line_annotation.dart b/web/charts/lib/line_chart/line_annotation.dart deleted file mode 100644 index 107537d5f..000000000 --- a/web/charts/lib/line_chart/line_annotation.dart +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Line chart with line annotations example. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class LineLineAnnotationChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LineLineAnnotationChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and line annotations. - /// - /// The second annotation extends beyond the range of the series data, - /// demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] flag. - /// This can be set to false to disable range extension. - factory LineLineAnnotationChart.withSampleData() { - return LineLineAnnotationChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LineLineAnnotationChart.withRandomData() { - return LineLineAnnotationChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - // Fix one of the points to 100 so that the annotations are consistently - // placed. - LinearSales(3, 100), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate, behaviors: [ - charts.RangeAnnotation([ - charts.LineAnnotationSegment(1.0, charts.RangeAnnotationAxisType.domain, - startLabel: 'Domain 1'), - charts.LineAnnotationSegment(4, charts.RangeAnnotationAxisType.domain, - endLabel: 'Domain 2', color: charts.MaterialPalette.gray.shade200), - charts.LineAnnotationSegment(20, charts.RangeAnnotationAxisType.measure, - startLabel: 'Measure 1 Start', - endLabel: 'Measure 1 End', - color: charts.MaterialPalette.gray.shade300), - charts.LineAnnotationSegment(65, charts.RangeAnnotationAxisType.measure, - startLabel: 'Measure 2 Start', - endLabel: 'Measure 2 End', - color: charts.MaterialPalette.gray.shade400), - ]), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/line_gallery.dart b/web/charts/lib/line_chart/line_gallery.dart deleted file mode 100644 index bcd9c9771..000000000 --- a/web/charts/lib/line_chart/line_gallery.dart +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'animation_zoom.dart'; -import 'area_and_line.dart'; -import 'dash_pattern.dart'; -import 'line_annotation.dart'; -import 'points.dart'; -import 'range_annotation.dart'; -import 'range_annotation_margin.dart'; -import 'segments.dart'; -import 'simple.dart'; -import 'simple_nulls.dart'; -import 'stacked_area.dart'; -import 'stacked_area_custom_color.dart'; -import 'stacked_area_nulls.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Simple Line Chart', - subtitle: 'With a single series and default line point highlighter', - childBuilder: () => SimpleLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Stacked Area Chart', - subtitle: 'Stacked area chart with three series', - childBuilder: () => StackedAreaLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Stacked Area Custom Color Chart', - subtitle: 'Stacked area chart with custom area skirt color', - childBuilder: () => StackedAreaCustomColorLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Area and Line Combo Chart', - subtitle: 'Combo chart with one line series and one area series', - childBuilder: () => AreaAndLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Points Line Chart', - subtitle: 'Line chart with points on a single series', - childBuilder: () => PointsLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Null Data Line Chart', - subtitle: 'With a single series and null measure values', - childBuilder: () => SimpleNullsLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Stacked Area with Nulls Chart', - subtitle: 'Stacked area chart with three series and null measure values', - childBuilder: () => StackedAreaNullsLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Dash Pattern Line Chart', - subtitle: 'Line chart with dash patterns', - childBuilder: () => DashPatternLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Segments Line Chart', - subtitle: 'Line chart with changes of style for each line', - childBuilder: () => SegmentsLineChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Line Annotation Line Chart', - subtitle: 'Line chart with line annotations', - childBuilder: () => LineLineAnnotationChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Range Annotation Line Chart', - subtitle: 'Line chart with range annotations', - childBuilder: () => LineRangeAnnotationChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Range Annotation Margin Labels Line Chart', - subtitle: 'Line chart with range annotations with labels in margins', - childBuilder: () => LineRangeAnnotationMarginChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Pan and Zoom Line Chart', - subtitle: 'Simple line chart pan and zoom behaviors enabled', - childBuilder: () => LineAnimationZoomChart.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/line_chart/points.dart b/web/charts/lib/line_chart/points.dart deleted file mode 100644 index d701569b2..000000000 --- a/web/charts/lib/line_chart/points.dart +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Line chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class PointsLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PointsLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory PointsLineChart.withSampleData() { - return PointsLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PointsLineChart.withRandomData() { - return PointsLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - animate: animate, - defaultRenderer: charts.LineRendererConfig(includePoints: true)); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/range_annotation.dart b/web/charts/lib/line_chart/range_annotation.dart deleted file mode 100644 index 840234463..000000000 --- a/web/charts/lib/line_chart/range_annotation.dart +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Line chart with range annotations example. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class LineRangeAnnotationChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LineRangeAnnotationChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and range annotations. - /// - /// The second annotation extends beyond the range of the series data, - /// demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] flag. - /// This can be set to false to disable range extension. - factory LineRangeAnnotationChart.withSampleData() { - return LineRangeAnnotationChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LineRangeAnnotationChart.withRandomData() { - return LineRangeAnnotationChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - // Fix one of the points to 100 so that the annotations are consistently - // placed. - LinearSales(3, 100), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate, behaviors: [ - charts.RangeAnnotation([ - charts.RangeAnnotationSegment( - 0.5, 1.0, charts.RangeAnnotationAxisType.domain, - startLabel: 'Domain 1'), - charts.RangeAnnotationSegment( - 2, 4, charts.RangeAnnotationAxisType.domain, - endLabel: 'Domain 2', color: charts.MaterialPalette.gray.shade200), - charts.RangeAnnotationSegment( - 15, 20, charts.RangeAnnotationAxisType.measure, - startLabel: 'Measure 1 Start', - endLabel: 'Measure 1 End', - color: charts.MaterialPalette.gray.shade300), - charts.RangeAnnotationSegment( - 35, 65, charts.RangeAnnotationAxisType.measure, - startLabel: 'Measure 2 Start', - endLabel: 'Measure 2 End', - color: charts.MaterialPalette.gray.shade400), - ]), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/range_annotation_margin.dart b/web/charts/lib/line_chart/range_annotation_margin.dart deleted file mode 100644 index 14f521b69..000000000 --- a/web/charts/lib/line_chart/range_annotation_margin.dart +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a line chart with range annotations configured to render labels -/// in the chart margin area. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class LineRangeAnnotationMarginChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const LineRangeAnnotationMarginChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and range annotations. - /// - /// The second annotation extends beyond the range of the series data, - /// demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] flag. - /// This can be set to false to disable range extension. - factory LineRangeAnnotationMarginChart.withSampleData() { - return LineRangeAnnotationMarginChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory LineRangeAnnotationMarginChart.withRandomData() { - return LineRangeAnnotationMarginChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - // Fix one of the points to 100 so that the annotations are consistently - // placed. - LinearSales(3, 100), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - animate: animate, - - // Allow enough space in the left and right chart margins for the - // annotations. - layoutConfig: charts.LayoutConfig( - leftMarginSpec: charts.MarginSpec.fixedPixel(60), - topMarginSpec: charts.MarginSpec.fixedPixel(20), - rightMarginSpec: charts.MarginSpec.fixedPixel(60), - bottomMarginSpec: charts.MarginSpec.fixedPixel(20)), - behaviors: [ - // Define one domain and two measure annotations configured to render - // labels in the chart margins. - charts.RangeAnnotation([ - charts.RangeAnnotationSegment( - 0.5, 1.0, charts.RangeAnnotationAxisType.domain, - startLabel: 'D1 Start', - endLabel: 'D1 End', - labelAnchor: charts.AnnotationLabelAnchor.end, - color: charts.MaterialPalette.gray.shade200, - // Override the default vertical direction for domain labels. - labelDirection: charts.AnnotationLabelDirection.horizontal), - charts.RangeAnnotationSegment( - 15, 20, charts.RangeAnnotationAxisType.measure, - startLabel: 'M1 Start', - endLabel: 'M1 End', - labelAnchor: charts.AnnotationLabelAnchor.end, - color: charts.MaterialPalette.gray.shade300), - charts.RangeAnnotationSegment( - 35, 65, charts.RangeAnnotationAxisType.measure, - startLabel: 'M2 Start', - endLabel: 'M2 End', - labelAnchor: charts.AnnotationLabelAnchor.start, - color: charts.MaterialPalette.gray.shade400), - ], defaultLabelPosition: charts.AnnotationLabelPosition.margin), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/segments.dart b/web/charts/lib/line_chart/segments.dart deleted file mode 100644 index 1f0c81b08..000000000 --- a/web/charts/lib/line_chart/segments.dart +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a stacked area chart with changing styles within each line. -/// -/// Each series of data in this example contains different values for color, -/// dashPattern, or strokeWidthPx between each datum. The line and area skirt -/// will be rendered in segments, with the styling of the series changing when -/// these data attributes change. -/// -/// Note that if a dashPattern or strokeWidth value is not found for a -/// particular datum, then the chart will fall back to use the value defined in -/// the [charts.LineRendererConfig]. This could be used, for example, to define -/// a default dash pattern for the series, with only a specific datum called out -/// with a different pattern. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SegmentsLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SegmentsLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory SegmentsLineChart.withSampleData() { - return SegmentsLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SegmentsLineChart.withRandomData() { - return SegmentsLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - // Series of data with static dash pattern and stroke width. The colorFn - // accessor will colorize each datum (for all three series). - final colorChangeData = [ - LinearSales(0, random.nextInt(100), null, 2.0), - LinearSales(1, random.nextInt(100), null, 2.0), - LinearSales(2, random.nextInt(100), null, 2.0), - LinearSales(3, random.nextInt(100), null, 2.0), - LinearSales(4, random.nextInt(100), null, 2.0), - LinearSales(5, random.nextInt(100), null, 2.0), - LinearSales(6, random.nextInt(100), null, 2.0), - ]; - - // Series of data with changing color and dash pattern. - final dashPatternChangeData = [ - LinearSales(0, random.nextInt(100), [2, 2], 2.0), - LinearSales(1, random.nextInt(100), [2, 2], 2.0), - LinearSales(2, random.nextInt(100), [4, 4], 2.0), - LinearSales(3, random.nextInt(100), [4, 4], 2.0), - LinearSales(4, random.nextInt(100), [4, 4], 2.0), - LinearSales(5, random.nextInt(100), [8, 3, 2, 3], 2.0), - LinearSales(6, random.nextInt(100), [8, 3, 2, 3], 2.0), - ]; - - // Series of data with changing color and stroke width. - final strokeWidthChangeData = [ - LinearSales(0, random.nextInt(100), null, 2.0), - LinearSales(1, random.nextInt(100), null, 2.0), - LinearSales(2, random.nextInt(100), null, 4.0), - LinearSales(3, random.nextInt(100), null, 4.0), - LinearSales(4, random.nextInt(100), null, 4.0), - LinearSales(5, random.nextInt(100), null, 6.0), - LinearSales(6, random.nextInt(100), null, 6.0), - ]; - - // Generate 2 shades of each color so that we can style the line segments. - final blue = charts.MaterialPalette.blue.makeShades(2); - final red = charts.MaterialPalette.red.makeShades(2); - final green = charts.MaterialPalette.green.makeShades(2); - - return [ - charts.Series( - id: 'Color Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? blue[1] : blue[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: colorChangeData, - ), - charts.Series( - id: 'Dash Pattern Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? red[1] : red[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: dashPatternChangeData, - ), - charts.Series( - id: 'Stroke Width Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? green[1] : green[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: strokeWidthChangeData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - defaultRenderer: - charts.LineRendererConfig(includeArea: true, stacked: true), - animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - // Series of data with static dash pattern and stroke width. The colorFn - // accessor will colorize each datum (for all three series). - final colorChangeData = [ - LinearSales(0, 5, null, 2.0), - LinearSales(1, 15, null, 2.0), - LinearSales(2, 25, null, 2.0), - LinearSales(3, 75, null, 2.0), - LinearSales(4, 100, null, 2.0), - LinearSales(5, 90, null, 2.0), - LinearSales(6, 75, null, 2.0), - ]; - - // Series of data with changing color and dash pattern. - final dashPatternChangeData = [ - LinearSales(0, 5, [2, 2], 2.0), - LinearSales(1, 15, [2, 2], 2.0), - LinearSales(2, 25, [4, 4], 2.0), - LinearSales(3, 75, [4, 4], 2.0), - LinearSales(4, 100, [4, 4], 2.0), - LinearSales(5, 90, [8, 3, 2, 3], 2.0), - LinearSales(6, 75, [8, 3, 2, 3], 2.0), - ]; - - // Series of data with changing color and stroke width. - final strokeWidthChangeData = [ - LinearSales(0, 5, null, 2.0), - LinearSales(1, 15, null, 2.0), - LinearSales(2, 25, null, 4.0), - LinearSales(3, 75, null, 4.0), - LinearSales(4, 100, null, 4.0), - LinearSales(5, 90, null, 6.0), - LinearSales(6, 75, null, 6.0), - ]; - - // Generate 2 shades of each color so that we can style the line segments. - final blue = charts.MaterialPalette.blue.makeShades(2); - final red = charts.MaterialPalette.red.makeShades(2); - final green = charts.MaterialPalette.green.makeShades(2); - - return [ - charts.Series( - id: 'Color Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? blue[1] : blue[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: colorChangeData, - ), - charts.Series( - id: 'Dash Pattern Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? red[1] : red[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: dashPatternChangeData, - ), - charts.Series( - id: 'Stroke Width Change', - // Light shade for even years, dark shade for odd. - colorFn: (LinearSales sales, _) => - sales.year % 2 == 0 ? green[1] : green[0], - dashPatternFn: (LinearSales sales, _) => sales.dashPattern, - strokeWidthPxFn: (LinearSales sales, _) => sales.strokeWidthPx, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: strokeWidthChangeData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final List? dashPattern; - final double strokeWidthPx; - - LinearSales(this.year, this.sales, this.dashPattern, this.strokeWidthPx); -} diff --git a/web/charts/lib/line_chart/simple.dart b/web/charts/lib/line_chart/simple.dart deleted file mode 100644 index b8abd849d..000000000 --- a/web/charts/lib/line_chart/simple.dart +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a simple line chart. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimpleLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory SimpleLineChart.withSampleData() { - return SimpleLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleLineChart.withRandomData() { - return SimpleLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/simple_nulls.dart b/web/charts/lib/line_chart/simple_nulls.dart deleted file mode 100644 index 1a7046c6b..000000000 --- a/web/charts/lib/line_chart/simple_nulls.dart +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a line chart with null measure values. -/// -/// Null values will be visible as gaps in lines and area skirts. Any data -/// points that exist between two nulls in a line will be rendered as an -/// isolated point, as seen in the green series. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimpleNullsLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleNullsLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory SimpleNullsLineChart.withSampleData() { - return SimpleNullsLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleNullsLineChart.withRandomData() { - return SimpleNullsLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myFakeDesktopData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, null), - LinearSales(3, random.nextInt(100)), - LinearSales(4, random.nextInt(100)), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - ]; - - var myFakeTabletData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - LinearSales(4, random.nextInt(100)), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - ]; - - var myFakeMobileData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, null), - LinearSales(3, random.nextInt(100)), - LinearSales(4, null), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(0, 5), - LinearSales(1, 15), - LinearSales(2, null), - LinearSales(3, 75), - LinearSales(4, 100), - LinearSales(5, 90), - LinearSales(6, 75), - ]; - - final myFakeTabletData = [ - LinearSales(0, 10), - LinearSales(1, 30), - LinearSales(2, 50), - LinearSales(3, 150), - LinearSales(4, 200), - LinearSales(5, 180), - LinearSales(6, 150), - ]; - - final myFakeMobileData = [ - LinearSales(0, 15), - LinearSales(1, 45), - LinearSales(2, null), - LinearSales(3, 225), - LinearSales(4, null), - LinearSales(5, 270), - LinearSales(6, 225), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int? sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/stacked_area.dart b/web/charts/lib/line_chart/stacked_area.dart deleted file mode 100644 index 6c6d06ac4..000000000 --- a/web/charts/lib/line_chart/stacked_area.dart +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a stacked area chart. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class StackedAreaLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedAreaLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory StackedAreaLineChart.withSampleData() { - return StackedAreaLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedAreaLineChart.withRandomData() { - return StackedAreaLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myFakeDesktopData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeTabletData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeMobileData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - defaultRenderer: - charts.LineRendererConfig(includeArea: true, stacked: true), - animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - var myFakeTabletData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - var myFakeMobileData = [ - LinearSales(0, 15), - LinearSales(1, 75), - LinearSales(2, 300), - LinearSales(3, 225), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/stacked_area_custom_color.dart b/web/charts/lib/line_chart/stacked_area_custom_color.dart deleted file mode 100644 index 04b83f120..000000000 --- a/web/charts/lib/line_chart/stacked_area_custom_color.dart +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a stacked area chart with custom area colors. -/// -/// By default, the area skirt for a chart will be drawn with the same color as -/// the line, but with a 10% opacity assigned to it. An area color function can -/// be provided to override this with any custom color. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class StackedAreaCustomColorLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedAreaCustomColorLineChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory StackedAreaCustomColorLineChart.withSampleData() { - return StackedAreaCustomColorLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedAreaCustomColorLineChart.withRandomData() { - return StackedAreaCustomColorLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myFakeDesktopData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeTabletData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - var myFakeMobileData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - defaultRenderer: - charts.LineRendererConfig(includeArea: true, stacked: true), - animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(0, 5), - LinearSales(1, 25), - LinearSales(2, 100), - LinearSales(3, 75), - ]; - - var myFakeTabletData = [ - LinearSales(0, 10), - LinearSales(1, 50), - LinearSales(2, 200), - LinearSales(3, 150), - ]; - - var myFakeMobileData = [ - LinearSales(0, 15), - LinearSales(1, 75), - LinearSales(2, 300), - LinearSales(3, 225), - ]; - - return [ - charts.Series( - id: 'Desktop', - // colorFn specifies that the line will be blue. - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - // areaColorFn specifies that the area skirt will be light blue. - areaColorFn: (_, __) => - charts.MaterialPalette.blue.shadeDefault.lighter, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - // colorFn specifies that the line will be red. - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - // areaColorFn specifies that the area skirt will be light red. - areaColorFn: (_, __) => charts.MaterialPalette.red.shadeDefault.lighter, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - // colorFn specifies that the line will be green. - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - // areaColorFn specifies that the area skirt will be light green. - areaColorFn: (_, __) => - charts.MaterialPalette.green.shadeDefault.lighter, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/line_chart/stacked_area_nulls.dart b/web/charts/lib/line_chart/stacked_area_nulls.dart deleted file mode 100644 index 3343c06e8..000000000 --- a/web/charts/lib/line_chart/stacked_area_nulls.dart +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a stacked area chart with null measure values. -/// -/// Null values will be visible as gaps in lines and area skirts. Any data -/// points that exist between two nulls in a line will be rendered as an -/// isolated point, as seen in the green series. -/// -/// In a stacked area chart, no data above a null value in the stack will be -/// rendered. In this example, the null measure value at domain 2 in the Desktop -/// series will prevent any data from being rendered at domain 2 for every -/// series because it is at the bottom of the stack. -/// -/// This will also result in an isolated point being rendered for the domain -/// value 3 in the Mobile series, because that series also contains a null at -/// domain 4. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class StackedAreaNullsLineChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const StackedAreaNullsLineChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [LineChart] with sample data and no transition. - factory StackedAreaNullsLineChart.withSampleData() { - return StackedAreaNullsLineChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory StackedAreaNullsLineChart.withRandomData() { - return StackedAreaNullsLineChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myFakeDesktopData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, null), - LinearSales(3, random.nextInt(100)), - LinearSales(4, random.nextInt(100)), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - ]; - - var myFakeTabletData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - LinearSales(4, random.nextInt(100)), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - ]; - - var myFakeMobileData = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - LinearSales(4, null), - LinearSales(5, random.nextInt(100)), - LinearSales(6, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.LineChart(seriesList, - defaultRenderer: - charts.LineRendererConfig(includeArea: true, stacked: true), - animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(0, 5), - LinearSales(1, 15), - LinearSales(2, null), - LinearSales(3, 75), - LinearSales(4, 100), - LinearSales(5, 90), - LinearSales(6, 75), - ]; - - final myFakeTabletData = [ - LinearSales(0, 5), - LinearSales(1, 15), - LinearSales(2, 25), - LinearSales(3, 75), - LinearSales(4, 100), - LinearSales(5, 90), - LinearSales(6, 75), - ]; - - final myFakeMobileData = [ - LinearSales(0, 5), - LinearSales(1, 15), - LinearSales(2, 25), - LinearSales(3, 75), - LinearSales(4, null), - LinearSales(5, 90), - LinearSales(6, 75), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeTabletData, - ), - charts.Series( - id: 'Mobile', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: myFakeMobileData, - ), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int? sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/main.dart b/web/charts/lib/main.dart deleted file mode 100644 index 64aa979c3..000000000 --- a/web/charts/lib/main.dart +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import 'app_config.dart'; -import 'home.dart'; - -/// The main gallery app widget. -class GalleryApp extends StatefulWidget { - const GalleryApp({Key? key}) : super(key: key); - - @override - State createState() => _GalleryAppState(); -} - -/// The main gallery app state. -/// -/// Controls performance overlay, and instantiates a [Home] widget. -class _GalleryAppState extends State { - // Initialize app settings from the default configuration. - bool _showPerformanceOverlay = defaultConfig.showPerformanceOverlay; - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: defaultConfig.appName, - theme: defaultConfig.theme, - showPerformanceOverlay: _showPerformanceOverlay, - home: Home( - showPerformanceOverlay: _showPerformanceOverlay, - onShowPerformanceOverlayChanged: (bool value) { - setState(() { - _showPerformanceOverlay = value; - }); - }, - )); - } -} - -void main() { - runApp(const GalleryApp()); -} diff --git a/web/charts/lib/pie_chart/auto_label.dart b/web/charts/lib/pie_chart/auto_label.dart deleted file mode 100644 index 93d03d1df..000000000 --- a/web/charts/lib/pie_chart/auto_label.dart +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Donut chart with labels example. This is a simple pie chart with a hole in -/// the middle. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class DonutAutoLabelChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DonutAutoLabelChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [PieChart] with sample data and no transition. - factory DonutAutoLabelChart.withSampleData() { - return DonutAutoLabelChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DonutAutoLabelChart.withRandomData() { - return DonutAutoLabelChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the arc label. - labelAccessorFn: (LinearSales row, _) => '${row.year}: ${row.sales}', - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart(seriesList, - animate: animate, - // Configure the width of the pie slices to 60px. The remaining space in - // the chart will be left as a hole in the center. - // - // [ArcLabelDecorator] will automatically position the label inside the - // arc if the label will fit. If the label will not fit, it will draw - // outside of the arc with a leader line. Labels can always display - // inside or outside using [LabelPosition]. - // - // Text style for inside / outside can be controlled independently by - // setting [insideLabelStyleSpec] and [outsideLabelStyleSpec]. - // - // Example configuring different styles for inside/outside: - // new charts.ArcLabelDecorator( - // insideLabelStyleSpec: new charts.TextStyleSpec(...), - // outsideLabelStyleSpec: new charts.TextStyleSpec(...)), - defaultRenderer: charts.ArcRendererConfig( - arcWidth: 60, arcRendererDecorators: [charts.ArcLabelDecorator()])); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the arc label. - labelAccessorFn: (LinearSales row, _) => '${row.year}: ${row.sales}', - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/pie_chart/donut.dart b/web/charts/lib/pie_chart/donut.dart deleted file mode 100644 index 325a9903a..000000000 --- a/web/charts/lib/pie_chart/donut.dart +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Donut chart example. This is a simple pie chart with a hole in the middle. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class DonutPieChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const DonutPieChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [PieChart] with sample data and no transition. - factory DonutPieChart.withSampleData() { - return DonutPieChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory DonutPieChart.withRandomData() { - return DonutPieChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart(seriesList, - animate: animate, - // Configure the width of the pie slices to 60px. The remaining space in - // the chart will be left as a hole in the center. - defaultRenderer: charts.ArcRendererConfig(arcWidth: 60)); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/pie_chart/gauge.dart b/web/charts/lib/pie_chart/gauge.dart deleted file mode 100644 index 10e0a21cd..000000000 --- a/web/charts/lib/pie_chart/gauge.dart +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Gauge chart example, where the data does not cover a full revolution in the -/// chart. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class GaugeChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const GaugeChart(this.seriesList, {this.animate, Key? key}) : super(key: key); - - /// Creates a [PieChart] with sample data and no transition. - factory GaugeChart.withSampleData() { - return GaugeChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory GaugeChart.withRandomData() { - return GaugeChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - GaugeSegment('Low', random.nextInt(100)), - GaugeSegment('Acceptable', random.nextInt(100)), - GaugeSegment('High', random.nextInt(100)), - GaugeSegment('Highly Unusual', random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Segments', - domainFn: (GaugeSegment segment, _) => segment.segment, - measureFn: (GaugeSegment segment, _) => segment.size, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart(seriesList, - animate: animate, - // Configure the width of the pie slices to 30px. The remaining space in - // the chart will be left as a hole in the center. Adjust the start - // angle and the arc length of the pie so it resembles a gauge. - defaultRenderer: charts.ArcRendererConfig( - arcWidth: 30, startAngle: 4 / 5 * pi, arcLength: 7 / 5 * pi)); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - GaugeSegment('Low', 75), - GaugeSegment('Acceptable', 100), - GaugeSegment('High', 50), - GaugeSegment('Highly Unusual', 5), - ]; - - return [ - charts.Series( - id: 'Segments', - domainFn: (GaugeSegment segment, _) => segment.segment, - measureFn: (GaugeSegment segment, _) => segment.size, - data: data, - ) - ]; - } -} - -/// Sample data type. -class GaugeSegment { - final String segment; - final int size; - - GaugeSegment(this.segment, this.size); -} diff --git a/web/charts/lib/pie_chart/outside_label.dart b/web/charts/lib/pie_chart/outside_label.dart deleted file mode 100644 index 0897149bb..000000000 --- a/web/charts/lib/pie_chart/outside_label.dart +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Simple pie chart with outside labels example. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class PieOutsideLabelChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PieOutsideLabelChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [PieChart] with sample data and no transition. - factory PieOutsideLabelChart.withSampleData() { - return PieOutsideLabelChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PieOutsideLabelChart.withRandomData() { - return PieOutsideLabelChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the arc label. - labelAccessorFn: (LinearSales row, _) => '${row.year}: ${row.sales}', - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart(seriesList, - animate: animate, - // Add an [ArcLabelDecorator] configured to render labels outside of the - // arc with a leader line. - // - // Text style for inside / outside can be controlled independently by - // setting [insideLabelStyleSpec] and [outsideLabelStyleSpec]. - // - // Example configuring different styles for inside/outside: - // new charts.ArcLabelDecorator( - // insideLabelStyleSpec: new charts.TextStyleSpec(...), - // outsideLabelStyleSpec: new charts.TextStyleSpec(...)), - defaultRenderer: charts.ArcRendererConfig(arcRendererDecorators: [ - charts.ArcLabelDecorator( - labelPosition: charts.ArcLabelPosition.outside) - ])); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - // Set a label accessor to control the text of the arc label. - labelAccessorFn: (LinearSales row, _) => '${row.year}: ${row.sales}', - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/pie_chart/partial_pie.dart b/web/charts/lib/pie_chart/partial_pie.dart deleted file mode 100644 index e7be30b65..000000000 --- a/web/charts/lib/pie_chart/partial_pie.dart +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Partial pie chart example, where the data does not cover a full revolution -/// in the chart. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class PartialPieChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const PartialPieChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [PieChart] with sample data and no transition. - factory PartialPieChart.withSampleData() { - return PartialPieChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory PartialPieChart.withRandomData() { - return PartialPieChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - // Configure the pie to display the data across only 3/4 instead of the full - // revolution. - return charts.PieChart(seriesList, - animate: animate, - defaultRenderer: charts.ArcRendererConfig(arcLength: 3 / 2 * pi)); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/pie_chart/pie_gallery.dart b/web/charts/lib/pie_chart/pie_gallery.dart deleted file mode 100644 index f43a9ee0e..000000000 --- a/web/charts/lib/pie_chart/pie_gallery.dart +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'auto_label.dart'; -import 'donut.dart'; -import 'gauge.dart'; -import 'simple.dart'; -import 'outside_label.dart'; -import 'partial_pie.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Simple Pie Chart', - subtitle: 'With a single series', - childBuilder: () => SimplePieChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Outside Label Pie Chart', - subtitle: 'With a single series and labels outside the arcs', - childBuilder: () => PieOutsideLabelChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Partial Pie Chart', - subtitle: 'That doesn\'t cover a full revolution', - childBuilder: () => PartialPieChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Simple Donut Chart', - subtitle: 'With a single series and a hole in the middle', - childBuilder: () => DonutPieChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Auto Label Donut Chart', - subtitle: - 'With a single series, a hole in the middle, and auto-positioned labels', - childBuilder: () => DonutAutoLabelChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.pie_chart), - title: 'Gauge Chart', - subtitle: 'That doesn\'t cover a full revolution', - childBuilder: () => GaugeChart.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/pie_chart/simple.dart b/web/charts/lib/pie_chart/simple.dart deleted file mode 100644 index fd95084c4..000000000 --- a/web/charts/lib/pie_chart/simple.dart +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Simple pie chart example. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimplePieChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimplePieChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [PieChart] with sample data and no transition. - factory SimplePieChart.withSampleData() { - return SimplePieChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimplePieChart.withRandomData() { - return SimplePieChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - LinearSales(0, random.nextInt(100)), - LinearSales(1, random.nextInt(100)), - LinearSales(2, random.nextInt(100)), - LinearSales(3, random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.PieChart(seriesList, animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 100), - LinearSales(1, 75), - LinearSales(2, 25), - LinearSales(3, 5), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - - LinearSales(this.year, this.sales); -} diff --git a/web/charts/lib/scatter_plot_chart/animation_zoom.dart b/web/charts/lib/scatter_plot_chart/animation_zoom.dart deleted file mode 100644 index 8a42573c9..000000000 --- a/web/charts/lib/scatter_plot_chart/animation_zoom.dart +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a line chart with pan and zoom enabled via -/// [Charts.PanAndZoomBehavior]. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class ScatterPlotAnimationZoomChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const ScatterPlotAnimationZoomChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory ScatterPlotAnimationZoomChart.withSampleData() { - return ScatterPlotAnimationZoomChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory ScatterPlotAnimationZoomChart.withRandomData() { - return ScatterPlotAnimationZoomChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = []; - - makeRadius(int value) => (random.nextInt(value) + 2).toDouble(); - - for (var i = 0; i < 100; i++) { - data.add(LinearSales(i, random.nextInt(100), makeRadius(4))); - } - - const maxMeasure = 100; - - return [ - charts.Series( - id: 'Sales', - colorFn: (LinearSales sales, _) { - // Color bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, animate: animate, behaviors: [ - charts.PanAndZoomBehavior(), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5, 3.0), - LinearSales(10, 25, 5.0), - LinearSales(12, 75, 4.0), - LinearSales(13, 225, 5.0), - LinearSales(16, 50, 4.0), - LinearSales(24, 75, 3.0), - LinearSales(25, 100, 3.0), - LinearSales(34, 150, 5.0), - LinearSales(37, 10, 4.5), - LinearSales(45, 300, 8.0), - LinearSales(52, 15, 4.0), - LinearSales(56, 200, 7.0), - ]; - - const maxMeasure = 300; - - return [ - charts.Series( - id: 'Sales', - colorFn: (LinearSales sales, _) { - // Color bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final double radius; - - LinearSales(this.year, this.sales, this.radius); -} diff --git a/web/charts/lib/scatter_plot_chart/bucketing_axis.dart b/web/charts/lib/scatter_plot_chart/bucketing_axis.dart deleted file mode 100644 index d7a9fdd46..000000000 --- a/web/charts/lib/scatter_plot_chart/bucketing_axis.dart +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a scatter plot chart with a bucketing measure axis and a legend. -/// -/// A bucketing measure axis positions all values beneath a certain threshold -/// into a reserved space on the axis range. The label for the bucket line will -/// be drawn in the middle of the bucket range, rather than aligned with the -/// gridline for that value's position on the scale. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class BucketingAxisScatterPlotChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const BucketingAxisScatterPlotChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory BucketingAxisScatterPlotChart.withSampleData() { - return BucketingAxisScatterPlotChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory BucketingAxisScatterPlotChart.withRandomData() { - return BucketingAxisScatterPlotChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - makeRadius(int value) => (random.nextInt(value) + 6).toDouble(); - - // Make sure that the measure values for the first five series are well - // above the threshold. This simulates the grouping of the small values into - // the "Other" series. - final myFakeDesktopData = [ - LinearSales( - random.nextInt(100), (random.nextInt(50) + 50) / 100, makeRadius(6)), - ]; - - final myFakeTabletData = [ - LinearSales( - random.nextInt(100), (random.nextInt(50) + 50) / 100, makeRadius(6)), - ]; - - final myFakeMobileData = [ - LinearSales( - random.nextInt(100), (random.nextInt(50) + 50) / 100, makeRadius(6)), - ]; - - final myFakeChromebookData = [ - LinearSales( - random.nextInt(100), (random.nextInt(50) + 50) / 100, makeRadius(6)), - ]; - - final myFakeHomeData = [ - LinearSales( - random.nextInt(100), (random.nextInt(50) + 50) / 100, makeRadius(6)), - ]; - - // Make sure that the "Other" series values are smaller. - final myFakeOtherData = [ - LinearSales(random.nextInt(100), random.nextInt(50) / 100, makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(50) / 100, makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(50) / 100, makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(50) / 100, makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(50) / 100, makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(50) / 100, makeRadius(6)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeDesktopData), - charts.Series( - id: 'Tablet', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeTabletData), - charts.Series( - id: 'Mobile', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeMobileData), - charts.Series( - id: 'Chromebook', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.purple.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeChromebookData), - charts.Series( - id: 'Home', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.indigo.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeHomeData), - charts.Series( - id: 'Other', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.gray.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeOtherData), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, - // Set up a bucketing axis that will place all values below 0.1 (10%) - // into a bucket at the bottom of the chart. - // - // Configure a tick count of 3 so that we get 100%, 50%, and the - // threshold. - primaryMeasureAxis: charts.BucketingAxisSpec( - threshold: 0.1, - tickProviderSpec: const charts.BucketingNumericTickProviderSpec( - desiredTickCount: 3)), - // Add a series legend to display the series names. - behaviors: [ - charts.SeriesLegend(position: charts.BehaviorPosition.end), - ], - animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myFakeDesktopData = [ - LinearSales(52, 0.75, 14.0), - ]; - - final myFakeTabletData = [ - LinearSales(45, 0.3, 18.0), - ]; - - final myFakeMobileData = [ - LinearSales(56, 0.8, 17.0), - ]; - - final myFakeChromebookData = [ - LinearSales(25, 0.6, 13.0), - ]; - - final myFakeHomeData = [ - LinearSales(34, 0.5, 15.0), - ]; - - final myFakeOtherData = [ - LinearSales(10, 0.25, 15.0), - LinearSales(12, 0.075, 14.0), - LinearSales(13, 0.225, 15.0), - LinearSales(16, 0.03, 14.0), - LinearSales(24, 0.04, 13.0), - LinearSales(37, 0.1, 14.5), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.blue.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeDesktopData), - charts.Series( - id: 'Tablet', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.red.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeTabletData), - charts.Series( - id: 'Mobile', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.green.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeMobileData), - charts.Series( - id: 'Chromebook', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.purple.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeChromebookData), - charts.Series( - id: 'Home', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.indigo.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeHomeData), - charts.Series( - id: 'Other', - colorFn: (LinearSales sales, _) => - charts.MaterialPalette.gray.shadeDefault, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.revenueShare, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: myFakeOtherData), - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final double revenueShare; - final double radius; - - LinearSales(this.year, this.revenueShare, this.radius); -} diff --git a/web/charts/lib/scatter_plot_chart/comparison_points.dart b/web/charts/lib/scatter_plot_chart/comparison_points.dart deleted file mode 100644 index 04f00fa43..000000000 --- a/web/charts/lib/scatter_plot_chart/comparison_points.dart +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Line chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class ComparisonPointsScatterPlotChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const ComparisonPointsScatterPlotChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory ComparisonPointsScatterPlotChart.withSampleData() { - return ComparisonPointsScatterPlotChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory ComparisonPointsScatterPlotChart.withRandomData() { - return ComparisonPointsScatterPlotChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - const maxMeasure = 100; - - final data = [ - _makeRandomDatum(maxMeasure, random), - _makeRandomDatum(maxMeasure, random), - _makeRandomDatum(maxMeasure, random), - _makeRandomDatum(maxMeasure, random), - _makeRandomDatum(maxMeasure, random), - _makeRandomDatum(maxMeasure, random), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (LinearSales sales, _) { - // Color bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - domainLowerBoundFn: (LinearSales sales, _) => sales.yearLower, - domainUpperBoundFn: (LinearSales sales, _) => sales.yearUpper, - measureFn: (LinearSales sales, _) => sales.sales, - measureLowerBoundFn: (LinearSales sales, _) => sales.salesLower, - measureUpperBoundFn: (LinearSales sales, _) => sales.salesUpper, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: data, - ) - ]; - } - - static LinearSales _makeRandomDatum(int max, Random random) { - makeRadius(int value) => (random.nextInt(value) + 6).toDouble(); - - final year = random.nextInt(max); - final yearLower = (year * 0.8).round(); - final yearUpper = year; - final sales = random.nextInt(max); - final salesLower = (sales * 0.8).round(); - final salesUpper = sales; - - return LinearSales(year, yearLower, yearUpper, sales, salesLower, - salesUpper, makeRadius(4)); - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, - animate: animate, - defaultRenderer: charts.PointRendererConfig(pointRendererDecorators: [ - charts.ComparisonPointsDecorator( - symbolRenderer: charts.CylinderSymbolRenderer()) - ])); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(10, 7, 10, 25, 20, 25, 5.0), - LinearSales(13, 11, 13, 225, 205, 225, 5.0), - LinearSales(34, 34, 24, 150, 150, 130, 5.0), - LinearSales(37, 37, 57, 10, 10, 12, 6.5), - LinearSales(45, 35, 45, 260, 300, 260, 8.0), - LinearSales(56, 46, 56, 200, 170, 200, 7.0), - ]; - - const maxMeasure = 300; - - return [ - charts.Series( - id: 'Sales', - // Providing a color function is optional. - colorFn: (LinearSales sales, _) { - // Bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - domainLowerBoundFn: (LinearSales sales, _) => sales.yearLower, - domainUpperBoundFn: (LinearSales sales, _) => sales.yearUpper, - measureFn: (LinearSales sales, _) => sales.sales, - measureLowerBoundFn: (LinearSales sales, _) => sales.salesLower, - measureUpperBoundFn: (LinearSales sales, _) => sales.salesUpper, - // Providing a radius function is optional. - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int yearLower; - final int yearUpper; - final int sales; - final int salesLower; - final int salesUpper; - final double radius; - - LinearSales(this.year, this.yearLower, this.yearUpper, this.sales, - this.salesLower, this.salesUpper, this.radius); -} diff --git a/web/charts/lib/scatter_plot_chart/scatter_plot_gallery.dart b/web/charts/lib/scatter_plot_chart/scatter_plot_gallery.dart deleted file mode 100644 index 432812e6c..000000000 --- a/web/charts/lib/scatter_plot_chart/scatter_plot_gallery.dart +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'animation_zoom.dart'; -import 'bucketing_axis.dart'; -import 'comparison_points.dart'; -import 'shapes.dart'; -import 'simple.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.scatter_plot), - title: 'Simple Scatter Plot Chart', - subtitle: 'With a single series', - childBuilder: () => SimpleScatterPlotChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.scatter_plot), - title: 'Shapes Scatter Plot Chart', - subtitle: 'With custom shapes', - childBuilder: () => ShapesScatterPlotChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.scatter_plot), - title: 'Comparison Points Scatter Plot Chart', - subtitle: 'Scatter plot chart with comparison points', - childBuilder: () => ComparisonPointsScatterPlotChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.scatter_plot), - title: 'Pan and Zoom Scatter Plot Chart', - subtitle: 'Simple scatter plot chart pan and zoom behaviors enabled', - childBuilder: () => ScatterPlotAnimationZoomChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.scatter_plot), - title: 'Bucketing Axis Scatter Plot Chart', - subtitle: 'Scatter plot with a measure axis that buckets values less ' - 'than 10% into a single region below the draw area', - childBuilder: () => BucketingAxisScatterPlotChart.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/scatter_plot_chart/shapes.dart b/web/charts/lib/scatter_plot_chart/shapes.dart deleted file mode 100644 index be93d7003..000000000 --- a/web/charts/lib/scatter_plot_chart/shapes.dart +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a scatter plot chart using custom symbols for the points. -/// -/// The series has been configured to draw each point as a square by default. -/// -/// Some data will be drawn as a circle, indicated by defining a custom "circle" -/// value referenced by [pointSymbolRendererFnKey]. -/// -/// Some other data have will be drawn as a hollow circle. In addition to the -/// custom renderer key, these data also have stroke and fillColor values -/// defined. Configuring a separate fillColor will cause the center of the shape -/// to be filled in, with white in these examples. The border of the shape will -/// be color with the color of the data. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class ShapesScatterPlotChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const ShapesScatterPlotChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory ShapesScatterPlotChart.withSampleData() { - return ShapesScatterPlotChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory ShapesScatterPlotChart.withRandomData() { - return ShapesScatterPlotChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - makeRadius(int value) => (random.nextInt(value) + 2).toDouble(); - - final data = [ - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), - 'circle', null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - // Render a hollow circle, filled in with white. - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(4) + 4, - 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), - 'circle', null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - // Render a hollow circle, filled in with white. - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(4) + 4, - 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6), null, - null, null), - // Render a hollow square, filled in with white. - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(4) + 4, - null, charts.MaterialPalette.white, 2.0), - ]; - - const maxMeasure = 100; - - return [ - charts.Series( - id: 'Sales', - colorFn: (LinearSales sales, _) { - // Color bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - fillColorFn: (LinearSales row, _) => row.fillColor, - strokeWidthPxFn: (LinearSales row, _) => row.strokeWidth, - data: data, - ) - // Accessor function that associates each datum with a symbol renderer. - ..setAttribute( - charts.pointSymbolRendererFnKey, (int index) => data[index].shape) - // Default symbol renderer ID for data that have no defined shape. - ..setAttribute(charts.pointSymbolRendererIdKey, 'rect') - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, - animate: animate, - // Configure the point renderer to have a map of custom symbol - // renderers. - defaultRenderer: - charts.PointRendererConfig(customSymbolRenderers: { - 'circle': charts.CircleSymbolRenderer(), - 'rect': charts.RectSymbolRenderer(), - })); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5, 3.0, 'circle', null, null), - LinearSales(10, 25, 5.0, null, null, null), - LinearSales(12, 75, 4.0, null, null, null), - // Render a hollow circle, filled in with white. - LinearSales(13, 225, 5.0, 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(16, 50, 4.0, null, null, null), - LinearSales(24, 75, 3.0, null, null, null), - LinearSales(25, 100, 3.0, 'circle', null, null), - LinearSales(34, 150, 5.0, null, null, null), - LinearSales(37, 10, 4.5, null, null, null), - // Render a hollow circle, filled in with white. - LinearSales(45, 300, 8.0, 'circle', charts.MaterialPalette.white, 2.0), - LinearSales(52, 15, 4.0, null, null, null), - // Render a hollow square, filled in with white. - LinearSales(56, 200, 7.0, null, charts.MaterialPalette.white, 2.0), - ]; - - const maxMeasure = 300; - - return [ - charts.Series( - id: 'Sales', - // Providing a color function is optional. - colorFn: (LinearSales sales, _) { - // Bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - fillColorFn: (LinearSales row, _) => row.fillColor, - strokeWidthPxFn: (LinearSales row, _) => row.strokeWidth, - data: data, - ) - // Accessor function that associates each datum with a symbol renderer. - ..setAttribute( - charts.pointSymbolRendererFnKey, (int index) => data[index].shape) - // Default symbol renderer ID for data that have no defined shape. - ..setAttribute(charts.pointSymbolRendererIdKey, 'rect') - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final double radius; - final String? shape; - final charts.Color? fillColor; - final double? strokeWidth; - - LinearSales(this.year, this.sales, this.radius, this.shape, this.fillColor, - this.strokeWidth); -} diff --git a/web/charts/lib/scatter_plot_chart/simple.dart b/web/charts/lib/scatter_plot_chart/simple.dart deleted file mode 100644 index 4a033fbdd..000000000 --- a/web/charts/lib/scatter_plot_chart/simple.dart +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Scatter plot chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimpleScatterPlotChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleScatterPlotChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [ScatterPlotChart] with sample data and no transition. - factory SimpleScatterPlotChart.withSampleData() { - return SimpleScatterPlotChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleScatterPlotChart.withRandomData() { - return SimpleScatterPlotChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - makeRadius(int value) => (random.nextInt(value) + 2).toDouble(); - - final data = [ - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - LinearSales(random.nextInt(100), random.nextInt(100), makeRadius(6)), - ]; - - const maxMeasure = 100; - - return [ - charts.Series( - id: 'Sales', - colorFn: (LinearSales sales, _) { - // Color bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.ScatterPlotChart(seriesList, animate: animate); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - LinearSales(0, 5, 3.0), - LinearSales(10, 25, 5.0), - LinearSales(12, 75, 4.0), - LinearSales(13, 225, 5.0), - LinearSales(16, 50, 4.0), - LinearSales(24, 75, 3.0), - LinearSales(25, 100, 3.0), - LinearSales(34, 150, 5.0), - LinearSales(37, 10, 4.5), - LinearSales(45, 300, 8.0), - LinearSales(52, 15, 4.0), - LinearSales(56, 200, 7.0), - ]; - - const maxMeasure = 300; - - return [ - charts.Series( - id: 'Sales', - // Providing a color function is optional. - colorFn: (LinearSales sales, _) { - // Bucket the measure column value into 3 distinct colors. - final bucket = sales.sales / maxMeasure; - - if (bucket < 1 / 3) { - return charts.MaterialPalette.blue.shadeDefault; - } else if (bucket < 2 / 3) { - return charts.MaterialPalette.red.shadeDefault; - } else { - return charts.MaterialPalette.green.shadeDefault; - } - }, - domainFn: (LinearSales sales, _) => sales.year, - measureFn: (LinearSales sales, _) => sales.sales, - // Providing a radius function is optional. - radiusPxFn: (LinearSales sales, _) => sales.radius, - data: data, - ) - ]; - } -} - -/// Sample linear data type. -class LinearSales { - final int year; - final int sales; - final double radius; - - LinearSales(this.year, this.sales, this.radius); -} diff --git a/web/charts/lib/time_series_chart/confidence_interval.dart b/web/charts/lib/time_series_chart/confidence_interval.dart deleted file mode 100644 index 914d462ba..000000000 --- a/web/charts/lib/time_series_chart/confidence_interval.dart +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a time series chart with a confidence interval. -/// -/// Confidence interval is defined by specifying the upper and lower measure -/// bounds in the series. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesConfidenceInterval extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const TimeSeriesConfidenceInterval(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory TimeSeriesConfidenceInterval.withSampleData() { - return TimeSeriesConfidenceInterval( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory TimeSeriesConfidenceInterval.withRandomData() { - return TimeSeriesConfidenceInterval(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - // When the measureLowerBoundFn and measureUpperBoundFn is defined, - // the line renderer will render the area around the bounds. - measureLowerBoundFn: (TimeSeriesSales sales, _) => sales.sales - 5, - measureUpperBoundFn: (TimeSeriesSales sales, _) => sales.sales + 5, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Optionally pass in a [DateTimeFactory] used by the chart. The factory - // should create the same type of [DateTime] as the data provided. If none - // specified, the default creates local date time. - dateTimeFactory: const charts.LocalDateTimeFactory(), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - // When the measureLowerBoundFn and measureUpperBoundFn is defined, - // the line renderer will render the area around the bounds. - measureLowerBoundFn: (TimeSeriesSales sales, _) => sales.sales - 5, - measureUpperBoundFn: (TimeSeriesSales sales, _) => sales.sales + 5, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/time_series_chart/end_points_axis.dart b/web/charts/lib/time_series_chart/end_points_axis.dart deleted file mode 100644 index e0b312ee4..000000000 --- a/web/charts/lib/time_series_chart/end_points_axis.dart +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a time series chart with an end points domain axis. -/// -/// An end points axis generates two ticks, one at each end of the axis range. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class EndPointsAxisTimeSeriesChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const EndPointsAxisTimeSeriesChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory EndPointsAxisTimeSeriesChart.withSampleData() { - return EndPointsAxisTimeSeriesChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory EndPointsAxisTimeSeriesChart.withRandomData() { - return EndPointsAxisTimeSeriesChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Configures an axis spec that is configured to render one tick at each - // end of the axis range, anchored "inside" the axis. The start tick label - // will be left-aligned with its tick mark, and the end tick label will be - // right-aligned with its tick mark. - domainAxis: const charts.EndPointsTimeAxisSpec(), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/time_series_chart/line_annotation.dart b/web/charts/lib/time_series_chart/line_annotation.dart deleted file mode 100644 index 726cecff8..000000000 --- a/web/charts/lib/time_series_chart/line_annotation.dart +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Time series chart with line annotation example -/// -/// The example future range annotation extends beyond the range of the series -/// data, demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] -/// flag. This can be set to false to disable range extension. -/// -/// Additional annotations may be added simply by adding additional -/// [Charts.RangeAnnotationSegment] items to the list. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesLineAnnotationChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const TimeSeriesLineAnnotationChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory TimeSeriesLineAnnotationChart.withSampleData() { - return TimeSeriesLineAnnotationChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory TimeSeriesLineAnnotationChart.withRandomData() { - return TimeSeriesLineAnnotationChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [ - charts.RangeAnnotation([ - charts.LineAnnotationSegment( - DateTime(2017, 10, 4), charts.RangeAnnotationAxisType.domain, - startLabel: 'Oct 4'), - charts.LineAnnotationSegment( - DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain, - endLabel: 'Oct 15'), - ]), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/time_series_chart/range_annotation.dart b/web/charts/lib/time_series_chart/range_annotation.dart deleted file mode 100644 index b6a077f71..000000000 --- a/web/charts/lib/time_series_chart/range_annotation.dart +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Time series chart with range annotation example -/// -/// The example future range annotation extends beyond the range of the series -/// data, demonstrating the effect of the [Charts.RangeAnnotation.extendAxis] -/// flag. This can be set to false to disable range extension. -/// -/// Additional annotations may be added simply by adding additional -/// [Charts.RangeAnnotationSegment] items to the list. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesRangeAnnotationChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const TimeSeriesRangeAnnotationChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory TimeSeriesRangeAnnotationChart.withSampleData() { - return TimeSeriesRangeAnnotationChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory TimeSeriesRangeAnnotationChart.withRandomData() { - return TimeSeriesRangeAnnotationChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart(seriesList, animate: animate, behaviors: [ - charts.RangeAnnotation([ - charts.RangeAnnotationSegment(DateTime(2017, 10, 4), - DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain), - ]), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/time_series_chart/range_annotation_margin.dart b/web/charts/lib/time_series_chart/range_annotation_margin.dart deleted file mode 100644 index c0b2f4cdf..000000000 --- a/web/charts/lib/time_series_chart/range_annotation_margin.dart +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a time series chart with range annotations configured to render -/// labels in the chart margin area. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesRangeAnnotationMarginChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const TimeSeriesRangeAnnotationMarginChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory TimeSeriesRangeAnnotationMarginChart.withSampleData() { - return TimeSeriesRangeAnnotationMarginChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory TimeSeriesRangeAnnotationMarginChart.withRandomData() { - return TimeSeriesRangeAnnotationMarginChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - // Fix one of the points to 100 so that the annotations are consistently - // placed. - TimeSeriesSales(DateTime(2017, 10, 10), 100), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart(seriesList, - animate: animate, - - // Allow enough space in the left and right chart margins for the - // annotations. - layoutConfig: charts.LayoutConfig( - leftMarginSpec: charts.MarginSpec.fixedPixel(60), - topMarginSpec: charts.MarginSpec.fixedPixel(20), - rightMarginSpec: charts.MarginSpec.fixedPixel(60), - bottomMarginSpec: charts.MarginSpec.fixedPixel(20)), - behaviors: [ - // Define one domain and two measure annotations configured to render - // labels in the chart margins. - charts.RangeAnnotation([ - charts.RangeAnnotationSegment(DateTime(2017, 10, 4), - DateTime(2017, 10, 15), charts.RangeAnnotationAxisType.domain, - startLabel: 'D1 Start', - endLabel: 'D1 End', - labelAnchor: charts.AnnotationLabelAnchor.end, - color: charts.MaterialPalette.gray.shade200, - // Override the default vertical direction for domain labels. - labelDirection: charts.AnnotationLabelDirection.horizontal), - charts.RangeAnnotationSegment( - 15, 20, charts.RangeAnnotationAxisType.measure, - startLabel: 'M1 Start', - endLabel: 'M1 End', - labelAnchor: charts.AnnotationLabelAnchor.end, - color: charts.MaterialPalette.gray.shade300), - charts.RangeAnnotationSegment( - 35, 65, charts.RangeAnnotationAxisType.measure, - startLabel: 'M2 Start', - endLabel: 'M2 End', - labelAnchor: charts.AnnotationLabelAnchor.start, - color: charts.MaterialPalette.gray.shade300), - ], defaultLabelPosition: charts.AnnotationLabelPosition.margin), - ]); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - return [ - charts.Series( - id: 'Sales', - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/time_series_chart/simple.dart b/web/charts/lib/time_series_chart/simple.dart deleted file mode 100644 index a2db3e033..000000000 --- a/web/charts/lib/time_series_chart/simple.dart +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Timeseries chart example -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class SimpleTimeSeriesChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const SimpleTimeSeriesChart(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory SimpleTimeSeriesChart.withSampleData() { - return SimpleTimeSeriesChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory SimpleTimeSeriesChart.withRandomData() { - return SimpleTimeSeriesChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 26), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 10, 10), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Optionally pass in a [DateTimeFactory] used by the chart. The factory - // should create the same type of [DateTime] as the data provided. If none - // specified, the default creates local date time. - dateTimeFactory: const charts.LocalDateTimeFactory(), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 19), 5), - TimeSeriesSales(DateTime(2017, 9, 26), 25), - TimeSeriesSales(DateTime(2017, 10, 3), 100), - TimeSeriesSales(DateTime(2017, 10, 10), 75), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/lib/time_series_chart/symbol_annotation.dart b/web/charts/lib/time_series_chart/symbol_annotation.dart deleted file mode 100644 index 1222eb9a1..000000000 --- a/web/charts/lib/time_series_chart/symbol_annotation.dart +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of timeseries chart with annotation rows between the chart draw area -/// and the domain axis. -/// -/// The symbol annotation renderer draws a row of symbols for each series below -/// the drawArea but above the bottom axis. -/// -/// This renderer can draw point annotations and range annotations. Point -/// annotations are drawn at the location of the domain along the chart's domain -/// axis, in the row for its series. Range annotations are drawn as a range -/// shape between the domainLowerBound and domainUpperBound positions along the -/// chart's domain axis. Point annotations are drawn on top of range -/// annotations. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesSymbolAnnotationChart extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const TimeSeriesSymbolAnnotationChart(this.seriesList, - {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory TimeSeriesSymbolAnnotationChart.withSampleData() { - return TimeSeriesSymbolAnnotationChart( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory TimeSeriesSymbolAnnotationChart.withRandomData() { - return TimeSeriesSymbolAnnotationChart(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final myDesktopData = [ - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 19), sales: random.nextInt(100)), - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 26), sales: random.nextInt(100)), - TimeSeriesSales( - timeCurrent: DateTime(2017, 10, 3), sales: random.nextInt(100)), - TimeSeriesSales( - timeCurrent: DateTime(2017, 10, 10), sales: random.nextInt(100)), - ]; - - final myTabletData = [ - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 19), sales: random.nextInt(100)), - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 26), sales: random.nextInt(100)), - TimeSeriesSales( - timeCurrent: DateTime(2017, 10, 3), sales: random.nextInt(100)), - TimeSeriesSales( - timeCurrent: DateTime(2017, 10, 10), sales: random.nextInt(100)), - ]; - - // Example of a series with two range annotations. A regular point shape - // will be drawn at the current domain value, and a range shape will be - // drawn between the previous and target domain values. - // - // Note that these series do not contain any measure values. They are - // positioned automatically in rows. - final myAnnotationDataTop = [ - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 24), - timePrevious: DateTime(2017, 9, 19), - timeTarget: DateTime(2017, 9, 24), - ), - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 29), - timePrevious: DateTime(2017, 9, 29), - timeTarget: DateTime(2017, 10, 4), - ), - ]; - - // Example of a series with one range annotation and two single point - // annotations. Omitting the previous and target domain values causes that - // datum to be drawn as a single point. - final myAnnotationDataBottom = [ - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 25), - timePrevious: DateTime(2017, 9, 21), - timeTarget: DateTime(2017, 9, 25), - ), - TimeSeriesSales(timeCurrent: DateTime(2017, 9, 31)), - TimeSeriesSales(timeCurrent: DateTime(2017, 10, 5)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: myDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: myTabletData, - ), - charts.Series( - id: 'Annotation Series 1', - colorFn: (_, __) => charts.MaterialPalette.gray.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - domainLowerBoundFn: (TimeSeriesSales row, _) => row.timePrevious, - domainUpperBoundFn: (TimeSeriesSales row, _) => row.timeTarget, - // No measure values are needed for symbol annotations. - measureFn: (_, __) => null, - data: myAnnotationDataTop, - ) - // Configure our custom symbol annotation renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customSymbolAnnotation') - // Optional radius for the annotation shape. If not specified, this will - // default to the same radius as the points. - ..setAttribute(charts.boundsLineRadiusPxKey, 3.5), - charts.Series( - id: 'Annotation Series 2', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - domainLowerBoundFn: (TimeSeriesSales row, _) => row.timePrevious, - domainUpperBoundFn: (TimeSeriesSales row, _) => row.timeTarget, - // No measure values are needed for symbol annotations. - measureFn: (_, __) => null, - data: myAnnotationDataBottom, - ) - // Configure our custom symbol annotation renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customSymbolAnnotation') - // Optional radius for the annotation shape. If not specified, this will - // default to the same radius as the points. - ..setAttribute(charts.boundsLineRadiusPxKey, 3.5), - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Custom renderer configuration for the point series. - customSeriesRenderers: [ - charts.SymbolAnnotationRendererConfig( - // ID used to link series to this renderer. - customRendererId: 'customSymbolAnnotation') - ], - // Optionally pass in a [DateTimeFactory] used by the chart. The factory - // should create the same type of [DateTime] as the data provided. If none - // specified, the default creates local date time. - dateTimeFactory: const charts.LocalDateTimeFactory(), - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final myDesktopData = [ - TimeSeriesSales(timeCurrent: DateTime(2017, 9, 19), sales: 5), - TimeSeriesSales(timeCurrent: DateTime(2017, 9, 26), sales: 25), - TimeSeriesSales(timeCurrent: DateTime(2017, 10, 3), sales: 100), - TimeSeriesSales(timeCurrent: DateTime(2017, 10, 10), sales: 75), - ]; - - final myTabletData = [ - TimeSeriesSales(timeCurrent: DateTime(2017, 9, 19), sales: 10), - TimeSeriesSales(timeCurrent: DateTime(2017, 9, 26), sales: 50), - TimeSeriesSales(timeCurrent: DateTime(2017, 10, 3), sales: 200), - TimeSeriesSales(timeCurrent: DateTime(2017, 10, 10), sales: 150), - ]; - - // Example of a series with two range annotations. A regular point shape - // will be drawn at the current domain value, and a range shape will be - // drawn between the previous and target domain values. - // - // Note that these series do not contain any measure values. They are - // positioned automatically in rows. - final myAnnotationDataTop = [ - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 24), - timePrevious: DateTime(2017, 9, 19), - timeTarget: DateTime(2017, 9, 24), - ), - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 29), - timePrevious: DateTime(2017, 9, 29), - timeTarget: DateTime(2017, 10, 4), - ), - ]; - - // Example of a series with one range annotation and two single point - // annotations. Omitting the previous and target domain values causes that - // datum to be drawn as a single point. - final myAnnotationDataBottom = [ - TimeSeriesSales( - timeCurrent: DateTime(2017, 9, 25), - timePrevious: DateTime(2017, 9, 21), - timeTarget: DateTime(2017, 9, 25), - ), - TimeSeriesSales(timeCurrent: DateTime(2017, 9, 31)), - TimeSeriesSales(timeCurrent: DateTime(2017, 10, 5)), - ]; - - return [ - charts.Series( - id: 'Desktop', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: myDesktopData, - ), - charts.Series( - id: 'Tablet', - colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: myTabletData, - ), - charts.Series( - id: 'Annotation Series 1', - colorFn: (_, __) => charts.MaterialPalette.gray.shadeDefault, - // A point shape will be drawn at the location of the domain. - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - // A range shape will be drawn between the lower and upper domain - // bounds. The range will be drawn underneath the domain point. - domainLowerBoundFn: (TimeSeriesSales row, _) => row.timePrevious, - domainUpperBoundFn: (TimeSeriesSales row, _) => row.timeTarget, - // No measure values are needed for symbol annotations. - measureFn: (_, __) => null, - data: myAnnotationDataTop, - ) - // Configure our custom symbol annotation renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customSymbolAnnotation') - // Optional radius for the annotation range. If not specified, this will - // default to the same radius as the domain point. - ..setAttribute(charts.boundsLineRadiusPxKey, 3.5), - charts.Series( - id: 'Annotation Series 2', - colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault, - // A point shape will be drawn at the location of the domain. - domainFn: (TimeSeriesSales sales, _) => sales.timeCurrent, - // A range shape will be drawn between the lower and upper domain - // bounds. The range will be drawn underneath the domain point. - domainLowerBoundFn: (TimeSeriesSales row, _) => row.timePrevious, - domainUpperBoundFn: (TimeSeriesSales row, _) => row.timeTarget, - // No measure values are needed for symbol annotations. - measureFn: (_, __) => null, - data: myAnnotationDataBottom, - ) - // Configure our custom symbol annotation renderer for this series. - ..setAttribute(charts.rendererIdKey, 'customSymbolAnnotation') - // Optional radius for the annotation range. If not specified, this will - // default to the same radius as the domain point. - ..setAttribute(charts.boundsLineRadiusPxKey, 3.5), - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime timeCurrent; - final DateTime? timePrevious; - final DateTime? timeTarget; - final int? sales; - - TimeSeriesSales({ - required this.timeCurrent, - this.timePrevious, - this.timeTarget, - this.sales, - }); -} diff --git a/web/charts/lib/time_series_chart/time_series_gallery.dart b/web/charts/lib/time_series_chart/time_series_gallery.dart deleted file mode 100644 index dcaaac6b7..000000000 --- a/web/charts/lib/time_series_chart/time_series_gallery.dart +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import 'package:flutter/material.dart'; -import '../gallery_scaffold.dart'; -import 'confidence_interval.dart'; -import 'end_points_axis.dart'; -import 'line_annotation.dart'; -import 'range_annotation.dart'; -import 'range_annotation_margin.dart'; -import 'simple.dart'; -import 'symbol_annotation.dart'; -import 'with_bar_renderer.dart'; - -List buildGallery() { - return [ - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Time Series Chart', - subtitle: 'Simple single time series chart', - childBuilder: () => SimpleTimeSeriesChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'End Points Axis Time Series Chart', - subtitle: 'Time series chart with an end points axis', - childBuilder: () => EndPointsAxisTimeSeriesChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Line Annotation on Time Series Chart', - subtitle: 'Time series chart with future line annotation', - childBuilder: () => TimeSeriesLineAnnotationChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Range Annotation on Time Series Chart', - subtitle: 'Time series chart with future range annotation', - childBuilder: () => TimeSeriesRangeAnnotationChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Range Annotation Margin Labels on Time Series Chart', - subtitle: - 'Time series chart with range annotations with labels in margins', - childBuilder: () => TimeSeriesRangeAnnotationMarginChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Symbol Annotation Time Series Chart', - subtitle: 'Time series chart with annotation data below the draw area', - childBuilder: () => TimeSeriesSymbolAnnotationChart.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Time Series Chart with Bars', - subtitle: 'Time series chart using the bar renderer', - childBuilder: () => TimeSeriesBar.withRandomData(), - ), - GalleryScaffold( - listTileIcon: const Icon(Icons.show_chart), - title: 'Time Series Chart with Confidence Interval', - subtitle: 'Draws area around the confidence interval', - childBuilder: () => TimeSeriesConfidenceInterval.withRandomData(), - ), - ]; -} diff --git a/web/charts/lib/time_series_chart/with_bar_renderer.dart b/web/charts/lib/time_series_chart/with_bar_renderer.dart deleted file mode 100644 index df9e9fd5b..000000000 --- a/web/charts/lib/time_series_chart/with_bar_renderer.dart +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2018 the Charts project authors. Please see the AUTHORS file -// for details. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// Example of a time series chart using a bar renderer. -// EXCLUDE_FROM_GALLERY_DOCS_START -import 'dart:math'; -// EXCLUDE_FROM_GALLERY_DOCS_END -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:flutter/material.dart'; - -class TimeSeriesBar extends StatelessWidget { - final List> seriesList; - final bool? animate; - - const TimeSeriesBar(this.seriesList, {this.animate, Key? key}) - : super(key: key); - - /// Creates a [TimeSeriesChart] with sample data and no transition. - factory TimeSeriesBar.withSampleData() { - return TimeSeriesBar( - _createSampleData(), - // Disable animations for image tests. - animate: false, - ); - } - - // EXCLUDE_FROM_GALLERY_DOCS_START - // This section is excluded from being copied to the gallery. - // It is used for creating random series data to demonstrate animation in - // the example app only. - factory TimeSeriesBar.withRandomData() { - return TimeSeriesBar(_createRandomData()); - } - - /// Create random data. - static List> _createRandomData() { - final random = Random(); - - final data = [ - TimeSeriesSales(DateTime(2017, 9, 1), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 2), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 3), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 4), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 5), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 6), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 7), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 8), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 9), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 10), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 11), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 12), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 13), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 14), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 15), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 16), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 17), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 18), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 19), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 20), random.nextInt(100)), - TimeSeriesSales(DateTime(2017, 9, 21), random.nextInt(100)), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } - // EXCLUDE_FROM_GALLERY_DOCS_END - - @override - Widget build(BuildContext context) { - return charts.TimeSeriesChart( - seriesList, - animate: animate, - // Set the default renderer to a bar renderer. - // This can also be one of the custom renderers of the time series chart. - defaultRenderer: charts.BarRendererConfig(), - // It is recommended that default interactions be turned off if using bar - // renderer, because the line point highlighter is the default for time - // series chart. - defaultInteractions: false, - // If default interactions were removed, optionally add select nearest - // and the domain highlighter that are typical for bar charts. - behaviors: [charts.SelectNearest(), charts.DomainHighlighter()], - ); - } - - /// Create one series with sample hard coded data. - static List> _createSampleData() { - final data = [ - TimeSeriesSales(DateTime(2017, 9, 1), 5), - TimeSeriesSales(DateTime(2017, 9, 2), 5), - TimeSeriesSales(DateTime(2017, 9, 3), 25), - TimeSeriesSales(DateTime(2017, 9, 4), 100), - TimeSeriesSales(DateTime(2017, 9, 5), 75), - TimeSeriesSales(DateTime(2017, 9, 6), 88), - TimeSeriesSales(DateTime(2017, 9, 7), 65), - TimeSeriesSales(DateTime(2017, 9, 8), 91), - TimeSeriesSales(DateTime(2017, 9, 9), 100), - TimeSeriesSales(DateTime(2017, 9, 10), 111), - TimeSeriesSales(DateTime(2017, 9, 11), 90), - TimeSeriesSales(DateTime(2017, 9, 12), 50), - TimeSeriesSales(DateTime(2017, 9, 13), 40), - TimeSeriesSales(DateTime(2017, 9, 14), 30), - TimeSeriesSales(DateTime(2017, 9, 15), 40), - TimeSeriesSales(DateTime(2017, 9, 16), 50), - TimeSeriesSales(DateTime(2017, 9, 17), 30), - TimeSeriesSales(DateTime(2017, 9, 18), 35), - TimeSeriesSales(DateTime(2017, 9, 19), 40), - TimeSeriesSales(DateTime(2017, 9, 20), 32), - TimeSeriesSales(DateTime(2017, 9, 21), 31), - ]; - - return [ - charts.Series( - id: 'Sales', - colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault, - domainFn: (TimeSeriesSales sales, _) => sales.time, - measureFn: (TimeSeriesSales sales, _) => sales.sales, - data: data, - ) - ]; - } -} - -/// Sample time series data type. -class TimeSeriesSales { - final DateTime time; - final int sales; - - TimeSeriesSales(this.time, this.sales); -} diff --git a/web/charts/pubspec.yaml b/web/charts/pubspec.yaml deleted file mode 100644 index 3cd077396..000000000 --- a/web/charts/pubspec.yaml +++ /dev/null @@ -1,21 +0,0 @@ -name: example -description: Charts-Flutter Demo -publish_to: none - -environment: - sdk: ">=2.17.0-0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - charts_flutter: ^0.12.0 - meta: ^1.1.1 - intl: ^0.17.0 - -dev_dependencies: - flutter_lints: ^2.0.1 - -flutter: - uses-material-design: true - assets: - - preview.png diff --git a/web/charts/web/index.html b/web/charts/web/index.html deleted file mode 100644 index 1785ebb8b..000000000 --- a/web/charts/web/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/web/github_dataviz/LICENSE b/web/github_dataviz/LICENSE deleted file mode 100644 index bc67b8f95..000000000 --- a/web/github_dataviz/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright 2019 The Chromium Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/web/github_dataviz/README.md b/web/github_dataviz/README.md deleted file mode 100644 index 77b6877b8..000000000 --- a/web/github_dataviz/README.md +++ /dev/null @@ -1,11 +0,0 @@ -A visualization for -[Flutter GitHub repository](https://github.com/flutter/flutter/) metadata. - -Created for Google by [Larva Labs](http://larvalabs.com/), a team of creative -technologists who make things for Android, iPhone, and the Web. - -## Data Notes - -The data starts the week of Oct 19, 2014 which is the first commit. This is week -0 in our data arrays, but it is week 43 in 2014. Year boundaries are then offset -by 9 weeks. diff --git a/web/github_dataviz/analysis_options.yaml b/web/github_dataviz/analysis_options.yaml deleted file mode 100644 index 3f238dcdc..000000000 --- a/web/github_dataviz/analysis_options.yaml +++ /dev/null @@ -1,6 +0,0 @@ -include: package:flutter_lints/flutter.yaml - -linter: - rules: - avoid_print: false - prefer_single_quotes: true diff --git a/web/github_dataviz/assets/preview.png b/web/github_dataviz/assets/preview.png deleted file mode 100644 index f74999be4..000000000 Binary files a/web/github_dataviz/assets/preview.png and /dev/null differ diff --git a/web/github_dataviz/github_data/comments.tsv b/web/github_dataviz/github_data/comments.tsv deleted file mode 100644 index 63893c044..000000000 --- a/web/github_dataviz/github_data/comments.tsv +++ /dev/null @@ -1,178 +0,0 @@ -54 30 -55 448 -56 286 -57 156 -58 293 -59 289 -60 230 -61 96 -62 83 -63 254 -64 254 -65 227 -66 344 -67 337 -68 428 -69 487 -70 547 -71 446 -72 425 -73 331 -74 324 -75 399 -76 399 -77 301 -78 318 -79 283 -80 351 -81 428 -82 452 -83 447 -84 310 -85 310 -86 270 -87 331 -88 144 -89 150 -90 176 -91 218 -92 253 -93 302 -94 276 -95 452 -96 347 -97 340 -98 246 -99 392 -100 430 -101 298 -102 267 -103 233 -104 316 -105 307 -106 416 -107 268 -108 335 -109 213 -110 342 -111 227 -112 166 -113 56 -114 63 -115 230 -116 362 -117 248 -118 550 -119 809 -120 677 -121 667 -122 425 -123 544 -124 420 -125 457 -126 415 -127 480 -128 569 -129 402 -130 459 -131 466 -132 523 -133 634 -134 479 -135 564 -136 436 -137 519 -138 808 -139 589 -140 367 -141 169 -142 316 -143 370 -144 334 -145 281 -146 256 -147 357 -148 293 -149 349 -150 300 -151 342 -152 291 -153 327 -154 329 -155 346 -156 386 -157 318 -158 310 -159 361 -160 360 -161 352 -162 474 -163 495 -164 569 -165 426 -166 89 -167 17 -171 208 -172 502 -173 565 -174 273 -175 1002 -176 920 -177 808 -178 870 -179 808 -180 537 -181 745 -182 717 -183 778 -184 676 -185 562 -186 708 -187 957 -188 853 -189 703 -190 1013 -191 1040 -192 759 -193 811 -194 1086 -195 1031 -196 1080 -197 1159 -198 622 -199 892 -200 1188 -201 1273 -202 1214 -203 1103 -204 876 -205 1248 -206 956 -207 1119 -208 1218 -209 1126 -210 1058 -211 872 -212 1005 -213 805 -214 1146 -215 1132 -216 1404 -217 1436 -218 819 -219 2152 -220 1651 -221 1418 -222 1387 -223 1496 -224 1262 -225 1784 -226 1681 -227 1401 -228 1150 -229 1269 -230 1162 -231 1136 -232 1045 -233 1370 -234 41 diff --git a/web/github_dataviz/github_data/commits.tsv b/web/github_dataviz/github_data/commits.tsv deleted file mode 100644 index 99f30951e..000000000 --- a/web/github_dataviz/github_data/commits.tsv +++ /dev/null @@ -1,177 +0,0 @@ -48 1 -53 1 -54 16 -55 70 -56 78 -57 46 -58 74 -59 67 -60 50 -61 10 -62 9 -63 47 -64 53 -65 55 -66 49 -67 59 -68 96 -69 67 -70 92 -71 75 -72 88 -73 69 -74 69 -75 84 -76 82 -77 59 -78 63 -79 67 -80 62 -81 60 -82 76 -83 63 -84 58 -85 55 -86 44 -87 64 -88 27 -89 24 -90 32 -91 46 -92 58 -93 53 -94 56 -95 57 -96 37 -97 41 -98 27 -99 52 -100 63 -101 51 -102 49 -103 44 -104 65 -105 55 -106 65 -107 53 -108 47 -109 34 -110 43 -111 34 -112 24 -113 5 -115 32 -116 62 -117 39 -118 88 -119 85 -120 100 -121 97 -122 65 -123 77 -124 71 -125 77 -126 63 -127 57 -128 84 -129 44 -130 68 -131 58 -132 86 -133 96 -134 56 -135 61 -136 42 -137 45 -138 66 -139 59 -140 44 -141 15 -142 47 -143 50 -144 17 -145 36 -146 27 -147 18 -148 57 -149 77 -150 38 -151 50 -152 40 -153 48 -154 45 -155 35 -156 55 -157 33 -158 48 -159 53 -160 32 -161 46 -162 67 -163 70 -164 70 -165 48 -166 3 -171 20 -172 71 -173 79 -174 38 -175 58 -176 64 -177 63 -178 70 -179 43 -180 25 -181 48 -182 60 -183 62 -184 69 -185 65 -186 44 -187 41 -188 56 -189 76 -190 61 -191 46 -192 49 -193 30 -194 55 -195 51 -196 50 -197 68 -198 51 -199 52 -200 52 -201 70 -202 78 -203 51 -204 46 -205 58 -206 75 -207 60 -208 69 -209 62 -210 75 -211 86 -212 75 -213 31 -214 31 -215 2 -216 60 -217 60 -218 16 -219 60 -220 90 -221 77 -222 50 -223 49 -224 72 -225 86 -226 64 -227 101 -228 69 -229 87 -230 80 -231 82 -232 81 -233 74 diff --git a/web/github_dataviz/github_data/contributors.json b/web/github_dataviz/github_data/contributors.json deleted file mode 100644 index ef0615eea..000000000 --- a/web/github_dataviz/github_data/contributors.json +++ /dev/null @@ -1,142902 +0,0 @@ -[ - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 78, - "d": 66, - "c": 3 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 29, - "d": 12, - "c": 2 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jamesderlin", - "id": 17391434, - "node_id": "MDQ6VXNlcjE3MzkxNDM0", - "avatar_url": "https://avatars3.githubusercontent.com/u/17391434?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jamesderlin", - "html_url": "https://github.com/jamesderlin", - "followers_url": "https://api.github.com/users/jamesderlin/followers", - "following_url": "https://api.github.com/users/jamesderlin/following{/other_user}", - "gists_url": "https://api.github.com/users/jamesderlin/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jamesderlin/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jamesderlin/subscriptions", - "organizations_url": "https://api.github.com/users/jamesderlin/orgs", - "repos_url": "https://api.github.com/users/jamesderlin/repos", - "events_url": "https://api.github.com/users/jamesderlin/events{/privacy}", - "received_events_url": "https://api.github.com/users/jamesderlin/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 50, - "d": 50, - "c": 2 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 97, - "d": 224, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 62, - "d": 0, - "c": 1 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 183, - "d": 33, - "c": 1 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "tianlunlee", - "id": 13839358, - "node_id": "MDQ6VXNlcjEzODM5MzU4", - "avatar_url": "https://avatars3.githubusercontent.com/u/13839358?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/tianlunlee", - "html_url": "https://github.com/tianlunlee", - "followers_url": "https://api.github.com/users/tianlunlee/followers", - "following_url": "https://api.github.com/users/tianlunlee/following{/other_user}", - "gists_url": "https://api.github.com/users/tianlunlee/gists{/gist_id}", - "starred_url": "https://api.github.com/users/tianlunlee/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/tianlunlee/subscriptions", - "organizations_url": "https://api.github.com/users/tianlunlee/orgs", - "repos_url": "https://api.github.com/users/tianlunlee/repos", - "events_url": "https://api.github.com/users/tianlunlee/events{/privacy}", - "received_events_url": "https://api.github.com/users/tianlunlee/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 282, - "d": 5, - "c": 1 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 41, - "d": 0, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 118, - "d": 1, - "c": 1 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 52, - "d": 0, - "c": 1 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "creativecreatorormaybenot", - "id": 19204050, - "node_id": "MDQ6VXNlcjE5MjA0MDUw", - "avatar_url": "https://avatars2.githubusercontent.com/u/19204050?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/creativecreatorormaybenot", - "html_url": "https://github.com/creativecreatorormaybenot", - "followers_url": "https://api.github.com/users/creativecreatorormaybenot/followers", - "following_url": "https://api.github.com/users/creativecreatorormaybenot/following{/other_user}", - "gists_url": "https://api.github.com/users/creativecreatorormaybenot/gists{/gist_id}", - "starred_url": "https://api.github.com/users/creativecreatorormaybenot/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/creativecreatorormaybenot/subscriptions", - "organizations_url": "https://api.github.com/users/creativecreatorormaybenot/orgs", - "repos_url": "https://api.github.com/users/creativecreatorormaybenot/repos", - "events_url": "https://api.github.com/users/creativecreatorormaybenot/events{/privacy}", - "received_events_url": "https://api.github.com/users/creativecreatorormaybenot/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 41, - "d": 7, - "c": 2 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "sivachandra", - "id": 635361, - "node_id": "MDQ6VXNlcjYzNTM2MQ==", - "avatar_url": "https://avatars1.githubusercontent.com/u/635361?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/sivachandra", - "html_url": "https://github.com/sivachandra", - "followers_url": "https://api.github.com/users/sivachandra/followers", - "following_url": "https://api.github.com/users/sivachandra/following{/other_user}", - "gists_url": "https://api.github.com/users/sivachandra/gists{/gist_id}", - "starred_url": "https://api.github.com/users/sivachandra/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/sivachandra/subscriptions", - "organizations_url": "https://api.github.com/users/sivachandra/orgs", - "repos_url": "https://api.github.com/users/sivachandra/repos", - "events_url": "https://api.github.com/users/sivachandra/events{/privacy}", - "received_events_url": "https://api.github.com/users/sivachandra/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 34, - "d": 1, - "c": 1 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 67, - "d": 3, - "c": 1 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 59, - "d": 0, - "c": 1 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "Skylled", - "id": 13603296, - "node_id": "MDQ6VXNlcjEzNjAzMjk2", - "avatar_url": "https://avatars3.githubusercontent.com/u/13603296?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/Skylled", - "html_url": "https://github.com/Skylled", - "followers_url": "https://api.github.com/users/Skylled/followers", - "following_url": "https://api.github.com/users/Skylled/following{/other_user}", - "gists_url": "https://api.github.com/users/Skylled/gists{/gist_id}", - "starred_url": "https://api.github.com/users/Skylled/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/Skylled/subscriptions", - "organizations_url": "https://api.github.com/users/Skylled/orgs", - "repos_url": "https://api.github.com/users/Skylled/repos", - "events_url": "https://api.github.com/users/Skylled/events{/privacy}", - "received_events_url": "https://api.github.com/users/Skylled/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 74, - "d": 75, - "c": 3 - }, - { - "w": 1477180800, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1477785600, - "a": 3, - "d": 5, - "c": 1 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "warent", - "id": 13342266, - "node_id": "MDQ6VXNlcjEzMzQyMjY2", - "avatar_url": "https://avatars0.githubusercontent.com/u/13342266?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/warent", - "html_url": "https://github.com/warent", - "followers_url": "https://api.github.com/users/warent/followers", - "following_url": "https://api.github.com/users/warent/following{/other_user}", - "gists_url": "https://api.github.com/users/warent/gists{/gist_id}", - "starred_url": "https://api.github.com/users/warent/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/warent/subscriptions", - "organizations_url": "https://api.github.com/users/warent/orgs", - "repos_url": "https://api.github.com/users/warent/repos", - "events_url": "https://api.github.com/users/warent/events{/privacy}", - "received_events_url": "https://api.github.com/users/warent/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 8, - "d": 7, - "c": 2 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 57, - "d": 17, - "c": 2 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "eukreign", - "id": 69960, - "node_id": "MDQ6VXNlcjY5OTYw", - "avatar_url": "https://avatars1.githubusercontent.com/u/69960?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/eukreign", - "html_url": "https://github.com/eukreign", - "followers_url": "https://api.github.com/users/eukreign/followers", - "following_url": "https://api.github.com/users/eukreign/following{/other_user}", - "gists_url": "https://api.github.com/users/eukreign/gists{/gist_id}", - "starred_url": "https://api.github.com/users/eukreign/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/eukreign/subscriptions", - "organizations_url": "https://api.github.com/users/eukreign/orgs", - "repos_url": "https://api.github.com/users/eukreign/repos", - "events_url": "https://api.github.com/users/eukreign/events{/privacy}", - "received_events_url": "https://api.github.com/users/eukreign/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 5, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 48, - "d": 61, - "c": 4 - }, - { - "w": 1443916800, - "a": 18, - "d": 10, - "c": 1 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mdakin", - "id": 1647551, - "node_id": "MDQ6VXNlcjE2NDc1NTE=", - "avatar_url": "https://avatars1.githubusercontent.com/u/1647551?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mdakin", - "html_url": "https://github.com/mdakin", - "followers_url": "https://api.github.com/users/mdakin/followers", - "following_url": "https://api.github.com/users/mdakin/following{/other_user}", - "gists_url": "https://api.github.com/users/mdakin/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mdakin/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mdakin/subscriptions", - "organizations_url": "https://api.github.com/users/mdakin/orgs", - "repos_url": "https://api.github.com/users/mdakin/repos", - "events_url": "https://api.github.com/users/mdakin/events{/privacy}", - "received_events_url": "https://api.github.com/users/mdakin/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 6, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 65, - "d": 58, - "c": 1 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 1, - "c": 1 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 26, - "d": 9, - "c": 1 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 139, - "d": 139, - "c": 1 - }, - { - "w": 1554595200, - "a": 55, - "d": 111, - "c": 1 - } - ], - "author": { - "login": "timsneath", - "id": 2319867, - "node_id": "MDQ6VXNlcjIzMTk4Njc=", - "avatar_url": "https://avatars3.githubusercontent.com/u/2319867?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/timsneath", - "html_url": "https://github.com/timsneath", - "followers_url": "https://api.github.com/users/timsneath/followers", - "following_url": "https://api.github.com/users/timsneath/following{/other_user}", - "gists_url": "https://api.github.com/users/timsneath/gists{/gist_id}", - "starred_url": "https://api.github.com/users/timsneath/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/timsneath/subscriptions", - "organizations_url": "https://api.github.com/users/timsneath/orgs", - "repos_url": "https://api.github.com/users/timsneath/repos", - "events_url": "https://api.github.com/users/timsneath/events{/privacy}", - "received_events_url": "https://api.github.com/users/timsneath/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 6, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 312, - "d": 47, - "c": 1 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 222, - "d": 203, - "c": 1 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 73, - "d": 25, - "c": 1 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 254, - "d": 173, - "c": 1 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 125, - "d": 89, - "c": 1 - }, - { - "w": 1547942400, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "tonyzhao1", - "id": 42278985, - "node_id": "MDQ6VXNlcjQyMjc4OTg1", - "avatar_url": "https://avatars1.githubusercontent.com/u/42278985?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/tonyzhao1", - "html_url": "https://github.com/tonyzhao1", - "followers_url": "https://api.github.com/users/tonyzhao1/followers", - "following_url": "https://api.github.com/users/tonyzhao1/following{/other_user}", - "gists_url": "https://api.github.com/users/tonyzhao1/gists{/gist_id}", - "starred_url": "https://api.github.com/users/tonyzhao1/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/tonyzhao1/subscriptions", - "organizations_url": "https://api.github.com/users/tonyzhao1/orgs", - "repos_url": "https://api.github.com/users/tonyzhao1/repos", - "events_url": "https://api.github.com/users/tonyzhao1/events{/privacy}", - "received_events_url": "https://api.github.com/users/tonyzhao1/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 6, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 533, - "d": 38, - "c": 1 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 889, - "d": 111, - "c": 1 - }, - { - "w": 1534636800, - "a": 297, - "d": 0, - "c": 1 - }, - { - "w": 1535241600, - "a": 723, - "d": 92, - "c": 1 - }, - { - "w": 1535846400, - "a": 7, - "d": 4, - "c": 1 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 1474, - "d": 99, - "c": 1 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "doxuanviet1996", - "id": 9079172, - "node_id": "MDQ6VXNlcjkwNzkxNzI=", - "avatar_url": "https://avatars0.githubusercontent.com/u/9079172?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/doxuanviet1996", - "html_url": "https://github.com/doxuanviet1996", - "followers_url": "https://api.github.com/users/doxuanviet1996/followers", - "following_url": "https://api.github.com/users/doxuanviet1996/following{/other_user}", - "gists_url": "https://api.github.com/users/doxuanviet1996/gists{/gist_id}", - "starred_url": "https://api.github.com/users/doxuanviet1996/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/doxuanviet1996/subscriptions", - "organizations_url": "https://api.github.com/users/doxuanviet1996/orgs", - "repos_url": "https://api.github.com/users/doxuanviet1996/repos", - "events_url": "https://api.github.com/users/doxuanviet1996/events{/privacy}", - "received_events_url": "https://api.github.com/users/doxuanviet1996/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 6, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 10, - "d": 0, - "c": 1 - }, - { - "w": 1457827200, - "a": 40, - "d": 7, - "c": 1 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 17, - "d": 3, - "c": 4 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "qchong", - "id": 5986149, - "node_id": "MDQ6VXNlcjU5ODYxNDk=", - "avatar_url": "https://avatars3.githubusercontent.com/u/5986149?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/qchong", - "html_url": "https://github.com/qchong", - "followers_url": "https://api.github.com/users/qchong/followers", - "following_url": "https://api.github.com/users/qchong/following{/other_user}", - "gists_url": "https://api.github.com/users/qchong/gists{/gist_id}", - "starred_url": "https://api.github.com/users/qchong/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/qchong/subscriptions", - "organizations_url": "https://api.github.com/users/qchong/orgs", - "repos_url": "https://api.github.com/users/qchong/repos", - "events_url": "https://api.github.com/users/qchong/events{/privacy}", - "received_events_url": "https://api.github.com/users/qchong/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 6, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 16, - "d": 5, - "c": 2 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 3, - "d": 3, - "c": 2 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "afandria", - "id": 2432033, - "node_id": "MDQ6VXNlcjI0MzIwMzM=", - "avatar_url": "https://avatars2.githubusercontent.com/u/2432033?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/afandria", - "html_url": "https://github.com/afandria", - "followers_url": "https://api.github.com/users/afandria/followers", - "following_url": "https://api.github.com/users/afandria/following{/other_user}", - "gists_url": "https://api.github.com/users/afandria/gists{/gist_id}", - "starred_url": "https://api.github.com/users/afandria/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/afandria/subscriptions", - "organizations_url": "https://api.github.com/users/afandria/orgs", - "repos_url": "https://api.github.com/users/afandria/repos", - "events_url": "https://api.github.com/users/afandria/events{/privacy}", - "received_events_url": "https://api.github.com/users/afandria/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 16, - "d": 6, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 50, - "d": 1, - "c": 1 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 38, - "d": 1, - "c": 1 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 65, - "d": 3, - "c": 1 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 18, - "d": 2, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 21, - "d": 1, - "c": 1 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 108, - "d": 53, - "c": 1 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "ds84182", - "id": 2268005, - "node_id": "MDQ6VXNlcjIyNjgwMDU=", - "avatar_url": "https://avatars0.githubusercontent.com/u/2268005?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ds84182", - "html_url": "https://github.com/ds84182", - "followers_url": "https://api.github.com/users/ds84182/followers", - "following_url": "https://api.github.com/users/ds84182/following{/other_user}", - "gists_url": "https://api.github.com/users/ds84182/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ds84182/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ds84182/subscriptions", - "organizations_url": "https://api.github.com/users/ds84182/orgs", - "repos_url": "https://api.github.com/users/ds84182/repos", - "events_url": "https://api.github.com/users/ds84182/events{/privacy}", - "received_events_url": "https://api.github.com/users/ds84182/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 75, - "d": 16, - "c": 2 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 3, - "d": 14, - "c": 1 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 26, - "d": 33, - "c": 1 - }, - { - "w": 1552780800, - "a": 22, - "d": 36, - "c": 1 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "fkorotkov", - "id": 989066, - "node_id": "MDQ6VXNlcjk4OTA2Ng==", - "avatar_url": "https://avatars3.githubusercontent.com/u/989066?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/fkorotkov", - "html_url": "https://github.com/fkorotkov", - "followers_url": "https://api.github.com/users/fkorotkov/followers", - "following_url": "https://api.github.com/users/fkorotkov/following{/other_user}", - "gists_url": "https://api.github.com/users/fkorotkov/gists{/gist_id}", - "starred_url": "https://api.github.com/users/fkorotkov/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/fkorotkov/subscriptions", - "organizations_url": "https://api.github.com/users/fkorotkov/orgs", - "repos_url": "https://api.github.com/users/fkorotkov/repos", - "events_url": "https://api.github.com/users/fkorotkov/events{/privacy}", - "received_events_url": "https://api.github.com/users/fkorotkov/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 4, - "d": 0, - "c": 1 - }, - { - "w": 1512259200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 35, - "d": 0, - "c": 1 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 111, - "d": 19, - "c": 2 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 52, - "d": 0, - "c": 1 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mjohnsullivan", - "id": 102488, - "node_id": "MDQ6VXNlcjEwMjQ4OA==", - "avatar_url": "https://avatars3.githubusercontent.com/u/102488?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mjohnsullivan", - "html_url": "https://github.com/mjohnsullivan", - "followers_url": "https://api.github.com/users/mjohnsullivan/followers", - "following_url": "https://api.github.com/users/mjohnsullivan/following{/other_user}", - "gists_url": "https://api.github.com/users/mjohnsullivan/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mjohnsullivan/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mjohnsullivan/subscriptions", - "organizations_url": "https://api.github.com/users/mjohnsullivan/orgs", - "repos_url": "https://api.github.com/users/mjohnsullivan/repos", - "events_url": "https://api.github.com/users/mjohnsullivan/events{/privacy}", - "received_events_url": "https://api.github.com/users/mjohnsullivan/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 274, - "d": 235, - "c": 3 - }, - { - "w": 1520726400, - "a": 10, - "d": 6, - "c": 1 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 60, - "d": 42, - "c": 1 - }, - { - "w": 1528588800, - "a": 5, - "d": 5, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 43, - "d": 0, - "c": 1 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "keertip", - "id": 2192312, - "node_id": "MDQ6VXNlcjIxOTIzMTI=", - "avatar_url": "https://avatars2.githubusercontent.com/u/2192312?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/keertip", - "html_url": "https://github.com/keertip", - "followers_url": "https://api.github.com/users/keertip/followers", - "following_url": "https://api.github.com/users/keertip/following{/other_user}", - "gists_url": "https://api.github.com/users/keertip/gists{/gist_id}", - "starred_url": "https://api.github.com/users/keertip/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/keertip/subscriptions", - "organizations_url": "https://api.github.com/users/keertip/orgs", - "repos_url": "https://api.github.com/users/keertip/repos", - "events_url": "https://api.github.com/users/keertip/events{/privacy}", - "received_events_url": "https://api.github.com/users/keertip/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 38, - "d": 39, - "c": 1 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 21, - "d": 7, - "c": 1 - }, - { - "w": 1515283200, - "a": 43, - "d": 39, - "c": 2 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1531612800, - "a": 77, - "d": 80, - "c": 1 - }, - { - "w": 1532217600, - "a": 81, - "d": 80, - "c": 1 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "leafpetersen", - "id": 8484504, - "node_id": "MDQ6VXNlcjg0ODQ1MDQ=", - "avatar_url": "https://avatars1.githubusercontent.com/u/8484504?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/leafpetersen", - "html_url": "https://github.com/leafpetersen", - "followers_url": "https://api.github.com/users/leafpetersen/followers", - "following_url": "https://api.github.com/users/leafpetersen/following{/other_user}", - "gists_url": "https://api.github.com/users/leafpetersen/gists{/gist_id}", - "starred_url": "https://api.github.com/users/leafpetersen/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/leafpetersen/subscriptions", - "organizations_url": "https://api.github.com/users/leafpetersen/orgs", - "repos_url": "https://api.github.com/users/leafpetersen/repos", - "events_url": "https://api.github.com/users/leafpetersen/events{/privacy}", - "received_events_url": "https://api.github.com/users/leafpetersen/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 6, - "d": 0, - "c": 1 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 33, - "d": 0, - "c": 4 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 3, - "d": 0, - "c": 2 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "ojanvafai", - "id": 1607171, - "node_id": "MDQ6VXNlcjE2MDcxNzE=", - "avatar_url": "https://avatars1.githubusercontent.com/u/1607171?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/ojanvafai", - "html_url": "https://github.com/ojanvafai", - "followers_url": "https://api.github.com/users/ojanvafai/followers", - "following_url": "https://api.github.com/users/ojanvafai/following{/other_user}", - "gists_url": "https://api.github.com/users/ojanvafai/gists{/gist_id}", - "starred_url": "https://api.github.com/users/ojanvafai/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/ojanvafai/subscriptions", - "organizations_url": "https://api.github.com/users/ojanvafai/orgs", - "repos_url": "https://api.github.com/users/ojanvafai/repos", - "events_url": "https://api.github.com/users/ojanvafai/events{/privacy}", - "received_events_url": "https://api.github.com/users/ojanvafai/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 7, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 335, - "d": 12, - "c": 3 - }, - { - "w": 1426377600, - "a": 36, - "d": 10, - "c": 2 - }, - { - "w": 1426982400, - "a": 60, - "d": 16, - "c": 2 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "viettrungluu-cr", - "id": 7061740, - "node_id": "MDQ6VXNlcjcwNjE3NDA=", - "avatar_url": "https://avatars0.githubusercontent.com/u/7061740?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/viettrungluu-cr", - "html_url": "https://github.com/viettrungluu-cr", - "followers_url": "https://api.github.com/users/viettrungluu-cr/followers", - "following_url": "https://api.github.com/users/viettrungluu-cr/following{/other_user}", - "gists_url": "https://api.github.com/users/viettrungluu-cr/gists{/gist_id}", - "starred_url": "https://api.github.com/users/viettrungluu-cr/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/viettrungluu-cr/subscriptions", - "organizations_url": "https://api.github.com/users/viettrungluu-cr/orgs", - "repos_url": "https://api.github.com/users/viettrungluu-cr/repos", - "events_url": "https://api.github.com/users/viettrungluu-cr/events{/privacy}", - "received_events_url": "https://api.github.com/users/viettrungluu-cr/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 8, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 17, - "d": 9, - "c": 1 - }, - { - "w": 1551571200, - "a": 129, - "d": 11, - "c": 1 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 393, - "d": 243, - "c": 4 - }, - { - "w": 1554595200, - "a": 32, - "d": 32, - "c": 2 - } - ], - "author": { - "login": "dkwingsmt", - "id": 1596656, - "node_id": "MDQ6VXNlcjE1OTY2NTY=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1596656?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/dkwingsmt", - "html_url": "https://github.com/dkwingsmt", - "followers_url": "https://api.github.com/users/dkwingsmt/followers", - "following_url": "https://api.github.com/users/dkwingsmt/following{/other_user}", - "gists_url": "https://api.github.com/users/dkwingsmt/gists{/gist_id}", - "starred_url": "https://api.github.com/users/dkwingsmt/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/dkwingsmt/subscriptions", - "organizations_url": "https://api.github.com/users/dkwingsmt/orgs", - "repos_url": "https://api.github.com/users/dkwingsmt/repos", - "events_url": "https://api.github.com/users/dkwingsmt/events{/privacy}", - "received_events_url": "https://api.github.com/users/dkwingsmt/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 8, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 385, - "d": 403, - "c": 1 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 72, - "d": 0, - "c": 1 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 27, - "d": 7, - "c": 1 - }, - { - "w": 1536451200, - "a": 123, - "d": 1, - "c": 1 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 61, - "d": 0, - "c": 1 - }, - { - "w": 1547942400, - "a": 370, - "d": 17, - "c": 1 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 321, - "d": 9, - "c": 2 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "willlarche", - "id": 1271525, - "node_id": "MDQ6VXNlcjEyNzE1MjU=", - "avatar_url": "https://avatars1.githubusercontent.com/u/1271525?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/willlarche", - "html_url": "https://github.com/willlarche", - "followers_url": "https://api.github.com/users/willlarche/followers", - "following_url": "https://api.github.com/users/willlarche/following{/other_user}", - "gists_url": "https://api.github.com/users/willlarche/gists{/gist_id}", - "starred_url": "https://api.github.com/users/willlarche/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/willlarche/subscriptions", - "organizations_url": "https://api.github.com/users/willlarche/orgs", - "repos_url": "https://api.github.com/users/willlarche/repos", - "events_url": "https://api.github.com/users/willlarche/events{/privacy}", - "received_events_url": "https://api.github.com/users/willlarche/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 8, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 40, - "d": 21, - "c": 1 - }, - { - "w": 1457222400, - "a": 9, - "d": 3, - "c": 1 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 54, - "d": 1, - "c": 1 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 75, - "d": 10, - "c": 2 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 118, - "d": 0, - "c": 1 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 130, - "d": 59, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "stevemessick", - "id": 8518285, - "node_id": "MDQ6VXNlcjg1MTgyODU=", - "avatar_url": "https://avatars0.githubusercontent.com/u/8518285?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/stevemessick", - "html_url": "https://github.com/stevemessick", - "followers_url": "https://api.github.com/users/stevemessick/followers", - "following_url": "https://api.github.com/users/stevemessick/following{/other_user}", - "gists_url": "https://api.github.com/users/stevemessick/gists{/gist_id}", - "starred_url": "https://api.github.com/users/stevemessick/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/stevemessick/subscriptions", - "organizations_url": "https://api.github.com/users/stevemessick/orgs", - "repos_url": "https://api.github.com/users/stevemessick/repos", - "events_url": "https://api.github.com/users/stevemessick/events{/privacy}", - "received_events_url": "https://api.github.com/users/stevemessick/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 8, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 78, - "d": 77, - "c": 1 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 9, - "d": 2, - "c": 1 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 33, - "d": 1, - "c": 1 - }, - { - "w": 1488067200, - "a": 18, - "d": 4, - "c": 1 - }, - { - "w": 1488672000, - "a": 79, - "d": 28, - "c": 1 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 206, - "d": 8, - "c": 1 - }, - { - "w": 1490486400, - "a": 93, - "d": 5, - "c": 1 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "lukef", - "id": 37941, - "node_id": "MDQ6VXNlcjM3OTQx", - "avatar_url": "https://avatars3.githubusercontent.com/u/37941?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/lukef", - "html_url": "https://github.com/lukef", - "followers_url": "https://api.github.com/users/lukef/followers", - "following_url": "https://api.github.com/users/lukef/following{/other_user}", - "gists_url": "https://api.github.com/users/lukef/gists{/gist_id}", - "starred_url": "https://api.github.com/users/lukef/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/lukef/subscriptions", - "organizations_url": "https://api.github.com/users/lukef/orgs", - "repos_url": "https://api.github.com/users/lukef/repos", - "events_url": "https://api.github.com/users/lukef/events{/privacy}", - "received_events_url": "https://api.github.com/users/lukef/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 9, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 27, - "d": 1, - "c": 1 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 27, - "d": 3, - "c": 2 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 48, - "d": 17, - "c": 1 - }, - { - "w": 1512259200, - "a": 78, - "d": 45, - "c": 3 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 27, - "d": 27, - "c": 1 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 3, - "c": 1 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "kevmoo", - "id": 17034, - "node_id": "MDQ6VXNlcjE3MDM0", - "avatar_url": "https://avatars2.githubusercontent.com/u/17034?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/kevmoo", - "html_url": "https://github.com/kevmoo", - "followers_url": "https://api.github.com/users/kevmoo/followers", - "following_url": "https://api.github.com/users/kevmoo/following{/other_user}", - "gists_url": "https://api.github.com/users/kevmoo/gists{/gist_id}", - "starred_url": "https://api.github.com/users/kevmoo/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/kevmoo/subscriptions", - "organizations_url": "https://api.github.com/users/kevmoo/orgs", - "repos_url": "https://api.github.com/users/kevmoo/repos", - "events_url": "https://api.github.com/users/kevmoo/events{/privacy}", - "received_events_url": "https://api.github.com/users/kevmoo/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 10, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 40, - "d": 21, - "c": 1 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 957, - "d": 311, - "c": 1 - }, - { - "w": 1549152000, - "a": 261, - "d": 157, - "c": 1 - }, - { - "w": 1549756800, - "a": 277, - "d": 17, - "c": 2 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 60, - "d": 11, - "c": 2 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1552780800, - "a": 456, - "d": 42, - "c": 1 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "clocksmith", - "id": 591699, - "node_id": "MDQ6VXNlcjU5MTY5OQ==", - "avatar_url": "https://avatars1.githubusercontent.com/u/591699?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/clocksmith", - "html_url": "https://github.com/clocksmith", - "followers_url": "https://api.github.com/users/clocksmith/followers", - "following_url": "https://api.github.com/users/clocksmith/following{/other_user}", - "gists_url": "https://api.github.com/users/clocksmith/gists{/gist_id}", - "starred_url": "https://api.github.com/users/clocksmith/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/clocksmith/subscriptions", - "organizations_url": "https://api.github.com/users/clocksmith/orgs", - "repos_url": "https://api.github.com/users/clocksmith/repos", - "events_url": "https://api.github.com/users/clocksmith/events{/privacy}", - "received_events_url": "https://api.github.com/users/clocksmith/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 10, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 5, - "d": 3, - "c": 3 - }, - { - "w": 1519516800, - "a": 15, - "d": 9, - "c": 1 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 16, - "d": 1, - "c": 1 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 34, - "d": 19, - "c": 1 - }, - { - "w": 1523145600, - "a": 19, - "d": 13, - "c": 1 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 397, - "d": 24, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "xqwzts", - "id": 798935, - "node_id": "MDQ6VXNlcjc5ODkzNQ==", - "avatar_url": "https://avatars1.githubusercontent.com/u/798935?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/xqwzts", - "html_url": "https://github.com/xqwzts", - "followers_url": "https://api.github.com/users/xqwzts/followers", - "following_url": "https://api.github.com/users/xqwzts/following{/other_user}", - "gists_url": "https://api.github.com/users/xqwzts/gists{/gist_id}", - "starred_url": "https://api.github.com/users/xqwzts/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/xqwzts/subscriptions", - "organizations_url": "https://api.github.com/users/xqwzts/orgs", - "repos_url": "https://api.github.com/users/xqwzts/repos", - "events_url": "https://api.github.com/users/xqwzts/events{/privacy}", - "received_events_url": "https://api.github.com/users/xqwzts/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 10, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 86, - "d": 17, - "c": 4 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 32, - "d": 13, - "c": 3 - }, - { - "w": 1466294400, - "a": 73, - "d": 1, - "c": 1 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "aghassemi", - "id": 2099009, - "node_id": "MDQ6VXNlcjIwOTkwMDk=", - "avatar_url": "https://avatars3.githubusercontent.com/u/2099009?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/aghassemi", - "html_url": "https://github.com/aghassemi", - "followers_url": "https://api.github.com/users/aghassemi/followers", - "following_url": "https://api.github.com/users/aghassemi/following{/other_user}", - "gists_url": "https://api.github.com/users/aghassemi/gists{/gist_id}", - "starred_url": "https://api.github.com/users/aghassemi/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/aghassemi/subscriptions", - "organizations_url": "https://api.github.com/users/aghassemi/orgs", - "repos_url": "https://api.github.com/users/aghassemi/repos", - "events_url": "https://api.github.com/users/aghassemi/events{/privacy}", - "received_events_url": "https://api.github.com/users/aghassemi/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 10, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1438473600, - "a": 121, - "d": 40, - "c": 2 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 24, - "d": 4, - "c": 1 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 14, - "d": 7, - "c": 1 - }, - { - "w": 1445126400, - "a": 73, - "d": 36, - "c": 2 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 5, - "d": 5, - "c": 1 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 58, - "d": 11, - "c": 1 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jimbeveridge", - "id": 7953123, - "node_id": "MDQ6VXNlcjc5NTMxMjM=", - "avatar_url": "https://avatars1.githubusercontent.com/u/7953123?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jimbeveridge", - "html_url": "https://github.com/jimbeveridge", - "followers_url": "https://api.github.com/users/jimbeveridge/followers", - "following_url": "https://api.github.com/users/jimbeveridge/following{/other_user}", - "gists_url": "https://api.github.com/users/jimbeveridge/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jimbeveridge/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jimbeveridge/subscriptions", - "organizations_url": "https://api.github.com/users/jimbeveridge/orgs", - "repos_url": "https://api.github.com/users/jimbeveridge/repos", - "events_url": "https://api.github.com/users/jimbeveridge/events{/privacy}", - "received_events_url": "https://api.github.com/users/jimbeveridge/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 11, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 46, - "d": 46, - "c": 2 - }, - { - "w": 1515888000, - "a": 70, - "d": 71, - "c": 1 - }, - { - "w": 1516492800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 69, - "d": 85, - "c": 1 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 34, - "d": 35, - "c": 1 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 56, - "d": 56, - "c": 1 - }, - { - "w": 1526169600, - "a": 15, - "d": 15, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 74, - "d": 46, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 159, - "d": 163, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 12, - "d": 2, - "c": 1 - } - ], - "author": { - "login": "srawlins", - "id": 103167, - "node_id": "MDQ6VXNlcjEwMzE2Nw==", - "avatar_url": "https://avatars3.githubusercontent.com/u/103167?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/srawlins", - "html_url": "https://github.com/srawlins", - "followers_url": "https://api.github.com/users/srawlins/followers", - "following_url": "https://api.github.com/users/srawlins/following{/other_user}", - "gists_url": "https://api.github.com/users/srawlins/gists{/gist_id}", - "starred_url": "https://api.github.com/users/srawlins/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/srawlins/subscriptions", - "organizations_url": "https://api.github.com/users/srawlins/orgs", - "repos_url": "https://api.github.com/users/srawlins/repos", - "events_url": "https://api.github.com/users/srawlins/events{/privacy}", - "received_events_url": "https://api.github.com/users/srawlins/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 11, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 307, - "d": 65, - "c": 2 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 1, - "d": 5, - "c": 1 - }, - { - "w": 1512864000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 17, - "d": 17, - "c": 1 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 789, - "d": 633, - "c": 3 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mkustermann", - "id": 5757092, - "node_id": "MDQ6VXNlcjU3NTcwOTI=", - "avatar_url": "https://avatars2.githubusercontent.com/u/5757092?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mkustermann", - "html_url": "https://github.com/mkustermann", - "followers_url": "https://api.github.com/users/mkustermann/followers", - "following_url": "https://api.github.com/users/mkustermann/following{/other_user}", - "gists_url": "https://api.github.com/users/mkustermann/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mkustermann/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mkustermann/subscriptions", - "organizations_url": "https://api.github.com/users/mkustermann/orgs", - "repos_url": "https://api.github.com/users/mkustermann/repos", - "events_url": "https://api.github.com/users/mkustermann/events{/privacy}", - "received_events_url": "https://api.github.com/users/mkustermann/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 11, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 16, - "d": 15, - "c": 2 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 65, - "d": 53, - "c": 2 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 17, - "d": 4, - "c": 1 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 35, - "d": 23, - "c": 3 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 11, - "d": 3, - "c": 1 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "alhaad", - "id": 5509332, - "node_id": "MDQ6VXNlcjU1MDkzMzI=", - "avatar_url": "https://avatars1.githubusercontent.com/u/5509332?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/alhaad", - "html_url": "https://github.com/alhaad", - "followers_url": "https://api.github.com/users/alhaad/followers", - "following_url": "https://api.github.com/users/alhaad/following{/other_user}", - "gists_url": "https://api.github.com/users/alhaad/gists{/gist_id}", - "starred_url": "https://api.github.com/users/alhaad/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/alhaad/subscriptions", - "organizations_url": "https://api.github.com/users/alhaad/orgs", - "repos_url": "https://api.github.com/users/alhaad/repos", - "events_url": "https://api.github.com/users/alhaad/events{/privacy}", - "received_events_url": "https://api.github.com/users/alhaad/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 12, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 1442, - "d": 1, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 847, - "d": 327, - "c": 2 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 182, - "d": 39, - "c": 2 - }, - { - "w": 1533427200, - "a": 3181, - "d": 221, - "c": 6 - }, - { - "w": 1534032000, - "a": 263, - "d": 206, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "nataliesampsell", - "id": 22058239, - "node_id": "MDQ6VXNlcjIyMDU4MjM5", - "avatar_url": "https://avatars2.githubusercontent.com/u/22058239?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/nataliesampsell", - "html_url": "https://github.com/nataliesampsell", - "followers_url": "https://api.github.com/users/nataliesampsell/followers", - "following_url": "https://api.github.com/users/nataliesampsell/following{/other_user}", - "gists_url": "https://api.github.com/users/nataliesampsell/gists{/gist_id}", - "starred_url": "https://api.github.com/users/nataliesampsell/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/nataliesampsell/subscriptions", - "organizations_url": "https://api.github.com/users/nataliesampsell/orgs", - "repos_url": "https://api.github.com/users/nataliesampsell/repos", - "events_url": "https://api.github.com/users/nataliesampsell/events{/privacy}", - "received_events_url": "https://api.github.com/users/nataliesampsell/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 12, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 65, - "d": 14, - "c": 2 - }, - { - "w": 1492300800, - "a": 26, - "d": 10, - "c": 2 - }, - { - "w": 1492905600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1493510400, - "a": 156, - "d": 0, - "c": 1 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 13, - "d": 1, - "c": 1 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 271, - "d": 109, - "c": 3 - }, - { - "w": 1497744000, - "a": 11, - "d": 4, - "c": 1 - }, - { - "w": 1498348800, - "a": 98, - "d": 27, - "c": 1 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "skybrian", - "id": 129084, - "node_id": "MDQ6VXNlcjEyOTA4NA==", - "avatar_url": "https://avatars1.githubusercontent.com/u/129084?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/skybrian", - "html_url": "https://github.com/skybrian", - "followers_url": "https://api.github.com/users/skybrian/followers", - "following_url": "https://api.github.com/users/skybrian/following{/other_user}", - "gists_url": "https://api.github.com/users/skybrian/gists{/gist_id}", - "starred_url": "https://api.github.com/users/skybrian/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/skybrian/subscriptions", - "organizations_url": "https://api.github.com/users/skybrian/orgs", - "repos_url": "https://api.github.com/users/skybrian/repos", - "events_url": "https://api.github.com/users/skybrian/events{/privacy}", - "received_events_url": "https://api.github.com/users/skybrian/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 15, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 159, - "d": 7, - "c": 3 - }, - { - "w": 1552780800, - "a": 212, - "d": 13, - "c": 2 - }, - { - "w": 1553385600, - "a": 405, - "d": 7, - "c": 4 - }, - { - "w": 1553990400, - "a": 167, - "d": 5, - "c": 2 - }, - { - "w": 1554595200, - "a": 393, - "d": 49, - "c": 4 - } - ], - "author": { - "login": "shihaohong", - "id": 27032613, - "node_id": "MDQ6VXNlcjI3MDMyNjEz", - "avatar_url": "https://avatars3.githubusercontent.com/u/27032613?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/shihaohong", - "html_url": "https://github.com/shihaohong", - "followers_url": "https://api.github.com/users/shihaohong/followers", - "following_url": "https://api.github.com/users/shihaohong/following{/other_user}", - "gists_url": "https://api.github.com/users/shihaohong/gists{/gist_id}", - "starred_url": "https://api.github.com/users/shihaohong/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/shihaohong/subscriptions", - "organizations_url": "https://api.github.com/users/shihaohong/orgs", - "repos_url": "https://api.github.com/users/shihaohong/repos", - "events_url": "https://api.github.com/users/shihaohong/events{/privacy}", - "received_events_url": "https://api.github.com/users/shihaohong/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 15, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 98, - "d": 23, - "c": 2 - }, - { - "w": 1547942400, - "a": 372, - "d": 19, - "c": 1 - }, - { - "w": 1548547200, - "a": 323, - "d": 74, - "c": 5 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 321, - "d": 105, - "c": 1 - }, - { - "w": 1550361600, - "a": 138, - "d": 9, - "c": 2 - }, - { - "w": 1550966400, - "a": 169, - "d": 30, - "c": 1 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 37, - "d": 1, - "c": 1 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 42, - "d": 2, - "c": 1 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 6, - "d": 4, - "c": 1 - } - ], - "author": { - "login": "rami-a", - "id": 2364772, - "node_id": "MDQ6VXNlcjIzNjQ3NzI=", - "avatar_url": "https://avatars3.githubusercontent.com/u/2364772?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/rami-a", - "html_url": "https://github.com/rami-a", - "followers_url": "https://api.github.com/users/rami-a/followers", - "following_url": "https://api.github.com/users/rami-a/following{/other_user}", - "gists_url": "https://api.github.com/users/rami-a/gists{/gist_id}", - "starred_url": "https://api.github.com/users/rami-a/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/rami-a/subscriptions", - "organizations_url": "https://api.github.com/users/rami-a/orgs", - "repos_url": "https://api.github.com/users/rami-a/repos", - "events_url": "https://api.github.com/users/rami-a/events{/privacy}", - "received_events_url": "https://api.github.com/users/rami-a/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 15, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 62, - "d": 3, - "c": 2 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 93, - "d": 0, - "c": 2 - }, - { - "w": 1551571200, - "a": 99, - "d": 0, - "c": 2 - }, - { - "w": 1552176000, - "a": 137, - "d": 33, - "c": 3 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 37, - "d": 5, - "c": 2 - }, - { - "w": 1553990400, - "a": 75, - "d": 37, - "c": 4 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "Piinks", - "id": 16964204, - "node_id": "MDQ6VXNlcjE2OTY0MjA0", - "avatar_url": "https://avatars3.githubusercontent.com/u/16964204?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/Piinks", - "html_url": "https://github.com/Piinks", - "followers_url": "https://api.github.com/users/Piinks/followers", - "following_url": "https://api.github.com/users/Piinks/following{/other_user}", - "gists_url": "https://api.github.com/users/Piinks/gists{/gist_id}", - "starred_url": "https://api.github.com/users/Piinks/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/Piinks/subscriptions", - "organizations_url": "https://api.github.com/users/Piinks/orgs", - "repos_url": "https://api.github.com/users/Piinks/repos", - "events_url": "https://api.github.com/users/Piinks/events{/privacy}", - "received_events_url": "https://api.github.com/users/Piinks/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 15, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 189, - "d": 90, - "c": 3 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 58, - "d": 0, - "c": 1 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 164, - "d": 63, - "c": 1 - }, - { - "w": 1523145600, - "a": 592, - "d": 13, - "c": 4 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 6, - "d": 1, - "c": 1 - }, - { - "w": 1524960000, - "a": 10, - "d": 124, - "c": 1 - }, - { - "w": 1525564800, - "a": 58, - "d": 58, - "c": 1 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 4, - "d": 0, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 29, - "d": 29, - "c": 2 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "scheglov", - "id": 384794, - "node_id": "MDQ6VXNlcjM4NDc5NA==", - "avatar_url": "https://avatars0.githubusercontent.com/u/384794?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/scheglov", - "html_url": "https://github.com/scheglov", - "followers_url": "https://api.github.com/users/scheglov/followers", - "following_url": "https://api.github.com/users/scheglov/following{/other_user}", - "gists_url": "https://api.github.com/users/scheglov/gists{/gist_id}", - "starred_url": "https://api.github.com/users/scheglov/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/scheglov/subscriptions", - "organizations_url": "https://api.github.com/users/scheglov/orgs", - "repos_url": "https://api.github.com/users/scheglov/repos", - "events_url": "https://api.github.com/users/scheglov/events{/privacy}", - "received_events_url": "https://api.github.com/users/scheglov/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 15, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 57, - "d": 12, - "c": 1 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 293, - "d": 350, - "c": 3 - }, - { - "w": 1538265600, - "a": 46, - "d": 44, - "c": 1 - }, - { - "w": 1538870400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 128, - "d": 70, - "c": 1 - }, - { - "w": 1540684800, - "a": 187, - "d": 12, - "c": 2 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 187, - "d": 47, - "c": 1 - }, - { - "w": 1544918400, - "a": 210, - "d": 9, - "c": 1 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 281, - "d": 12, - "c": 1 - }, - { - "w": 1547337600, - "a": 215, - "d": 79, - "c": 3 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "johnsonmh", - "id": 4229329, - "node_id": "MDQ6VXNlcjQyMjkzMjk=", - "avatar_url": "https://avatars2.githubusercontent.com/u/4229329?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/johnsonmh", - "html_url": "https://github.com/johnsonmh", - "followers_url": "https://api.github.com/users/johnsonmh/followers", - "following_url": "https://api.github.com/users/johnsonmh/following{/other_user}", - "gists_url": "https://api.github.com/users/johnsonmh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/johnsonmh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/johnsonmh/subscriptions", - "organizations_url": "https://api.github.com/users/johnsonmh/orgs", - "repos_url": "https://api.github.com/users/johnsonmh/repos", - "events_url": "https://api.github.com/users/johnsonmh/events{/privacy}", - "received_events_url": "https://api.github.com/users/johnsonmh/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 15, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 1120, - "d": 2, - "c": 3 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 119, - "d": 85, - "c": 3 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 32, - "d": 8, - "c": 3 - }, - { - "w": 1420934400, - "a": 38, - "d": 28, - "c": 3 - }, - { - "w": 1421539200, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1422144000, - "a": 0, - "d": 5, - "c": 1 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "esprehn", - "id": 415779, - "node_id": "MDQ6VXNlcjQxNTc3OQ==", - "avatar_url": "https://avatars1.githubusercontent.com/u/415779?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/esprehn", - "html_url": "https://github.com/esprehn", - "followers_url": "https://api.github.com/users/esprehn/followers", - "following_url": "https://api.github.com/users/esprehn/following{/other_user}", - "gists_url": "https://api.github.com/users/esprehn/gists{/gist_id}", - "starred_url": "https://api.github.com/users/esprehn/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/esprehn/subscriptions", - "organizations_url": "https://api.github.com/users/esprehn/orgs", - "repos_url": "https://api.github.com/users/esprehn/repos", - "events_url": "https://api.github.com/users/esprehn/events{/privacy}", - "received_events_url": "https://api.github.com/users/esprehn/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 16, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 79, - "d": 21, - "c": 1 - }, - { - "w": 1536451200, - "a": 107, - "d": 21, - "c": 1 - }, - { - "w": 1537056000, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1537660800, - "a": 67, - "d": 9, - "c": 2 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 119, - "d": 18, - "c": 3 - }, - { - "w": 1540080000, - "a": 829, - "d": 386, - "c": 4 - }, - { - "w": 1540684800, - "a": 4, - "d": 2, - "c": 1 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 31, - "d": 16, - "c": 1 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 96, - "d": 3, - "c": 1 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mklim", - "id": 4615911, - "node_id": "MDQ6VXNlcjQ2MTU5MTE=", - "avatar_url": "https://avatars3.githubusercontent.com/u/4615911?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mklim", - "html_url": "https://github.com/mklim", - "followers_url": "https://api.github.com/users/mklim/followers", - "following_url": "https://api.github.com/users/mklim/following{/other_user}", - "gists_url": "https://api.github.com/users/mklim/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mklim/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mklim/subscriptions", - "organizations_url": "https://api.github.com/users/mklim/orgs", - "repos_url": "https://api.github.com/users/mklim/repos", - "events_url": "https://api.github.com/users/mklim/events{/privacy}", - "received_events_url": "https://api.github.com/users/mklim/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 19, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 10, - "d": 15, - "c": 6 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 10, - "d": 3, - "c": 4 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1540684800, - "a": 113, - "d": 2, - "c": 1 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 6, - "d": 6, - "c": 2 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 77, - "d": 31, - "c": 1 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "bkonyi", - "id": 24210656, - "node_id": "MDQ6VXNlcjI0MjEwNjU2", - "avatar_url": "https://avatars2.githubusercontent.com/u/24210656?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/bkonyi", - "html_url": "https://github.com/bkonyi", - "followers_url": "https://api.github.com/users/bkonyi/followers", - "following_url": "https://api.github.com/users/bkonyi/following{/other_user}", - "gists_url": "https://api.github.com/users/bkonyi/gists{/gist_id}", - "starred_url": "https://api.github.com/users/bkonyi/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/bkonyi/subscriptions", - "organizations_url": "https://api.github.com/users/bkonyi/orgs", - "repos_url": "https://api.github.com/users/bkonyi/repos", - "events_url": "https://api.github.com/users/bkonyi/events{/privacy}", - "received_events_url": "https://api.github.com/users/bkonyi/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 20, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 194, - "d": 72, - "c": 1 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 44, - "d": 0, - "c": 1 - }, - { - "w": 1546732800, - "a": 53, - "d": 2, - "c": 2 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 60, - "d": 4, - "c": 2 - }, - { - "w": 1549152000, - "a": 155, - "d": 21, - "c": 4 - }, - { - "w": 1549756800, - "a": 540, - "d": 195, - "c": 9 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 137, - "d": 11, - "c": 1 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "kangwang1988", - "id": 817851, - "node_id": "MDQ6VXNlcjgxNzg1MQ==", - "avatar_url": "https://avatars1.githubusercontent.com/u/817851?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/kangwang1988", - "html_url": "https://github.com/kangwang1988", - "followers_url": "https://api.github.com/users/kangwang1988/followers", - "following_url": "https://api.github.com/users/kangwang1988/following{/other_user}", - "gists_url": "https://api.github.com/users/kangwang1988/gists{/gist_id}", - "starred_url": "https://api.github.com/users/kangwang1988/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/kangwang1988/subscriptions", - "organizations_url": "https://api.github.com/users/kangwang1988/orgs", - "repos_url": "https://api.github.com/users/kangwang1988/repos", - "events_url": "https://api.github.com/users/kangwang1988/events{/privacy}", - "received_events_url": "https://api.github.com/users/kangwang1988/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 20, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1511654400, - "a": 387, - "d": 1, - "c": 1 - }, - { - "w": 1512259200, - "a": 105, - "d": 48, - "c": 2 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 3, - "d": 11, - "c": 1 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 212, - "d": 23, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 894, - "d": 623, - "c": 3 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 114, - "d": 114, - "c": 2 - }, - { - "w": 1531612800, - "a": 1274, - "d": 1226, - "c": 6 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "sigurdm", - "id": 8613953, - "node_id": "MDQ6VXNlcjg2MTM5NTM=", - "avatar_url": "https://avatars1.githubusercontent.com/u/8613953?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/sigurdm", - "html_url": "https://github.com/sigurdm", - "followers_url": "https://api.github.com/users/sigurdm/followers", - "following_url": "https://api.github.com/users/sigurdm/following{/other_user}", - "gists_url": "https://api.github.com/users/sigurdm/gists{/gist_id}", - "starred_url": "https://api.github.com/users/sigurdm/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/sigurdm/subscriptions", - "organizations_url": "https://api.github.com/users/sigurdm/orgs", - "repos_url": "https://api.github.com/users/sigurdm/repos", - "events_url": "https://api.github.com/users/sigurdm/events{/privacy}", - "received_events_url": "https://api.github.com/users/sigurdm/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 21, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 244, - "d": 4, - "c": 2 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 350, - "d": 339, - "c": 3 - }, - { - "w": 1449360000, - "a": 248, - "d": 242, - "c": 2 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 16, - "d": 2, - "c": 1 - }, - { - "w": 1527379200, - "a": 36, - "d": 2, - "c": 1 - }, - { - "w": 1527984000, - "a": 7, - "d": 3, - "c": 2 - }, - { - "w": 1528588800, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1529193600, - "a": 139, - "d": 76, - "c": 3 - }, - { - "w": 1529798400, - "a": 345, - "d": 3, - "c": 3 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "floitschG", - "id": 8631949, - "node_id": "MDQ6VXNlcjg2MzE5NDk=", - "avatar_url": "https://avatars2.githubusercontent.com/u/8631949?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/floitschG", - "html_url": "https://github.com/floitschG", - "followers_url": "https://api.github.com/users/floitschG/followers", - "following_url": "https://api.github.com/users/floitschG/following{/other_user}", - "gists_url": "https://api.github.com/users/floitschG/gists{/gist_id}", - "starred_url": "https://api.github.com/users/floitschG/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/floitschG/subscriptions", - "organizations_url": "https://api.github.com/users/floitschG/orgs", - "repos_url": "https://api.github.com/users/floitschG/repos", - "events_url": "https://api.github.com/users/floitschG/events{/privacy}", - "received_events_url": "https://api.github.com/users/floitschG/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 21, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 213, - "d": 116, - "c": 6 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 46, - "d": 26, - "c": 2 - }, - { - "w": 1503187200, - "a": 62, - "d": 29, - "c": 6 - }, - { - "w": 1503792000, - "a": 1, - "d": 2, - "c": 2 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 32, - "d": 12, - "c": 4 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "B3rn475", - "id": 2686902, - "node_id": "MDQ6VXNlcjI2ODY5MDI=", - "avatar_url": "https://avatars1.githubusercontent.com/u/2686902?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/B3rn475", - "html_url": "https://github.com/B3rn475", - "followers_url": "https://api.github.com/users/B3rn475/followers", - "following_url": "https://api.github.com/users/B3rn475/following{/other_user}", - "gists_url": "https://api.github.com/users/B3rn475/gists{/gist_id}", - "starred_url": "https://api.github.com/users/B3rn475/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/B3rn475/subscriptions", - "organizations_url": "https://api.github.com/users/B3rn475/orgs", - "repos_url": "https://api.github.com/users/B3rn475/repos", - "events_url": "https://api.github.com/users/B3rn475/events{/privacy}", - "received_events_url": "https://api.github.com/users/B3rn475/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 22, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 338, - "d": 23, - "c": 4 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 245, - "d": 124, - "c": 5 - }, - { - "w": 1544918400, - "a": 562, - "d": 97, - "c": 3 - }, - { - "w": 1545523200, - "a": 78, - "d": 2, - "c": 1 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 289, - "d": 8, - "c": 3 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 774, - "d": 170, - "c": 1 - }, - { - "w": 1552176000, - "a": 897, - "d": 171, - "c": 1 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 7, - "d": 0, - "c": 1 - }, - { - "w": 1553990400, - "a": 1261, - "d": 0, - "c": 2 - }, - { - "w": 1554595200, - "a": 81, - "d": 3, - "c": 1 - } - ], - "author": { - "login": "justinmc", - "id": 389558, - "node_id": "MDQ6VXNlcjM4OTU1OA==", - "avatar_url": "https://avatars2.githubusercontent.com/u/389558?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/justinmc", - "html_url": "https://github.com/justinmc", - "followers_url": "https://api.github.com/users/justinmc/followers", - "following_url": "https://api.github.com/users/justinmc/following{/other_user}", - "gists_url": "https://api.github.com/users/justinmc/gists{/gist_id}", - "starred_url": "https://api.github.com/users/justinmc/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/justinmc/subscriptions", - "organizations_url": "https://api.github.com/users/justinmc/orgs", - "repos_url": "https://api.github.com/users/justinmc/repos", - "events_url": "https://api.github.com/users/justinmc/events{/privacy}", - "received_events_url": "https://api.github.com/users/justinmc/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 22, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 12, - "d": 3, - "c": 1 - }, - { - "w": 1527984000, - "a": 129, - "d": 10, - "c": 2 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 273, - "d": 21, - "c": 3 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 832, - "d": 79, - "c": 2 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 87, - "d": 0, - "c": 1 - }, - { - "w": 1532217600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 2083, - "d": 467, - "c": 2 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 114, - "d": 114, - "c": 1 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 4823, - "d": 4844, - "c": 3 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 186, - "d": 16, - "c": 1 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 1152, - "d": 164, - "c": 5 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "matthew-carroll", - "id": 7259036, - "node_id": "MDQ6VXNlcjcyNTkwMzY=", - "avatar_url": "https://avatars3.githubusercontent.com/u/7259036?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/matthew-carroll", - "html_url": "https://github.com/matthew-carroll", - "followers_url": "https://api.github.com/users/matthew-carroll/followers", - "following_url": "https://api.github.com/users/matthew-carroll/following{/other_user}", - "gists_url": "https://api.github.com/users/matthew-carroll/gists{/gist_id}", - "starred_url": "https://api.github.com/users/matthew-carroll/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/matthew-carroll/subscriptions", - "organizations_url": "https://api.github.com/users/matthew-carroll/orgs", - "repos_url": "https://api.github.com/users/matthew-carroll/repos", - "events_url": "https://api.github.com/users/matthew-carroll/events{/privacy}", - "received_events_url": "https://api.github.com/users/matthew-carroll/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 22, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 83, - "d": 44, - "c": 1 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 65, - "d": 10, - "c": 1 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 59, - "d": 14, - "c": 1 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 19, - "d": 11, - "c": 2 - }, - { - "w": 1504396800, - "a": 5, - "d": 5, - "c": 1 - }, - { - "w": 1505001600, - "a": 98, - "d": 11, - "c": 1 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 22, - "d": 22, - "c": 1 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 44, - "d": 12, - "c": 1 - }, - { - "w": 1512259200, - "a": 39, - "d": 8, - "c": 1 - }, - { - "w": 1512864000, - "a": 121, - "d": 106, - "c": 2 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 148, - "d": 148, - "c": 1 - }, - { - "w": 1528588800, - "a": 10, - "d": 10, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 4, - "d": 0, - "c": 1 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 7, - "d": 1, - "c": 1 - }, - { - "w": 1534636800, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 17, - "d": 816, - "c": 1 - }, - { - "w": 1536451200, - "a": 5, - "d": 1, - "c": 1 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 1, - "d": 36, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 36, - "d": 33, - "c": 1 - }, - { - "w": 1547337600, - "a": 50, - "d": 26, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mehmetf", - "id": 6687929, - "node_id": "MDQ6VXNlcjY2ODc5Mjk=", - "avatar_url": "https://avatars3.githubusercontent.com/u/6687929?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mehmetf", - "html_url": "https://github.com/mehmetf", - "followers_url": "https://api.github.com/users/mehmetf/followers", - "following_url": "https://api.github.com/users/mehmetf/following{/other_user}", - "gists_url": "https://api.github.com/users/mehmetf/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mehmetf/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mehmetf/subscriptions", - "organizations_url": "https://api.github.com/users/mehmetf/orgs", - "repos_url": "https://api.github.com/users/mehmetf/repos", - "events_url": "https://api.github.com/users/mehmetf/events{/privacy}", - "received_events_url": "https://api.github.com/users/mehmetf/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 22, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1518912000, - "a": 101, - "d": 2, - "c": 1 - }, - { - "w": 1519516800, - "a": 14, - "d": 6, - "c": 1 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 1076, - "d": 147, - "c": 1 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 637, - "d": 256, - "c": 4 - }, - { - "w": 1523145600, - "a": 11, - "d": 22, - "c": 1 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 173, - "d": 3, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1532822400, - "a": 1128, - "d": 0, - "c": 1 - }, - { - "w": 1533427200, - "a": 1766, - "d": 107, - "c": 1 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 66, - "d": 4, - "c": 1 - }, - { - "w": 1535241600, - "a": 248, - "d": 67, - "c": 2 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 339, - "d": 204, - "c": 4 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 172, - "d": 38, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "DaveShuckerow", - "id": 14947366, - "node_id": "MDQ6VXNlcjE0OTQ3MzY2", - "avatar_url": "https://avatars2.githubusercontent.com/u/14947366?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/DaveShuckerow", - "html_url": "https://github.com/DaveShuckerow", - "followers_url": "https://api.github.com/users/DaveShuckerow/followers", - "following_url": "https://api.github.com/users/DaveShuckerow/following{/other_user}", - "gists_url": "https://api.github.com/users/DaveShuckerow/gists{/gist_id}", - "starred_url": "https://api.github.com/users/DaveShuckerow/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/DaveShuckerow/subscriptions", - "organizations_url": "https://api.github.com/users/DaveShuckerow/orgs", - "repos_url": "https://api.github.com/users/DaveShuckerow/repos", - "events_url": "https://api.github.com/users/DaveShuckerow/events{/privacy}", - "received_events_url": "https://api.github.com/users/DaveShuckerow/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 23, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 1557, - "d": 42, - "c": 1 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 72, - "d": 24, - "c": 2 - }, - { - "w": 1524960000, - "a": 442, - "d": 68, - "c": 3 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 19, - "d": 0, - "c": 1 - }, - { - "w": 1526774400, - "a": 7, - "d": 9, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 46, - "d": 4, - "c": 1 - }, - { - "w": 1529193600, - "a": 133, - "d": 24, - "c": 3 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 54, - "d": 25, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 40, - "d": 22, - "c": 2 - }, - { - "w": 1538265600, - "a": 37, - "d": 19, - "c": 1 - }, - { - "w": 1538870400, - "a": 399, - "d": 207, - "c": 2 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 8, - "d": 1, - "c": 1 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 3, - "d": 4, - "c": 1 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 10, - "d": 7, - "c": 1 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 9, - "d": 3, - "c": 1 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "awdavies", - "id": 2238468, - "node_id": "MDQ6VXNlcjIyMzg0Njg=", - "avatar_url": "https://avatars0.githubusercontent.com/u/2238468?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/awdavies", - "html_url": "https://github.com/awdavies", - "followers_url": "https://api.github.com/users/awdavies/followers", - "following_url": "https://api.github.com/users/awdavies/following{/other_user}", - "gists_url": "https://api.github.com/users/awdavies/gists{/gist_id}", - "starred_url": "https://api.github.com/users/awdavies/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/awdavies/subscriptions", - "organizations_url": "https://api.github.com/users/awdavies/orgs", - "repos_url": "https://api.github.com/users/awdavies/repos", - "events_url": "https://api.github.com/users/awdavies/events{/privacy}", - "received_events_url": "https://api.github.com/users/awdavies/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 23, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1439078400, - "a": 18, - "d": 13, - "c": 1 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 50, - "d": 48, - "c": 2 - }, - { - "w": 1440892800, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1441497600, - "a": 18, - "d": 2, - "c": 1 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 10, - "d": 6, - "c": 1 - }, - { - "w": 1443312000, - "a": 8, - "d": 5, - "c": 2 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 23, - "d": 10, - "c": 1 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 269, - "d": 81, - "c": 2 - }, - { - "w": 1458432000, - "a": 400, - "d": 34, - "c": 3 - }, - { - "w": 1459036800, - "a": 522, - "d": 323, - "c": 2 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 54, - "d": 0, - "c": 2 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 85, - "d": 6, - "c": 1 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 62, - "d": 5, - "c": 1 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "apwilson", - "id": 142874, - "node_id": "MDQ6VXNlcjE0Mjg3NA==", - "avatar_url": "https://avatars3.githubusercontent.com/u/142874?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/apwilson", - "html_url": "https://github.com/apwilson", - "followers_url": "https://api.github.com/users/apwilson/followers", - "following_url": "https://api.github.com/users/apwilson/following{/other_user}", - "gists_url": "https://api.github.com/users/apwilson/gists{/gist_id}", - "starred_url": "https://api.github.com/users/apwilson/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/apwilson/subscriptions", - "organizations_url": "https://api.github.com/users/apwilson/orgs", - "repos_url": "https://api.github.com/users/apwilson/repos", - "events_url": "https://api.github.com/users/apwilson/events{/privacy}", - "received_events_url": "https://api.github.com/users/apwilson/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 24, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 154, - "d": 30, - "c": 1 - }, - { - "w": 1438473600, - "a": 355, - "d": 263, - "c": 2 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 164, - "d": 29, - "c": 4 - }, - { - "w": 1442707200, - "a": 291, - "d": 139, - "c": 14 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 62, - "d": 65, - "c": 1 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jamesr", - "id": 7497301, - "node_id": "MDQ6VXNlcjc0OTczMDE=", - "avatar_url": "https://avatars1.githubusercontent.com/u/7497301?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jamesr", - "html_url": "https://github.com/jamesr", - "followers_url": "https://api.github.com/users/jamesr/followers", - "following_url": "https://api.github.com/users/jamesr/following{/other_user}", - "gists_url": "https://api.github.com/users/jamesr/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jamesr/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jamesr/subscriptions", - "organizations_url": "https://api.github.com/users/jamesr/orgs", - "repos_url": "https://api.github.com/users/jamesr/repos", - "events_url": "https://api.github.com/users/jamesr/events{/privacy}", - "received_events_url": "https://api.github.com/users/jamesr/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 25, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 5740, - "d": 0, - "c": 1 - }, - { - "w": 1414886400, - "a": 22, - "d": 13, - "c": 2 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1416700800, - "a": 27, - "d": 3, - "c": 3 - }, - { - "w": 1417305600, - "a": 18, - "d": 0, - "c": 1 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 19, - "d": 110, - "c": 1 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 5537, - "d": 48, - "c": 6 - }, - { - "w": 1425772800, - "a": 106, - "d": 116, - "c": 7 - }, - { - "w": 1426377600, - "a": 40, - "d": 158, - "c": 3 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "rafaelw", - "id": 646051, - "node_id": "MDQ6VXNlcjY0NjA1MQ==", - "avatar_url": "https://avatars0.githubusercontent.com/u/646051?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/rafaelw", - "html_url": "https://github.com/rafaelw", - "followers_url": "https://api.github.com/users/rafaelw/followers", - "following_url": "https://api.github.com/users/rafaelw/following{/other_user}", - "gists_url": "https://api.github.com/users/rafaelw/gists{/gist_id}", - "starred_url": "https://api.github.com/users/rafaelw/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/rafaelw/subscriptions", - "organizations_url": "https://api.github.com/users/rafaelw/orgs", - "repos_url": "https://api.github.com/users/rafaelw/repos", - "events_url": "https://api.github.com/users/rafaelw/events{/privacy}", - "received_events_url": "https://api.github.com/users/rafaelw/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 31, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 40, - "d": 0, - "c": 1 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 9, - "d": 5, - "c": 1 - }, - { - "w": 1515888000, - "a": 1453, - "d": 84, - "c": 4 - }, - { - "w": 1516492800, - "a": 90, - "d": 68, - "c": 2 - }, - { - "w": 1517097600, - "a": 20, - "d": 6, - "c": 1 - }, - { - "w": 1517702400, - "a": 198, - "d": 170, - "c": 6 - }, - { - "w": 1518307200, - "a": 58, - "d": 37, - "c": 6 - }, - { - "w": 1518912000, - "a": 10, - "d": 10, - "c": 1 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 341, - "d": 274, - "c": 2 - }, - { - "w": 1521331200, - "a": 10, - "d": 3, - "c": 1 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1525564800, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1526169600, - "a": 144, - "d": 71, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 96, - "d": 30, - "c": 2 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 68, - "d": 5, - "c": 1 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mraleph", - "id": 131846, - "node_id": "MDQ6VXNlcjEzMTg0Ng==", - "avatar_url": "https://avatars3.githubusercontent.com/u/131846?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mraleph", - "html_url": "https://github.com/mraleph", - "followers_url": "https://api.github.com/users/mraleph/followers", - "following_url": "https://api.github.com/users/mraleph/following{/other_user}", - "gists_url": "https://api.github.com/users/mraleph/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mraleph/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mraleph/subscriptions", - "organizations_url": "https://api.github.com/users/mraleph/orgs", - "repos_url": "https://api.github.com/users/mraleph/repos", - "events_url": "https://api.github.com/users/mraleph/events{/privacy}", - "received_events_url": "https://api.github.com/users/mraleph/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 33, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 10, - "d": 0, - "c": 1 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 35, - "d": 0, - "c": 1 - }, - { - "w": 1474761600, - "a": 157, - "d": 84, - "c": 3 - }, - { - "w": 1475366400, - "a": 24, - "d": 4, - "c": 1 - }, - { - "w": 1475971200, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 8, - "d": 4, - "c": 1 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 10, - "d": 4, - "c": 2 - }, - { - "w": 1480204800, - "a": 9, - "d": 2, - "c": 1 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 47, - "d": 7, - "c": 1 - }, - { - "w": 1490486400, - "a": 4, - "d": 2, - "c": 1 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 126, - "d": 3, - "c": 1 - }, - { - "w": 1492905600, - "a": 25, - "d": 26, - "c": 1 - }, - { - "w": 1493510400, - "a": 9, - "d": 3, - "c": 1 - }, - { - "w": 1494115200, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 142, - "d": 4, - "c": 1 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 4, - "d": 0, - "c": 1 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 6, - "d": 6, - "c": 1 - }, - { - "w": 1507420800, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1508025600, - "a": 10, - "d": 7, - "c": 3 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 7, - "d": 7, - "c": 1 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 24, - "d": 0, - "c": 1 - }, - { - "w": 1520726400, - "a": 7, - "d": 22, - "c": 1 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "pylaligand", - "id": 1115379, - "node_id": "MDQ6VXNlcjExMTUzNzk=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1115379?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/pylaligand", - "html_url": "https://github.com/pylaligand", - "followers_url": "https://api.github.com/users/pylaligand/followers", - "following_url": "https://api.github.com/users/pylaligand/following{/other_user}", - "gists_url": "https://api.github.com/users/pylaligand/gists{/gist_id}", - "starred_url": "https://api.github.com/users/pylaligand/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/pylaligand/subscriptions", - "organizations_url": "https://api.github.com/users/pylaligand/orgs", - "repos_url": "https://api.github.com/users/pylaligand/repos", - "events_url": "https://api.github.com/users/pylaligand/events{/privacy}", - "received_events_url": "https://api.github.com/users/pylaligand/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 34, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 93, - "d": 8, - "c": 1 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 39, - "d": 9, - "c": 1 - }, - { - "w": 1512259200, - "a": 7, - "d": 2, - "c": 3 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 11, - "d": 11, - "c": 3 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1517702400, - "a": 17, - "d": 11, - "c": 1 - }, - { - "w": 1518307200, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1520121600, - "a": 79, - "d": 38, - "c": 5 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 10, - "d": 10, - "c": 2 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 13, - "d": 0, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 3, - "d": 3, - "c": 2 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 4, - "d": 86, - "c": 3 - }, - { - "w": 1537660800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 22, - "d": 6, - "c": 1 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "alexmarkov", - "id": 29557594, - "node_id": "MDQ6VXNlcjI5NTU3NTk0", - "avatar_url": "https://avatars3.githubusercontent.com/u/29557594?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/alexmarkov", - "html_url": "https://github.com/alexmarkov", - "followers_url": "https://api.github.com/users/alexmarkov/followers", - "following_url": "https://api.github.com/users/alexmarkov/following{/other_user}", - "gists_url": "https://api.github.com/users/alexmarkov/gists{/gist_id}", - "starred_url": "https://api.github.com/users/alexmarkov/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/alexmarkov/subscriptions", - "organizations_url": "https://api.github.com/users/alexmarkov/orgs", - "repos_url": "https://api.github.com/users/alexmarkov/repos", - "events_url": "https://api.github.com/users/alexmarkov/events{/privacy}", - "received_events_url": "https://api.github.com/users/alexmarkov/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 40, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 16, - "d": 0, - "c": 1 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1536451200, - "a": 42, - "d": 2, - "c": 2 - }, - { - "w": 1537056000, - "a": 3, - "d": 3, - "c": 2 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 37, - "d": 7, - "c": 3 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 83, - "d": 87, - "c": 2 - }, - { - "w": 1540080000, - "a": 26, - "d": 14, - "c": 2 - }, - { - "w": 1540684800, - "a": 57, - "d": 37, - "c": 2 - }, - { - "w": 1541289600, - "a": 1741, - "d": 283, - "c": 4 - }, - { - "w": 1541894400, - "a": 28, - "d": 0, - "c": 1 - }, - { - "w": 1542499200, - "a": 41, - "d": 7, - "c": 1 - }, - { - "w": 1543104000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1543708800, - "a": 2, - "d": 3, - "c": 1 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 287, - "d": 36, - "c": 4 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 51, - "d": 5, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 51, - "d": 1, - "c": 1 - }, - { - "w": 1547942400, - "a": 139, - "d": 140, - "c": 4 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 787, - "d": 46, - "c": 1 - }, - { - "w": 1549756800, - "a": 103, - "d": 8, - "c": 2 - }, - { - "w": 1550361600, - "a": 682, - "d": 9, - "c": 1 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 56, - "d": 1, - "c": 1 - }, - { - "w": 1552176000, - "a": 209, - "d": 12, - "c": 2 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "GaryQian", - "id": 1887398, - "node_id": "MDQ6VXNlcjE4ODczOTg=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1887398?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/GaryQian", - "html_url": "https://github.com/GaryQian", - "followers_url": "https://api.github.com/users/GaryQian/followers", - "following_url": "https://api.github.com/users/GaryQian/following{/other_user}", - "gists_url": "https://api.github.com/users/GaryQian/gists{/gist_id}", - "starred_url": "https://api.github.com/users/GaryQian/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/GaryQian/subscriptions", - "organizations_url": "https://api.github.com/users/GaryQian/orgs", - "repos_url": "https://api.github.com/users/GaryQian/repos", - "events_url": "https://api.github.com/users/GaryQian/events{/privacy}", - "received_events_url": "https://api.github.com/users/GaryQian/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 44, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 334, - "d": 36, - "c": 2 - }, - { - "w": 1469318400, - "a": 206, - "d": 86, - "c": 1 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 1869, - "d": 7, - "c": 4 - }, - { - "w": 1471132800, - "a": 785, - "d": 32, - "c": 5 - }, - { - "w": 1471737600, - "a": 426, - "d": 9, - "c": 2 - }, - { - "w": 1472342400, - "a": 663, - "d": 168, - "c": 7 - }, - { - "w": 1472947200, - "a": 23, - "d": 139, - "c": 3 - }, - { - "w": 1473552000, - "a": 1593, - "d": 528, - "c": 11 - }, - { - "w": 1474156800, - "a": 993, - "d": 71, - "c": 7 - }, - { - "w": 1474761600, - "a": 65, - "d": 0, - "c": 2 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "dragostis", - "id": 4136413, - "node_id": "MDQ6VXNlcjQxMzY0MTM=", - "avatar_url": "https://avatars3.githubusercontent.com/u/4136413?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/dragostis", - "html_url": "https://github.com/dragostis", - "followers_url": "https://api.github.com/users/dragostis/followers", - "following_url": "https://api.github.com/users/dragostis/following{/other_user}", - "gists_url": "https://api.github.com/users/dragostis/gists{/gist_id}", - "starred_url": "https://api.github.com/users/dragostis/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/dragostis/subscriptions", - "organizations_url": "https://api.github.com/users/dragostis/orgs", - "repos_url": "https://api.github.com/users/dragostis/repos", - "events_url": "https://api.github.com/users/dragostis/events{/privacy}", - "received_events_url": "https://api.github.com/users/dragostis/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 45, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 233, - "d": 94, - "c": 1 - }, - { - "w": 1486252800, - "a": 393, - "d": 275, - "c": 1 - }, - { - "w": 1486857600, - "a": 15, - "d": 35, - "c": 5 - }, - { - "w": 1487462400, - "a": 714, - "d": 208, - "c": 11 - }, - { - "w": 1488067200, - "a": 35, - "d": 12, - "c": 3 - }, - { - "w": 1488672000, - "a": 106, - "d": 11, - "c": 2 - }, - { - "w": 1489276800, - "a": 116, - "d": 24, - "c": 4 - }, - { - "w": 1489881600, - "a": 439, - "d": 722, - "c": 5 - }, - { - "w": 1490486400, - "a": 471, - "d": 90, - "c": 4 - }, - { - "w": 1491091200, - "a": 101, - "d": 3, - "c": 1 - }, - { - "w": 1491696000, - "a": 232, - "d": 77, - "c": 1 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 132, - "d": 67, - "c": 2 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 159, - "d": 34, - "c": 1 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 6, - "d": 1, - "c": 1 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 161, - "d": 85, - "c": 2 - }, - { - "w": 1512259200, - "a": 40, - "d": 9, - "c": 1 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jakobr-google", - "id": 20046617, - "node_id": "MDQ6VXNlcjIwMDQ2NjE3", - "avatar_url": "https://avatars3.githubusercontent.com/u/20046617?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jakobr-google", - "html_url": "https://github.com/jakobr-google", - "followers_url": "https://api.github.com/users/jakobr-google/followers", - "following_url": "https://api.github.com/users/jakobr-google/following{/other_user}", - "gists_url": "https://api.github.com/users/jakobr-google/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jakobr-google/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jakobr-google/subscriptions", - "organizations_url": "https://api.github.com/users/jakobr-google/orgs", - "repos_url": "https://api.github.com/users/jakobr-google/repos", - "events_url": "https://api.github.com/users/jakobr-google/events{/privacy}", - "received_events_url": "https://api.github.com/users/jakobr-google/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 46, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 513, - "d": 88, - "c": 3 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 276, - "d": 98, - "c": 2 - }, - { - "w": 1492300800, - "a": 119, - "d": 33, - "c": 2 - }, - { - "w": 1492905600, - "a": 653, - "d": 347, - "c": 1 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 141, - "d": 41, - "c": 2 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1503187200, - "a": 4, - "d": 1, - "c": 1 - }, - { - "w": 1503792000, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 139, - "d": 42, - "c": 1 - }, - { - "w": 1505606400, - "a": 9, - "d": 3, - "c": 2 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 2, - "c": 1 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1510444800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1512259200, - "a": 12, - "d": 0, - "c": 1 - }, - { - "w": 1512864000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1513468800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1522540800, - "a": 25, - "d": 10, - "c": 1 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 6, - "d": 2, - "c": 1 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 7, - "d": 7, - "c": 2 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 12, - "d": 42, - "c": 1 - }, - { - "w": 1531612800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 51, - "d": 2, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 61, - "d": 72, - "c": 1 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 51, - "d": 4, - "c": 1 - }, - { - "w": 1549152000, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 5, - "d": 4, - "c": 2 - }, - { - "w": 1550966400, - "a": 7, - "d": 5, - "c": 1 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1553990400, - "a": 19, - "d": 26, - "c": 2 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "zanderso", - "id": 6343103, - "node_id": "MDQ6VXNlcjYzNDMxMDM=", - "avatar_url": "https://avatars0.githubusercontent.com/u/6343103?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/zanderso", - "html_url": "https://github.com/zanderso", - "followers_url": "https://api.github.com/users/zanderso/followers", - "following_url": "https://api.github.com/users/zanderso/following{/other_user}", - "gists_url": "https://api.github.com/users/zanderso/gists{/gist_id}", - "starred_url": "https://api.github.com/users/zanderso/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/zanderso/subscriptions", - "organizations_url": "https://api.github.com/users/zanderso/orgs", - "repos_url": "https://api.github.com/users/zanderso/repos", - "events_url": "https://api.github.com/users/zanderso/events{/privacy}", - "received_events_url": "https://api.github.com/users/zanderso/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 46, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 148, - "d": 33, - "c": 2 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 24, - "d": 4, - "c": 2 - }, - { - "w": 1528588800, - "a": 551, - "d": 27, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 53, - "d": 28, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 265, - "d": 110, - "c": 4 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 20, - "d": 6, - "c": 1 - }, - { - "w": 1537660800, - "a": 177, - "d": 75, - "c": 1 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 16, - "d": 32, - "c": 2 - }, - { - "w": 1539475200, - "a": 82, - "d": 61, - "c": 2 - }, - { - "w": 1540080000, - "a": 31, - "d": 12, - "c": 1 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 105, - "d": 65, - "c": 2 - }, - { - "w": 1541894400, - "a": 0, - "d": 1, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 83, - "d": 1, - "c": 1 - }, - { - "w": 1544918400, - "a": 914, - "d": 241, - "c": 12 - }, - { - "w": 1545523200, - "a": 19, - "d": 6, - "c": 1 - }, - { - "w": 1546128000, - "a": 15, - "d": 13, - "c": 2 - }, - { - "w": 1546732800, - "a": 36, - "d": 18, - "c": 4 - }, - { - "w": 1547337600, - "a": 30, - "d": 6, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 32, - "d": 13, - "c": 1 - }, - { - "w": 1549756800, - "a": 478, - "d": 478, - "c": 2 - }, - { - "w": 1550361600, - "a": 86, - "d": 74, - "c": 2 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "sbaranov", - "id": 1067150, - "node_id": "MDQ6VXNlcjEwNjcxNTA=", - "avatar_url": "https://avatars3.githubusercontent.com/u/1067150?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/sbaranov", - "html_url": "https://github.com/sbaranov", - "followers_url": "https://api.github.com/users/sbaranov/followers", - "following_url": "https://api.github.com/users/sbaranov/following{/other_user}", - "gists_url": "https://api.github.com/users/sbaranov/gists{/gist_id}", - "starred_url": "https://api.github.com/users/sbaranov/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/sbaranov/subscriptions", - "organizations_url": "https://api.github.com/users/sbaranov/orgs", - "repos_url": "https://api.github.com/users/sbaranov/repos", - "events_url": "https://api.github.com/users/sbaranov/events{/privacy}", - "received_events_url": "https://api.github.com/users/sbaranov/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 49, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 18, - "d": 1, - "c": 1 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 4, - "d": 2, - "c": 1 - }, - { - "w": 1494115200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 35, - "d": 36, - "c": 1 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 6, - "d": 1, - "c": 2 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 5, - "d": 2, - "c": 1 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 43, - "d": 16, - "c": 1 - }, - { - "w": 1515283200, - "a": 138, - "d": 138, - "c": 2 - }, - { - "w": 1515888000, - "a": 154, - "d": 53, - "c": 3 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 269, - "d": 37, - "c": 3 - }, - { - "w": 1517702400, - "a": 76, - "d": 20, - "c": 3 - }, - { - "w": 1518307200, - "a": 306, - "d": 87, - "c": 1 - }, - { - "w": 1518912000, - "a": 66, - "d": 17, - "c": 1 - }, - { - "w": 1519516800, - "a": 594, - "d": 144, - "c": 4 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 31, - "d": 25, - "c": 1 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 69, - "d": 4, - "c": 1 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1526774400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 19, - "d": 11, - "c": 2 - }, - { - "w": 1534636800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1535241600, - "a": 988, - "d": 988, - "c": 2 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 6, - "d": 25, - "c": 2 - }, - { - "w": 1539475200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 7, - "d": 7, - "c": 1 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 9, - "d": 1, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 13, - "d": 10, - "c": 2 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jcollins-g", - "id": 14116827, - "node_id": "MDQ6VXNlcjE0MTE2ODI3", - "avatar_url": "https://avatars3.githubusercontent.com/u/14116827?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jcollins-g", - "html_url": "https://github.com/jcollins-g", - "followers_url": "https://api.github.com/users/jcollins-g/followers", - "following_url": "https://api.github.com/users/jcollins-g/following{/other_user}", - "gists_url": "https://api.github.com/users/jcollins-g/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jcollins-g/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jcollins-g/subscriptions", - "organizations_url": "https://api.github.com/users/jcollins-g/orgs", - "repos_url": "https://api.github.com/users/jcollins-g/repos", - "events_url": "https://api.github.com/users/jcollins-g/events{/privacy}", - "received_events_url": "https://api.github.com/users/jcollins-g/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 50, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1468713600, - "a": 12, - "d": 6, - "c": 2 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 3, - "c": 1 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 27, - "c": 1 - }, - { - "w": 1477180800, - "a": 43, - "d": 34, - "c": 1 - }, - { - "w": 1477785600, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1479600000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 28, - "d": 28, - "c": 1 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 25, - "d": 15, - "c": 4 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 10, - "d": 2, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1500163200, - "a": 7, - "d": 7, - "c": 4 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 157, - "d": 155, - "c": 4 - }, - { - "w": 1507420800, - "a": 145, - "d": 4, - "c": 2 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 55, - "d": 44, - "c": 1 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1526774400, - "a": 11, - "d": 2, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 29, - "d": 4, - "c": 6 - }, - { - "w": 1532217600, - "a": 0, - "d": 9, - "c": 1 - }, - { - "w": 1532822400, - "a": 170, - "d": 5, - "c": 2 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 14, - "d": 6, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 17, - "d": 71, - "c": 1 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 9, - "d": 0, - "c": 1 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "rmacnak-google", - "id": 8495071, - "node_id": "MDQ6VXNlcjg0OTUwNzE=", - "avatar_url": "https://avatars3.githubusercontent.com/u/8495071?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/rmacnak-google", - "html_url": "https://github.com/rmacnak-google", - "followers_url": "https://api.github.com/users/rmacnak-google/followers", - "following_url": "https://api.github.com/users/rmacnak-google/following{/other_user}", - "gists_url": "https://api.github.com/users/rmacnak-google/gists{/gist_id}", - "starred_url": "https://api.github.com/users/rmacnak-google/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/rmacnak-google/subscriptions", - "organizations_url": "https://api.github.com/users/rmacnak-google/orgs", - "repos_url": "https://api.github.com/users/rmacnak-google/repos", - "events_url": "https://api.github.com/users/rmacnak-google/events{/privacy}", - "received_events_url": "https://api.github.com/users/rmacnak-google/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 52, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 19, - "d": 18, - "c": 1 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 95, - "d": 8, - "c": 1 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 67, - "d": 29, - "c": 1 - }, - { - "w": 1497744000, - "a": 532, - "d": 165, - "c": 4 - }, - { - "w": 1498348800, - "a": 1248, - "d": 80, - "c": 3 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 4609, - "d": 1490, - "c": 1 - }, - { - "w": 1501372800, - "a": 3972, - "d": 4016, - "c": 3 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 50, - "d": 49, - "c": 2 - }, - { - "w": 1503187200, - "a": 1005, - "d": 37, - "c": 2 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 1171, - "d": 794, - "c": 2 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 999, - "d": 43, - "c": 1 - }, - { - "w": 1512259200, - "a": 27, - "d": 63, - "c": 1 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 43, - "d": 4, - "c": 1 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 98, - "d": 1, - "c": 1 - }, - { - "w": 1518307200, - "a": 83, - "d": 14, - "c": 1 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 24, - "d": 6, - "c": 1 - }, - { - "w": 1520121600, - "a": 248, - "d": 41, - "c": 1 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 33, - "d": 1, - "c": 1 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 110, - "d": 118, - "c": 1 - }, - { - "w": 1523750400, - "a": 1868, - "d": 675, - "c": 3 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 56, - "d": 3, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1535846400, - "a": 2755, - "d": 85, - "c": 2 - }, - { - "w": 1536451200, - "a": 33, - "d": 61, - "c": 5 - }, - { - "w": 1537056000, - "a": 249, - "d": 11, - "c": 1 - }, - { - "w": 1537660800, - "a": 5, - "d": 5, - "c": 2 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 92, - "d": 36, - "c": 4 - }, - { - "w": 1540080000, - "a": 189, - "d": 54, - "c": 2 - }, - { - "w": 1540684800, - "a": 853, - "d": 15, - "c": 1 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 13, - "d": 2, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jacob314", - "id": 1226812, - "node_id": "MDQ6VXNlcjEyMjY4MTI=", - "avatar_url": "https://avatars1.githubusercontent.com/u/1226812?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jacob314", - "html_url": "https://github.com/jacob314", - "followers_url": "https://api.github.com/users/jacob314/followers", - "following_url": "https://api.github.com/users/jacob314/following{/other_user}", - "gists_url": "https://api.github.com/users/jacob314/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jacob314/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jacob314/subscriptions", - "organizations_url": "https://api.github.com/users/jacob314/orgs", - "repos_url": "https://api.github.com/users/jacob314/repos", - "events_url": "https://api.github.com/users/jacob314/events{/privacy}", - "received_events_url": "https://api.github.com/users/jacob314/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 52, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 104, - "d": 9, - "c": 3 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1517097600, - "a": 12, - "d": 8, - "c": 3 - }, - { - "w": 1517702400, - "a": 36, - "d": 140, - "c": 6 - }, - { - "w": 1518307200, - "a": 13, - "d": 41, - "c": 4 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1520121600, - "a": 6, - "d": 6, - "c": 1 - }, - { - "w": 1520726400, - "a": 17, - "d": 15, - "c": 4 - }, - { - "w": 1521331200, - "a": 5, - "d": 1, - "c": 1 - }, - { - "w": 1521936000, - "a": 8, - "d": 6, - "c": 1 - }, - { - "w": 1522540800, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1523145600, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1523750400, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 7, - "d": 2, - "c": 1 - }, - { - "w": 1533427200, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 6, - "d": 6, - "c": 4 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 19, - "d": 21, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 18, - "d": 2, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "a-siva", - "id": 8633293, - "node_id": "MDQ6VXNlcjg2MzMyOTM=", - "avatar_url": "https://avatars2.githubusercontent.com/u/8633293?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/a-siva", - "html_url": "https://github.com/a-siva", - "followers_url": "https://api.github.com/users/a-siva/followers", - "following_url": "https://api.github.com/users/a-siva/following{/other_user}", - "gists_url": "https://api.github.com/users/a-siva/gists{/gist_id}", - "starred_url": "https://api.github.com/users/a-siva/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/a-siva/subscriptions", - "organizations_url": "https://api.github.com/users/a-siva/orgs", - "repos_url": "https://api.github.com/users/a-siva/repos", - "events_url": "https://api.github.com/users/a-siva/events{/privacy}", - "received_events_url": "https://api.github.com/users/a-siva/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 56, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 7, - "d": 2, - "c": 2 - }, - { - "w": 1448150400, - "a": 2, - "d": 1, - "c": 2 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 4, - "d": 5, - "c": 1 - }, - { - "w": 1449964800, - "a": 145, - "d": 3, - "c": 3 - }, - { - "w": 1450569600, - "a": 5, - "d": 1, - "c": 2 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 5, - "d": 0, - "c": 1 - }, - { - "w": 1452384000, - "a": 25, - "d": 10, - "c": 3 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 8, - "d": 3, - "c": 3 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 22, - "d": 7, - "c": 2 - }, - { - "w": 1460246400, - "a": 5, - "d": 6, - "c": 2 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 24, - "d": 0, - "c": 1 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 16, - "d": 15, - "c": 2 - }, - { - "w": 1463270400, - "a": 76, - "d": 22, - "c": 2 - }, - { - "w": 1463875200, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 35, - "d": 2, - "c": 1 - }, - { - "w": 1468713600, - "a": 20, - "d": 2, - "c": 2 - }, - { - "w": 1469318400, - "a": 9, - "d": 1, - "c": 1 - }, - { - "w": 1469923200, - "a": 10, - "d": 19, - "c": 1 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 435, - "d": 440, - "c": 4 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1472947200, - "a": 18, - "d": 18, - "c": 1 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 10, - "d": 0, - "c": 3 - }, - { - "w": 1474761600, - "a": 0, - "d": 24, - "c": 1 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 11, - "d": 6, - "c": 1 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 13, - "d": 6, - "c": 1 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 20, - "d": 6, - "c": 2 - }, - { - "w": 1497744000, - "a": 15, - "d": 4, - "c": 2 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 45, - "d": 19, - "c": 1 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 4, - "d": 1, - "c": 1 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 21, - "d": 4, - "c": 1 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "sethladd", - "id": 5479, - "node_id": "MDQ6VXNlcjU0Nzk=", - "avatar_url": "https://avatars3.githubusercontent.com/u/5479?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/sethladd", - "html_url": "https://github.com/sethladd", - "followers_url": "https://api.github.com/users/sethladd/followers", - "following_url": "https://api.github.com/users/sethladd/following{/other_user}", - "gists_url": "https://api.github.com/users/sethladd/gists{/gist_id}", - "starred_url": "https://api.github.com/users/sethladd/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/sethladd/subscriptions", - "organizations_url": "https://api.github.com/users/sethladd/orgs", - "repos_url": "https://api.github.com/users/sethladd/repos", - "events_url": "https://api.github.com/users/sethladd/events{/privacy}", - "received_events_url": "https://api.github.com/users/sethladd/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 57, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 6, - "d": 0, - "c": 1 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 50, - "d": 0, - "c": 2 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 115, - "d": 100, - "c": 2 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 418, - "d": 169, - "c": 2 - }, - { - "w": 1487462400, - "a": 317, - "d": 68, - "c": 1 - }, - { - "w": 1488067200, - "a": 58, - "d": 42, - "c": 5 - }, - { - "w": 1488672000, - "a": 7, - "d": 7, - "c": 1 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1490486400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1491091200, - "a": 39, - "d": 72, - "c": 2 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 63, - "d": 25, - "c": 3 - }, - { - "w": 1492905600, - "a": 74, - "d": 1337, - "c": 5 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 41, - "d": 42, - "c": 5 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 138, - "d": 9, - "c": 4 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 2, - "d": 3, - "c": 1 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 5, - "d": 13, - "c": 2 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 27, - "d": 4, - "c": 1 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 4, - "d": 6, - "c": 2 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 5, - "d": 2, - "c": 1 - }, - { - "w": 1518912000, - "a": 6, - "d": 3, - "c": 2 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 9, - "d": 2, - "c": 1 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 25, - "d": 39, - "c": 1 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 6, - "d": 5, - "c": 1 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 12, - "d": 14, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 120, - "d": 1, - "c": 1 - } - ], - "author": { - "login": "mit-mit", - "id": 13644170, - "node_id": "MDQ6VXNlcjEzNjQ0MTcw", - "avatar_url": "https://avatars3.githubusercontent.com/u/13644170?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mit-mit", - "html_url": "https://github.com/mit-mit", - "followers_url": "https://api.github.com/users/mit-mit/followers", - "following_url": "https://api.github.com/users/mit-mit/following{/other_user}", - "gists_url": "https://api.github.com/users/mit-mit/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mit-mit/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mit-mit/subscriptions", - "organizations_url": "https://api.github.com/users/mit-mit/orgs", - "repos_url": "https://api.github.com/users/mit-mit/repos", - "events_url": "https://api.github.com/users/mit-mit/events{/privacy}", - "received_events_url": "https://api.github.com/users/mit-mit/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 57, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 23, - "d": 19, - "c": 1 - }, - { - "w": 1531612800, - "a": 53, - "d": 6, - "c": 1 - }, - { - "w": 1532217600, - "a": 274, - "d": 14, - "c": 1 - }, - { - "w": 1532822400, - "a": 178, - "d": 70, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 504, - "d": 0, - "c": 1 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 462, - "d": 23, - "c": 2 - }, - { - "w": 1536451200, - "a": 387, - "d": 21, - "c": 1 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 194, - "d": 13, - "c": 2 - }, - { - "w": 1538265600, - "a": 191, - "d": 44, - "c": 5 - }, - { - "w": 1538870400, - "a": 269, - "d": 13, - "c": 3 - }, - { - "w": 1539475200, - "a": 142, - "d": 9, - "c": 2 - }, - { - "w": 1540080000, - "a": 196, - "d": 0, - "c": 2 - }, - { - "w": 1540684800, - "a": 444, - "d": 13, - "c": 6 - }, - { - "w": 1541289600, - "a": 478, - "d": 110, - "c": 6 - }, - { - "w": 1541894400, - "a": 344, - "d": 23, - "c": 4 - }, - { - "w": 1542499200, - "a": 44, - "d": 1, - "c": 1 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 1226, - "d": 38, - "c": 3 - }, - { - "w": 1544918400, - "a": 1027, - "d": 2, - "c": 1 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 1800, - "d": 1034, - "c": 3 - }, - { - "w": 1547337600, - "a": 283, - "d": 97, - "c": 3 - }, - { - "w": 1547942400, - "a": 185, - "d": 107, - "c": 1 - }, - { - "w": 1548547200, - "a": 1029, - "d": 363, - "c": 2 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 209, - "d": 37, - "c": 2 - }, - { - "w": 1550361600, - "a": 412, - "d": 34, - "c": 2 - }, - { - "w": 1550966400, - "a": 532, - "d": 111, - "c": 1 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jslavitz", - "id": 7806031, - "node_id": "MDQ6VXNlcjc4MDYwMzE=", - "avatar_url": "https://avatars1.githubusercontent.com/u/7806031?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jslavitz", - "html_url": "https://github.com/jslavitz", - "followers_url": "https://api.github.com/users/jslavitz/followers", - "following_url": "https://api.github.com/users/jslavitz/following{/other_user}", - "gists_url": "https://api.github.com/users/jslavitz/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jslavitz/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jslavitz/subscriptions", - "organizations_url": "https://api.github.com/users/jslavitz/orgs", - "repos_url": "https://api.github.com/users/jslavitz/repos", - "events_url": "https://api.github.com/users/jslavitz/events{/privacy}", - "received_events_url": "https://api.github.com/users/jslavitz/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 61, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 33, - "d": 0, - "c": 1 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 83, - "d": 3, - "c": 1 - }, - { - "w": 1443916800, - "a": 301, - "d": 45, - "c": 2 - }, - { - "w": 1444521600, - "a": 625, - "d": 355, - "c": 6 - }, - { - "w": 1445126400, - "a": 1020, - "d": 310, - "c": 7 - }, - { - "w": 1445731200, - "a": 5121, - "d": 50, - "c": 4 - }, - { - "w": 1446336000, - "a": 150, - "d": 123, - "c": 3 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 46, - "d": 17, - "c": 7 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1449964800, - "a": 5, - "d": 5, - "c": 3 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 24, - "d": 23, - "c": 3 - }, - { - "w": 1453593600, - "a": 415, - "d": 72, - "c": 1 - }, - { - "w": 1454198400, - "a": 156, - "d": 85, - "c": 6 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 324, - "d": 16, - "c": 3 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 275, - "d": 169, - "c": 2 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 368, - "d": 162, - "c": 3 - }, - { - "w": 1459641600, - "a": 198, - "d": 15, - "c": 3 - }, - { - "w": 1460246400, - "a": 359, - "d": 0, - "c": 1 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 113, - "d": 61, - "c": 2 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 72, - "d": 3, - "c": 1 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "krisgiesing", - "id": 13855787, - "node_id": "MDQ6VXNlcjEzODU1Nzg3", - "avatar_url": "https://avatars2.githubusercontent.com/u/13855787?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/krisgiesing", - "html_url": "https://github.com/krisgiesing", - "followers_url": "https://api.github.com/users/krisgiesing/followers", - "following_url": "https://api.github.com/users/krisgiesing/following{/other_user}", - "gists_url": "https://api.github.com/users/krisgiesing/gists{/gist_id}", - "starred_url": "https://api.github.com/users/krisgiesing/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/krisgiesing/subscriptions", - "organizations_url": "https://api.github.com/users/krisgiesing/orgs", - "repos_url": "https://api.github.com/users/krisgiesing/repos", - "events_url": "https://api.github.com/users/krisgiesing/events{/privacy}", - "received_events_url": "https://api.github.com/users/krisgiesing/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 72, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 216, - "c": 1 - }, - { - "w": 1434844800, - "a": 54, - "d": 65534, - "c": 2 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 41220, - "d": 41202, - "c": 5 - }, - { - "w": 1439078400, - "a": 303, - "d": 231, - "c": 7 - }, - { - "w": 1439683200, - "a": 498, - "d": 39, - "c": 2 - }, - { - "w": 1440288000, - "a": 520, - "d": 332, - "c": 10 - }, - { - "w": 1440892800, - "a": 375, - "d": 141, - "c": 14 - }, - { - "w": 1441497600, - "a": 187, - "d": 23, - "c": 6 - }, - { - "w": 1442102400, - "a": 533, - "d": 71, - "c": 7 - }, - { - "w": 1442707200, - "a": 554, - "d": 367, - "c": 4 - }, - { - "w": 1443312000, - "a": 853, - "d": 128, - "c": 8 - }, - { - "w": 1443916800, - "a": 690, - "d": 95, - "c": 6 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "iansf", - "id": 12631059, - "node_id": "MDQ6VXNlcjEyNjMxMDU5", - "avatar_url": "https://avatars0.githubusercontent.com/u/12631059?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/iansf", - "html_url": "https://github.com/iansf", - "followers_url": "https://api.github.com/users/iansf/followers", - "following_url": "https://api.github.com/users/iansf/following{/other_user}", - "gists_url": "https://api.github.com/users/iansf/gists{/gist_id}", - "starred_url": "https://api.github.com/users/iansf/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/iansf/subscriptions", - "organizations_url": "https://api.github.com/users/iansf/orgs", - "repos_url": "https://api.github.com/users/iansf/repos", - "events_url": "https://api.github.com/users/iansf/events{/privacy}", - "received_events_url": "https://api.github.com/users/iansf/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 80, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 1158, - "d": 0, - "c": 1 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 2409, - "d": 192, - "c": 3 - }, - { - "w": 1489276800, - "a": 45, - "d": 28, - "c": 2 - }, - { - "w": 1489881600, - "a": 306, - "d": 1478, - "c": 9 - }, - { - "w": 1490486400, - "a": 2369, - "d": 1405, - "c": 6 - }, - { - "w": 1491091200, - "a": 157, - "d": 66, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 131, - "d": 41, - "c": 2 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 56, - "d": 56, - "c": 4 - }, - { - "w": 1494115200, - "a": 230, - "d": 236, - "c": 6 - }, - { - "w": 1494720000, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 1770, - "d": 0, - "c": 1 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 67, - "d": 45, - "c": 2 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 1366, - "d": 1, - "c": 1 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1504396800, - "a": 576, - "d": 38, - "c": 1 - }, - { - "w": 1505001600, - "a": 289, - "d": 89, - "c": 3 - }, - { - "w": 1505606400, - "a": 494, - "d": 31, - "c": 2 - }, - { - "w": 1506211200, - "a": 1048, - "d": 307, - "c": 4 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 51, - "d": 29, - "c": 3 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 8, - "d": 0, - "c": 1 - }, - { - "w": 1512259200, - "a": 55, - "d": 7, - "c": 5 - }, - { - "w": 1512864000, - "a": 179, - "d": 37, - "c": 5 - }, - { - "w": 1513468800, - "a": 76, - "d": 77, - "c": 4 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 5, - "d": 0, - "c": 1 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 9, - "d": 9, - "c": 1 - }, - { - "w": 1523145600, - "a": 354, - "d": 618, - "c": 1 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 59, - "d": 0, - "c": 1 - }, - { - "w": 1526774400, - "a": 15, - "d": 18, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 258, - "d": 52, - "c": 1 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 22, - "d": 16, - "c": 1 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 287, - "d": 30, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "szakarias", - "id": 3865266, - "node_id": "MDQ6VXNlcjM4NjUyNjY=", - "avatar_url": "https://avatars0.githubusercontent.com/u/3865266?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/szakarias", - "html_url": "https://github.com/szakarias", - "followers_url": "https://api.github.com/users/szakarias/followers", - "following_url": "https://api.github.com/users/szakarias/following{/other_user}", - "gists_url": "https://api.github.com/users/szakarias/gists{/gist_id}", - "starred_url": "https://api.github.com/users/szakarias/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/szakarias/subscriptions", - "organizations_url": "https://api.github.com/users/szakarias/orgs", - "repos_url": "https://api.github.com/users/szakarias/repos", - "events_url": "https://api.github.com/users/szakarias/events{/privacy}", - "received_events_url": "https://api.github.com/users/szakarias/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 84, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 7, - "d": 7, - "c": 1 - }, - { - "w": 1471737600, - "a": 372, - "d": 31, - "c": 6 - }, - { - "w": 1472342400, - "a": 260, - "d": 75, - "c": 5 - }, - { - "w": 1472947200, - "a": 243, - "d": 66, - "c": 6 - }, - { - "w": 1473552000, - "a": 489, - "d": 492, - "c": 6 - }, - { - "w": 1474156800, - "a": 683, - "d": 514, - "c": 8 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 1098, - "d": 1066, - "c": 9 - }, - { - "w": 1475971200, - "a": 157, - "d": 70, - "c": 2 - }, - { - "w": 1476576000, - "a": 17, - "d": 6, - "c": 1 - }, - { - "w": 1477180800, - "a": 128, - "d": 44, - "c": 8 - }, - { - "w": 1477785600, - "a": 221, - "d": 151, - "c": 5 - }, - { - "w": 1478390400, - "a": 211, - "d": 83, - "c": 6 - }, - { - "w": 1478995200, - "a": 481, - "d": 723, - "c": 3 - }, - { - "w": 1479600000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1480204800, - "a": 511, - "d": 412, - "c": 4 - }, - { - "w": 1480809600, - "a": 223, - "d": 163, - "c": 4 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 599, - "d": 387, - "c": 1 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 150, - "d": 88, - "c": 2 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 5, - "d": 3, - "c": 2 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 308, - "d": 39, - "c": 1 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 163, - "d": 164, - "c": 1 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 111, - "d": 62, - "c": 1 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 325, - "d": 325, - "c": 1 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "danrubel", - "id": 2891888, - "node_id": "MDQ6VXNlcjI4OTE4ODg=", - "avatar_url": "https://avatars0.githubusercontent.com/u/2891888?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/danrubel", - "html_url": "https://github.com/danrubel", - "followers_url": "https://api.github.com/users/danrubel/followers", - "following_url": "https://api.github.com/users/danrubel/following{/other_user}", - "gists_url": "https://api.github.com/users/danrubel/gists{/gist_id}", - "starred_url": "https://api.github.com/users/danrubel/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/danrubel/subscriptions", - "organizations_url": "https://api.github.com/users/danrubel/orgs", - "repos_url": "https://api.github.com/users/danrubel/repos", - "events_url": "https://api.github.com/users/danrubel/events{/privacy}", - "received_events_url": "https://api.github.com/users/danrubel/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 91, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 23, - "d": 0, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 76, - "d": 10, - "c": 1 - }, - { - "w": 1529193600, - "a": 52, - "d": 38, - "c": 3 - }, - { - "w": 1529798400, - "a": 150, - "d": 6, - "c": 5 - }, - { - "w": 1530403200, - "a": 31, - "d": 14, - "c": 2 - }, - { - "w": 1531008000, - "a": 9, - "d": 9, - "c": 1 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 25, - "d": 2, - "c": 3 - }, - { - "w": 1532822400, - "a": 259, - "d": 97, - "c": 2 - }, - { - "w": 1533427200, - "a": 349, - "d": 78, - "c": 6 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 192, - "d": 178, - "c": 5 - }, - { - "w": 1535241600, - "a": 157, - "d": 15, - "c": 3 - }, - { - "w": 1535846400, - "a": 4, - "d": 19, - "c": 1 - }, - { - "w": 1536451200, - "a": 26, - "d": 7, - "c": 3 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 77, - "d": 41, - "c": 7 - }, - { - "w": 1538265600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1538870400, - "a": 10, - "d": 11, - "c": 3 - }, - { - "w": 1539475200, - "a": 6, - "d": 8, - "c": 2 - }, - { - "w": 1540080000, - "a": 441, - "d": 74, - "c": 2 - }, - { - "w": 1540684800, - "a": 130, - "d": 0, - "c": 1 - }, - { - "w": 1541289600, - "a": 10, - "d": 2, - "c": 3 - }, - { - "w": 1541894400, - "a": 38, - "d": 1, - "c": 1 - }, - { - "w": 1542499200, - "a": 15, - "d": 3, - "c": 1 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1544918400, - "a": 1421, - "d": 121, - "c": 3 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 12, - "d": 1, - "c": 2 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 1, - "d": 2, - "c": 1 - }, - { - "w": 1549152000, - "a": 30, - "d": 0, - "c": 1 - }, - { - "w": 1549756800, - "a": 39, - "d": 39, - "c": 1 - }, - { - "w": 1550361600, - "a": 783, - "d": 783, - "c": 2 - }, - { - "w": 1550966400, - "a": 952, - "d": 87, - "c": 8 - }, - { - "w": 1551571200, - "a": 23, - "d": 54, - "c": 2 - }, - { - "w": 1552176000, - "a": 82, - "d": 31, - "c": 5 - }, - { - "w": 1552780800, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1553385600, - "a": 16, - "d": 12, - "c": 3 - }, - { - "w": 1553990400, - "a": 1, - "d": 14, - "c": 1 - }, - { - "w": 1554595200, - "a": 93, - "d": 2, - "c": 2 - } - ], - "author": { - "login": "liyuqian", - "id": 22987568, - "node_id": "MDQ6VXNlcjIyOTg3NTY4", - "avatar_url": "https://avatars2.githubusercontent.com/u/22987568?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/liyuqian", - "html_url": "https://github.com/liyuqian", - "followers_url": "https://api.github.com/users/liyuqian/followers", - "following_url": "https://api.github.com/users/liyuqian/following{/other_user}", - "gists_url": "https://api.github.com/users/liyuqian/gists{/gist_id}", - "starred_url": "https://api.github.com/users/liyuqian/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/liyuqian/subscriptions", - "organizations_url": "https://api.github.com/users/liyuqian/orgs", - "repos_url": "https://api.github.com/users/liyuqian/repos", - "events_url": "https://api.github.com/users/liyuqian/events{/privacy}", - "received_events_url": "https://api.github.com/users/liyuqian/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 107, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 7, - "d": 380, - "c": 4 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 56, - "d": 70, - "c": 14 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 13, - "d": 6, - "c": 2 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 142, - "d": 2, - "c": 2 - }, - { - "w": 1457222400, - "a": 704, - "d": 117, - "c": 3 - }, - { - "w": 1457827200, - "a": 37, - "d": 7, - "c": 1 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 1068, - "d": 671, - "c": 4 - }, - { - "w": 1469318400, - "a": 71, - "d": 10, - "c": 1 - }, - { - "w": 1469923200, - "a": 744, - "d": 358, - "c": 2 - }, - { - "w": 1470528000, - "a": 1046, - "d": 585, - "c": 14 - }, - { - "w": 1471132800, - "a": 851, - "d": 420, - "c": 3 - }, - { - "w": 1471737600, - "a": 39, - "d": 9, - "c": 2 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 129, - "d": 41, - "c": 3 - }, - { - "w": 1474156800, - "a": 28, - "d": 3, - "c": 1 - }, - { - "w": 1474761600, - "a": 115, - "d": 40, - "c": 2 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 4, - "d": 1, - "c": 2 - }, - { - "w": 1476576000, - "a": 36, - "d": 15, - "c": 5 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 134, - "d": 55, - "c": 3 - }, - { - "w": 1478390400, - "a": 192, - "d": 480, - "c": 8 - }, - { - "w": 1478995200, - "a": 105, - "d": 3, - "c": 2 - }, - { - "w": 1479600000, - "a": 121, - "d": 225, - "c": 7 - }, - { - "w": 1480204800, - "a": 211, - "d": 186, - "c": 3 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 355, - "d": 49, - "c": 2 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 118, - "d": 67, - "c": 1 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 30, - "d": 9, - "c": 1 - }, - { - "w": 1489276800, - "a": 187, - "d": 108, - "c": 5 - }, - { - "w": 1489881600, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1490486400, - "a": 24, - "d": 12, - "c": 2 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 174, - "d": 39, - "c": 7 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "johnmccutchan", - "id": 224266, - "node_id": "MDQ6VXNlcjIyNDI2Ng==", - "avatar_url": "https://avatars2.githubusercontent.com/u/224266?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/johnmccutchan", - "html_url": "https://github.com/johnmccutchan", - "followers_url": "https://api.github.com/users/johnmccutchan/followers", - "following_url": "https://api.github.com/users/johnmccutchan/following{/other_user}", - "gists_url": "https://api.github.com/users/johnmccutchan/gists{/gist_id}", - "starred_url": "https://api.github.com/users/johnmccutchan/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/johnmccutchan/subscriptions", - "organizations_url": "https://api.github.com/users/johnmccutchan/orgs", - "repos_url": "https://api.github.com/users/johnmccutchan/repos", - "events_url": "https://api.github.com/users/johnmccutchan/events{/privacy}", - "received_events_url": "https://api.github.com/users/johnmccutchan/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 129, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 136, - "d": 43, - "c": 5 - }, - { - "w": 1508025600, - "a": 132, - "d": 23, - "c": 4 - }, - { - "w": 1508630400, - "a": 234, - "d": 41, - "c": 3 - }, - { - "w": 1509235200, - "a": 2023, - "d": 2009, - "c": 2 - }, - { - "w": 1509840000, - "a": 525, - "d": 4, - "c": 4 - }, - { - "w": 1510444800, - "a": 181, - "d": 83, - "c": 6 - }, - { - "w": 1511049600, - "a": 319, - "d": 15, - "c": 2 - }, - { - "w": 1511654400, - "a": 119, - "d": 67, - "c": 4 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 234, - "d": 146, - "c": 4 - }, - { - "w": 1513468800, - "a": 4576, - "d": 3, - "c": 2 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 3083, - "d": 3083, - "c": 3 - }, - { - "w": 1515283200, - "a": 456, - "d": 87, - "c": 4 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 40, - "d": 7, - "c": 1 - }, - { - "w": 1517097600, - "a": 33442, - "d": 189, - "c": 10 - }, - { - "w": 1517702400, - "a": 322, - "d": 11, - "c": 4 - }, - { - "w": 1518307200, - "a": 460, - "d": 58, - "c": 2 - }, - { - "w": 1518912000, - "a": 940, - "d": 113, - "c": 5 - }, - { - "w": 1519516800, - "a": 117, - "d": 8, - "c": 2 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 2, - "d": 8, - "c": 1 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 408, - "d": 629, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1531612800, - "a": 802, - "d": 3, - "c": 3 - }, - { - "w": 1532217600, - "a": 2187, - "d": 45, - "c": 6 - }, - { - "w": 1532822400, - "a": 468, - "d": 172, - "c": 2 - }, - { - "w": 1533427200, - "a": 561, - "d": 406, - "c": 7 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 469, - "d": 65, - "c": 8 - }, - { - "w": 1535241600, - "a": 679, - "d": 46, - "c": 5 - }, - { - "w": 1535846400, - "a": 145, - "d": 1, - "c": 3 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 181, - "d": 64, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 3695, - "d": 2912, - "c": 4 - }, - { - "w": 1541289600, - "a": 655, - "d": 58, - "c": 5 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 4, - "d": 11, - "c": 2 - }, - { - "w": 1545523200, - "a": 45, - "d": 8, - "c": 4 - }, - { - "w": 1546128000, - "a": 12, - "d": 0, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 1, - "d": 11, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 62, - "d": 2, - "c": 1 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 22, - "d": 283, - "c": 3 - }, - { - "w": 1553385600, - "a": 9, - "d": 1, - "c": 1 - }, - { - "w": 1553990400, - "a": 119, - "d": 9, - "c": 1 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "amirh", - "id": 1024117, - "node_id": "MDQ6VXNlcjEwMjQxMTc=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1024117?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/amirh", - "html_url": "https://github.com/amirh", - "followers_url": "https://api.github.com/users/amirh/followers", - "following_url": "https://api.github.com/users/amirh/following{/other_user}", - "gists_url": "https://api.github.com/users/amirh/gists{/gist_id}", - "starred_url": "https://api.github.com/users/amirh/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/amirh/subscriptions", - "organizations_url": "https://api.github.com/users/amirh/orgs", - "repos_url": "https://api.github.com/users/amirh/repos", - "events_url": "https://api.github.com/users/amirh/events{/privacy}", - "received_events_url": "https://api.github.com/users/amirh/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 131, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 52, - "d": 40, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 117, - "d": 48, - "c": 1 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 6, - "d": 5, - "c": 2 - }, - { - "w": 1529193600, - "a": 194, - "d": 8, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 227, - "d": 19, - "c": 1 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 1484, - "d": 1576, - "c": 6 - }, - { - "w": 1538265600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 80, - "d": 21, - "c": 3 - }, - { - "w": 1540080000, - "a": 637, - "d": 636, - "c": 6 - }, - { - "w": 1540684800, - "a": 3931, - "d": 2082, - "c": 5 - }, - { - "w": 1541289600, - "a": 326, - "d": 84, - "c": 10 - }, - { - "w": 1541894400, - "a": 656, - "d": 144, - "c": 5 - }, - { - "w": 1542499200, - "a": 12, - "d": 3, - "c": 2 - }, - { - "w": 1543104000, - "a": 85, - "d": 15, - "c": 1 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 9, - "d": 2, - "c": 2 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 570, - "d": 558, - "c": 8 - }, - { - "w": 1547337600, - "a": 252, - "d": 259, - "c": 11 - }, - { - "w": 1547942400, - "a": 707, - "d": 399, - "c": 10 - }, - { - "w": 1548547200, - "a": 36, - "d": 255, - "c": 2 - }, - { - "w": 1549152000, - "a": 62, - "d": 3, - "c": 1 - }, - { - "w": 1549756800, - "a": 417, - "d": 130, - "c": 5 - }, - { - "w": 1550361600, - "a": 19575, - "d": 408, - "c": 11 - }, - { - "w": 1550966400, - "a": 14, - "d": 5, - "c": 3 - }, - { - "w": 1551571200, - "a": 724, - "d": 169, - "c": 9 - }, - { - "w": 1552176000, - "a": 636, - "d": 388, - "c": 11 - }, - { - "w": 1552780800, - "a": 1269, - "d": 414, - "c": 7 - }, - { - "w": 1553385600, - "a": 7, - "d": 9, - "c": 2 - }, - { - "w": 1553990400, - "a": 640, - "d": 0, - "c": 2 - }, - { - "w": 1554595200, - "a": 903, - "d": 25, - "c": 1 - } - ], - "author": { - "login": "dnfield", - "id": 8620741, - "node_id": "MDQ6VXNlcjg2MjA3NDE=", - "avatar_url": "https://avatars3.githubusercontent.com/u/8620741?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/dnfield", - "html_url": "https://github.com/dnfield", - "followers_url": "https://api.github.com/users/dnfield/followers", - "following_url": "https://api.github.com/users/dnfield/following{/other_user}", - "gists_url": "https://api.github.com/users/dnfield/gists{/gist_id}", - "starred_url": "https://api.github.com/users/dnfield/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/dnfield/subscriptions", - "organizations_url": "https://api.github.com/users/dnfield/orgs", - "repos_url": "https://api.github.com/users/dnfield/repos", - "events_url": "https://api.github.com/users/dnfield/events{/privacy}", - "received_events_url": "https://api.github.com/users/dnfield/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 139, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 63, - "d": 17, - "c": 4 - }, - { - "w": 1456617600, - "a": 14, - "d": 0, - "c": 1 - }, - { - "w": 1457222400, - "a": 10, - "d": 19, - "c": 3 - }, - { - "w": 1457827200, - "a": 0, - "d": 2, - "c": 1 - }, - { - "w": 1458432000, - "a": 0, - "d": 3, - "c": 1 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1460246400, - "a": 11, - "d": 13, - "c": 4 - }, - { - "w": 1460851200, - "a": 8, - "d": 5, - "c": 2 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 676, - "d": 596, - "c": 12 - }, - { - "w": 1462665600, - "a": 243, - "d": 276, - "c": 10 - }, - { - "w": 1463270400, - "a": 38, - "d": 36, - "c": 9 - }, - { - "w": 1463875200, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1464480000, - "a": 13, - "d": 9, - "c": 5 - }, - { - "w": 1465084800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1465689600, - "a": 143, - "d": 31, - "c": 6 - }, - { - "w": 1466294400, - "a": 59, - "d": 44, - "c": 5 - }, - { - "w": 1466899200, - "a": 25, - "d": 27, - "c": 4 - }, - { - "w": 1467504000, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1469318400, - "a": 21, - "d": 21, - "c": 3 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 19, - "d": 6, - "c": 2 - }, - { - "w": 1471132800, - "a": 7, - "d": 1, - "c": 1 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 47, - "d": 47, - "c": 1 - }, - { - "w": 1473552000, - "a": 46, - "d": 19, - "c": 2 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 8, - "d": 9, - "c": 2 - }, - { - "w": 1475971200, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1476576000, - "a": 2, - "d": 3, - "c": 2 - }, - { - "w": 1477180800, - "a": 5, - "d": 3, - "c": 1 - }, - { - "w": 1477785600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1478390400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1478995200, - "a": 4, - "d": 9, - "c": 2 - }, - { - "w": 1479600000, - "a": 4, - "d": 1, - "c": 1 - }, - { - "w": 1480204800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1480809600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 91, - "d": 29, - "c": 2 - }, - { - "w": 1484438400, - "a": 37, - "d": 94, - "c": 2 - }, - { - "w": 1485043200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1486857600, - "a": 11, - "d": 5, - "c": 2 - }, - { - "w": 1487462400, - "a": 16, - "d": 15, - "c": 1 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 10, - "d": 7, - "c": 4 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 6, - "d": 6, - "c": 1 - }, - { - "w": 1491091200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1491696000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1492300800, - "a": 7, - "d": 16, - "c": 3 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 12, - "d": 9, - "c": 1 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 9, - "d": 4, - "c": 1 - }, - { - "w": 1500163200, - "a": 81, - "d": 10, - "c": 2 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 10, - "d": 9, - "c": 2 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 56, - "d": 19, - "c": 2 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 133, - "d": 138, - "c": 1 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "pq", - "id": 67586, - "node_id": "MDQ6VXNlcjY3NTg2", - "avatar_url": "https://avatars3.githubusercontent.com/u/67586?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/pq", - "html_url": "https://github.com/pq", - "followers_url": "https://api.github.com/users/pq/followers", - "following_url": "https://api.github.com/users/pq/following{/other_user}", - "gists_url": "https://api.github.com/users/pq/gists{/gist_id}", - "starred_url": "https://api.github.com/users/pq/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/pq/subscriptions", - "organizations_url": "https://api.github.com/users/pq/orgs", - "repos_url": "https://api.github.com/users/pq/repos", - "events_url": "https://api.github.com/users/pq/events{/privacy}", - "received_events_url": "https://api.github.com/users/pq/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 144, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 46, - "d": 0, - "c": 1 - }, - { - "w": 1431820800, - "a": 4, - "d": 2, - "c": 1 - }, - { - "w": 1432425600, - "a": 65, - "d": 9, - "c": 3 - }, - { - "w": 1433030400, - "a": 65, - "d": 50, - "c": 7 - }, - { - "w": 1433635200, - "a": 55, - "d": 41, - "c": 10 - }, - { - "w": 1434240000, - "a": 93, - "d": 2, - "c": 2 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 76, - "d": 59, - "c": 3 - }, - { - "w": 1437264000, - "a": 450, - "d": 416, - "c": 4 - }, - { - "w": 1437868800, - "a": 556, - "d": 375, - "c": 4 - }, - { - "w": 1438473600, - "a": 433, - "d": 448, - "c": 7 - }, - { - "w": 1439078400, - "a": 211, - "d": 105, - "c": 5 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 5, - "d": 1, - "c": 1 - }, - { - "w": 1441497600, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 53, - "d": 0, - "c": 1 - }, - { - "w": 1443312000, - "a": 213, - "d": 7, - "c": 1 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 529, - "d": 50, - "c": 5 - }, - { - "w": 1445731200, - "a": 343, - "d": 324, - "c": 6 - }, - { - "w": 1446336000, - "a": 217, - "d": 112, - "c": 10 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 188, - "d": 4, - "c": 1 - }, - { - "w": 1452988800, - "a": 160, - "d": 62, - "c": 1 - }, - { - "w": 1453593600, - "a": 8, - "d": 6, - "c": 1 - }, - { - "w": 1454198400, - "a": 343, - "d": 188, - "c": 1 - }, - { - "w": 1454803200, - "a": 235, - "d": 231, - "c": 3 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 6, - "d": 8, - "c": 1 - }, - { - "w": 1456617600, - "a": 0, - "d": 245, - "c": 1 - }, - { - "w": 1457222400, - "a": 189, - "d": 23, - "c": 2 - }, - { - "w": 1457827200, - "a": 32, - "d": 10, - "c": 2 - }, - { - "w": 1458432000, - "a": 393, - "d": 76, - "c": 1 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 600, - "d": 54, - "c": 3 - }, - { - "w": 1461456000, - "a": 13, - "d": 8, - "c": 1 - }, - { - "w": 1462060800, - "a": 374, - "d": 102, - "c": 1 - }, - { - "w": 1462665600, - "a": 146, - "d": 67, - "c": 3 - }, - { - "w": 1463270400, - "a": 1, - "d": 4, - "c": 2 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 781, - "d": 4, - "c": 1 - }, - { - "w": 1465084800, - "a": 155, - "d": 111, - "c": 6 - }, - { - "w": 1465689600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 13, - "d": 9, - "c": 1 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 32, - "d": 38, - "c": 1 - }, - { - "w": 1469318400, - "a": 7, - "d": 4, - "c": 2 - }, - { - "w": 1469923200, - "a": 130, - "d": 37, - "c": 3 - }, - { - "w": 1470528000, - "a": 18, - "d": 5, - "c": 1 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 354, - "d": 13, - "c": 1 - }, - { - "w": 1472342400, - "a": 101, - "d": 18, - "c": 3 - }, - { - "w": 1472947200, - "a": 162, - "d": 42, - "c": 2 - }, - { - "w": 1473552000, - "a": 99, - "d": 10, - "c": 2 - }, - { - "w": 1474156800, - "a": 153, - "d": 6, - "c": 4 - }, - { - "w": 1474761600, - "a": 29, - "d": 16, - "c": 2 - }, - { - "w": 1475366400, - "a": 256, - "d": 96, - "c": 1 - }, - { - "w": 1475971200, - "a": 298, - "d": 101, - "c": 1 - }, - { - "w": 1476576000, - "a": 85, - "d": 80, - "c": 3 - }, - { - "w": 1477180800, - "a": 91, - "d": 7, - "c": 2 - }, - { - "w": 1477785600, - "a": 456, - "d": 335, - "c": 2 - }, - { - "w": 1478390400, - "a": 43, - "d": 8, - "c": 1 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 18, - "d": 2, - "c": 1 - }, - { - "w": 1481414400, - "a": 316, - "d": 48, - "c": 4 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 37, - "d": 1, - "c": 1 - }, - { - "w": 1484438400, - "a": 181, - "d": 43, - "c": 1 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mpcomplete", - "id": 1071986, - "node_id": "MDQ6VXNlcjEwNzE5ODY=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1071986?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mpcomplete", - "html_url": "https://github.com/mpcomplete", - "followers_url": "https://api.github.com/users/mpcomplete/followers", - "following_url": "https://api.github.com/users/mpcomplete/following{/other_user}", - "gists_url": "https://api.github.com/users/mpcomplete/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mpcomplete/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mpcomplete/subscriptions", - "organizations_url": "https://api.github.com/users/mpcomplete/orgs", - "repos_url": "https://api.github.com/users/mpcomplete/repos", - "events_url": "https://api.github.com/users/mpcomplete/events{/privacy}", - "received_events_url": "https://api.github.com/users/mpcomplete/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 146, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 37, - "d": 37, - "c": 1 - }, - { - "w": 1480809600, - "a": 815, - "d": 814, - "c": 5 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 387, - "d": 387, - "c": 6 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 360, - "d": 376, - "c": 4 - }, - { - "w": 1488067200, - "a": 52, - "d": 44, - "c": 2 - }, - { - "w": 1488672000, - "a": 321, - "d": 324, - "c": 5 - }, - { - "w": 1489276800, - "a": 190, - "d": 296, - "c": 4 - }, - { - "w": 1489881600, - "a": 84, - "d": 84, - "c": 3 - }, - { - "w": 1490486400, - "a": 291, - "d": 208, - "c": 2 - }, - { - "w": 1491091200, - "a": 128, - "d": 143, - "c": 3 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 539, - "d": 531, - "c": 7 - }, - { - "w": 1492905600, - "a": 593, - "d": 671, - "c": 2 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 147, - "d": 67, - "c": 6 - }, - { - "w": 1494720000, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 372, - "d": 432, - "c": 2 - }, - { - "w": 1496534400, - "a": 499, - "d": 557, - "c": 6 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 66, - "d": 40, - "c": 1 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 20, - "d": 19, - "c": 1 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 184, - "d": 170, - "c": 2 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 320, - "d": 314, - "c": 2 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 58, - "d": 57, - "c": 2 - }, - { - "w": 1508630400, - "a": 776, - "d": 792, - "c": 4 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 92, - "d": 96, - "c": 3 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 69, - "d": 79, - "c": 2 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 436, - "d": 432, - "c": 1 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 137, - "d": 137, - "c": 1 - }, - { - "w": 1517097600, - "a": 1195, - "d": 1186, - "c": 3 - }, - { - "w": 1517702400, - "a": 78, - "d": 79, - "c": 2 - }, - { - "w": 1518307200, - "a": 46, - "d": 42, - "c": 4 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 35, - "d": 35, - "c": 1 - }, - { - "w": 1520726400, - "a": 84, - "d": 84, - "c": 1 - }, - { - "w": 1521331200, - "a": 1115, - "d": 1122, - "c": 3 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 12, - "d": 0, - "c": 1 - }, - { - "w": 1523145600, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1523750400, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 16, - "d": 6, - "c": 2 - }, - { - "w": 1527984000, - "a": 1920, - "d": 1920, - "c": 1 - }, - { - "w": 1528588800, - "a": 5, - "d": 5, - "c": 1 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 41074, - "d": 41073, - "c": 1 - }, - { - "w": 1532217600, - "a": 41599, - "d": 41598, - "c": 1 - }, - { - "w": 1532822400, - "a": 41653, - "d": 41652, - "c": 1 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 777, - "d": 766, - "c": 2 - }, - { - "w": 1536451200, - "a": 26763, - "d": 26755, - "c": 5 - }, - { - "w": 1537056000, - "a": 8, - "d": 11, - "c": 1 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 1650, - "d": 1573, - "c": 7 - }, - { - "w": 1538870400, - "a": 120, - "d": 131, - "c": 2 - }, - { - "w": 1539475200, - "a": 406, - "d": 422, - "c": 4 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 147, - "d": 150, - "c": 1 - }, - { - "w": 1541289600, - "a": 16, - "d": 16, - "c": 1 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 22, - "d": 14, - "c": 1 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 360, - "d": 340, - "c": 4 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 111, - "d": 98, - "c": 2 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 50, - "d": 49, - "c": 1 - }, - { - "w": 1548547200, - "a": 675, - "d": 549, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 931, - "d": 717, - "c": 1 - }, - { - "w": 1550966400, - "a": 5183, - "d": 5183, - "c": 1 - }, - { - "w": 1551571200, - "a": 1700, - "d": 1837, - "c": 3 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 594, - "d": 491, - "c": 2 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 7, - "d": 7, - "c": 2 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "a14n", - "id": 1206632, - "node_id": "MDQ6VXNlcjEyMDY2MzI=", - "avatar_url": "https://avatars1.githubusercontent.com/u/1206632?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/a14n", - "html_url": "https://github.com/a14n", - "followers_url": "https://api.github.com/users/a14n/followers", - "following_url": "https://api.github.com/users/a14n/following{/other_user}", - "gists_url": "https://api.github.com/users/a14n/gists{/gist_id}", - "starred_url": "https://api.github.com/users/a14n/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/a14n/subscriptions", - "organizations_url": "https://api.github.com/users/a14n/orgs", - "repos_url": "https://api.github.com/users/a14n/repos", - "events_url": "https://api.github.com/users/a14n/events{/privacy}", - "received_events_url": "https://api.github.com/users/a14n/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 159, - "weeks": [ - { - "w": 1413676800, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 56, - "d": 0, - "c": 1 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 7, - "d": 1, - "c": 1 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1424563200, - "a": 3186, - "d": 65, - "c": 6 - }, - { - "w": 1425168000, - "a": 17, - "d": 14, - "c": 3 - }, - { - "w": 1425772800, - "a": 32, - "d": 27, - "c": 3 - }, - { - "w": 1426377600, - "a": 468, - "d": 5717, - "c": 6 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 37, - "d": 20, - "c": 4 - }, - { - "w": 1428796800, - "a": 13, - "d": 64, - "c": 4 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 113, - "d": 5, - "c": 6 - }, - { - "w": 1430611200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1431216000, - "a": 18, - "d": 0, - "c": 1 - }, - { - "w": 1431820800, - "a": 52, - "d": 0, - "c": 2 - }, - { - "w": 1432425600, - "a": 153, - "d": 30, - "c": 4 - }, - { - "w": 1433030400, - "a": 67, - "d": 44, - "c": 6 - }, - { - "w": 1433635200, - "a": 39, - "d": 22, - "c": 3 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 26, - "d": 30, - "c": 3 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 14, - "d": 3, - "c": 1 - }, - { - "w": 1437264000, - "a": 250, - "d": 128, - "c": 4 - }, - { - "w": 1437868800, - "a": 6, - "d": 2, - "c": 2 - }, - { - "w": 1438473600, - "a": 67, - "d": 17, - "c": 5 - }, - { - "w": 1439078400, - "a": 290, - "d": 87, - "c": 10 - }, - { - "w": 1439683200, - "a": 97, - "d": 78, - "c": 8 - }, - { - "w": 1440288000, - "a": 394, - "d": 59, - "c": 8 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 16, - "d": 29696, - "c": 1 - }, - { - "w": 1447545600, - "a": 2, - "d": 1, - "c": 2 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 144, - "d": 8, - "c": 6 - }, - { - "w": 1449360000, - "a": 63, - "d": 26, - "c": 5 - }, - { - "w": 1449964800, - "a": 351, - "d": 216, - "c": 10 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 23, - "d": 9, - "c": 3 - }, - { - "w": 1452384000, - "a": 382, - "d": 5, - "c": 4 - }, - { - "w": 1452988800, - "a": 29, - "d": 28, - "c": 2 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 101, - "d": 1, - "c": 2 - }, - { - "w": 1454803200, - "a": 214, - "d": 371, - "c": 5 - }, - { - "w": 1455408000, - "a": 8, - "d": 6, - "c": 1 - }, - { - "w": 1456012800, - "a": 64, - "d": 1379, - "c": 2 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 18, - "d": 178, - "c": 2 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 117, - "d": 20, - "c": 5 - }, - { - "w": 1460851200, - "a": 22, - "d": 3, - "c": 1 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1462665600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1463270400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 74, - "c": 2 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "eseidelGoogle", - "id": 11857803, - "node_id": "MDQ6VXNlcjExODU3ODAz", - "avatar_url": "https://avatars2.githubusercontent.com/u/11857803?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/eseidelGoogle", - "html_url": "https://github.com/eseidelGoogle", - "followers_url": "https://api.github.com/users/eseidelGoogle/followers", - "following_url": "https://api.github.com/users/eseidelGoogle/following{/other_user}", - "gists_url": "https://api.github.com/users/eseidelGoogle/gists{/gist_id}", - "starred_url": "https://api.github.com/users/eseidelGoogle/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/eseidelGoogle/subscriptions", - "organizations_url": "https://api.github.com/users/eseidelGoogle/orgs", - "repos_url": "https://api.github.com/users/eseidelGoogle/repos", - "events_url": "https://api.github.com/users/eseidelGoogle/events{/privacy}", - "received_events_url": "https://api.github.com/users/eseidelGoogle/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 172, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 47, - "d": 10, - "c": 1 - }, - { - "w": 1432425600, - "a": 32, - "d": 5, - "c": 2 - }, - { - "w": 1433030400, - "a": 258, - "d": 102, - "c": 7 - }, - { - "w": 1433635200, - "a": 60, - "d": 6, - "c": 2 - }, - { - "w": 1434240000, - "a": 458, - "d": 257, - "c": 10 - }, - { - "w": 1434844800, - "a": 134, - "d": 83, - "c": 3 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 52397, - "d": 129, - "c": 18 - }, - { - "w": 1437264000, - "a": 897, - "d": 469, - "c": 7 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 30, - "d": 4, - "c": 3 - }, - { - "w": 1439078400, - "a": 417, - "d": 164, - "c": 7 - }, - { - "w": 1439683200, - "a": 572, - "d": 222, - "c": 14 - }, - { - "w": 1440288000, - "a": 631, - "d": 43, - "c": 7 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 14, - "d": 14, - "c": 1 - }, - { - "w": 1442102400, - "a": 1040, - "d": 357, - "c": 7 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 10, - "d": 7, - "c": 4 - }, - { - "w": 1443916800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1444521600, - "a": 70, - "d": 2, - "c": 2 - }, - { - "w": 1445126400, - "a": 181, - "d": 12, - "c": 1 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 249, - "d": 0, - "c": 1 - }, - { - "w": 1446940800, - "a": 152, - "d": 4, - "c": 3 - }, - { - "w": 1447545600, - "a": 111, - "d": 78, - "c": 6 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 288, - "d": 151, - "c": 2 - }, - { - "w": 1449360000, - "a": 84, - "d": 24, - "c": 1 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 53, - "c": 1 - }, - { - "w": 1452988800, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1453593600, - "a": 57, - "d": 29, - "c": 4 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 13, - "d": 13, - "c": 3 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 4, - "d": 6, - "c": 1 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1457827200, - "a": 51, - "d": 3, - "c": 2 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 6, - "d": 2, - "c": 3 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1462665600, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1463270400, - "a": 30, - "d": 56, - "c": 2 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 72, - "d": 18, - "c": 4 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 646, - "d": 11, - "c": 1 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 174, - "d": 0, - "c": 2 - }, - { - "w": 1471737600, - "a": 159, - "d": 15, - "c": 2 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 27, - "d": 6, - "c": 2 - }, - { - "w": 1480809600, - "a": 26, - "d": 21, - "c": 1 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 129, - "d": 42, - "c": 2 - }, - { - "w": 1490486400, - "a": 18, - "d": 18, - "c": 6 - }, - { - "w": 1491091200, - "a": 4, - "d": 8, - "c": 2 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 27, - "d": 6, - "c": 3 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 3, - "d": 2, - "c": 1 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 42, - "d": 2, - "c": 1 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 4, - "d": 10, - "c": 2 - }, - { - "w": 1504396800, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1505001600, - "a": 47, - "d": 12, - "c": 3 - }, - { - "w": 1505606400, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "collinjackson", - "id": 394889, - "node_id": "MDQ6VXNlcjM5NDg4OQ==", - "avatar_url": "https://avatars2.githubusercontent.com/u/394889?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/collinjackson", - "html_url": "https://github.com/collinjackson", - "followers_url": "https://api.github.com/users/collinjackson/followers", - "following_url": "https://api.github.com/users/collinjackson/following{/other_user}", - "gists_url": "https://api.github.com/users/collinjackson/gists{/gist_id}", - "starred_url": "https://api.github.com/users/collinjackson/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/collinjackson/subscriptions", - "organizations_url": "https://api.github.com/users/collinjackson/orgs", - "repos_url": "https://api.github.com/users/collinjackson/repos", - "events_url": "https://api.github.com/users/collinjackson/events{/privacy}", - "received_events_url": "https://api.github.com/users/collinjackson/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 175, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 451, - "d": 2, - "c": 3 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 5, - "d": 5, - "c": 1 - }, - { - "w": 1519516800, - "a": 90, - "d": 48, - "c": 2 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 6, - "c": 1 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 781, - "d": 180, - "c": 28 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 86, - "d": 34, - "c": 8 - }, - { - "w": 1525564800, - "a": 50, - "d": 31, - "c": 9 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 115, - "d": 12, - "c": 2 - }, - { - "w": 1527379200, - "a": 241, - "d": 32, - "c": 6 - }, - { - "w": 1527984000, - "a": 69, - "d": 19, - "c": 4 - }, - { - "w": 1528588800, - "a": 931, - "d": 929, - "c": 5 - }, - { - "w": 1529193600, - "a": 3, - "d": 2, - "c": 1 - }, - { - "w": 1529798400, - "a": 1080, - "d": 340, - "c": 15 - }, - { - "w": 1530403200, - "a": 28, - "d": 20, - "c": 6 - }, - { - "w": 1531008000, - "a": 785, - "d": 597, - "c": 6 - }, - { - "w": 1531612800, - "a": 297, - "d": 95, - "c": 5 - }, - { - "w": 1532217600, - "a": 367, - "d": 299, - "c": 7 - }, - { - "w": 1532822400, - "a": 57, - "d": 74, - "c": 6 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 59, - "d": 17, - "c": 4 - }, - { - "w": 1535241600, - "a": 34, - "d": 15, - "c": 4 - }, - { - "w": 1535846400, - "a": 509, - "d": 361, - "c": 12 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 7, - "d": 13, - "c": 3 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 19, - "d": 14, - "c": 6 - }, - { - "w": 1538870400, - "a": 23, - "d": 11, - "c": 1 - }, - { - "w": 1539475200, - "a": 34, - "d": 24, - "c": 2 - }, - { - "w": 1540080000, - "a": 71, - "d": 27, - "c": 3 - }, - { - "w": 1540684800, - "a": 72, - "d": 2, - "c": 1 - }, - { - "w": 1541289600, - "a": 165, - "d": 95, - "c": 2 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 268, - "d": 250, - "c": 3 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 160, - "d": 26, - "c": 3 - }, - { - "w": 1544918400, - "a": 24, - "d": 11, - "c": 2 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 448, - "d": 33, - "c": 4 - }, - { - "w": 1547337600, - "a": 18, - "d": 14, - "c": 3 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 4, - "d": 2, - "c": 2 - }, - { - "w": 1549152000, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1549756800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 76, - "d": 4, - "c": 1 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "DanTup", - "id": 1078012, - "node_id": "MDQ6VXNlcjEwNzgwMTI=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1078012?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/DanTup", - "html_url": "https://github.com/DanTup", - "followers_url": "https://api.github.com/users/DanTup/followers", - "following_url": "https://api.github.com/users/DanTup/following{/other_user}", - "gists_url": "https://api.github.com/users/DanTup/gists{/gist_id}", - "starred_url": "https://api.github.com/users/DanTup/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/DanTup/subscriptions", - "organizations_url": "https://api.github.com/users/DanTup/orgs", - "repos_url": "https://api.github.com/users/DanTup/repos", - "events_url": "https://api.github.com/users/DanTup/events{/privacy}", - "received_events_url": "https://api.github.com/users/DanTup/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 188, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 2268, - "d": 563, - "c": 30 - }, - { - "w": 1435449600, - "a": 390, - "d": 34, - "c": 6 - }, - { - "w": 1436054400, - "a": 782, - "d": 402, - "c": 16 - }, - { - "w": 1436659200, - "a": 56, - "d": 17, - "c": 1 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 109638, - "d": 108841, - "c": 5 - }, - { - "w": 1438473600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1439078400, - "a": 63, - "d": 0, - "c": 1 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 732, - "d": 0, - "c": 1 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 13, - "d": 12, - "c": 1 - }, - { - "w": 1443312000, - "a": 140, - "d": 0, - "c": 1 - }, - { - "w": 1443916800, - "a": 91, - "d": 30, - "c": 9 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 14, - "d": 13, - "c": 3 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 162, - "d": 5, - "c": 2 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 6, - "d": 5, - "c": 1 - }, - { - "w": 1452384000, - "a": 176, - "d": 82, - "c": 8 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 9, - "d": 6, - "c": 4 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 324, - "d": 99, - "c": 9 - }, - { - "w": 1455408000, - "a": 1509, - "d": 1555, - "c": 16 - }, - { - "w": 1456012800, - "a": 867, - "d": 506, - "c": 8 - }, - { - "w": 1456617600, - "a": 61, - "d": 21, - "c": 1 - }, - { - "w": 1457222400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 133, - "d": 75, - "c": 6 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 27, - "d": 22, - "c": 3 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1462665600, - "a": 49, - "d": 23, - "c": 6 - }, - { - "w": 1463270400, - "a": 19, - "d": 3, - "c": 4 - }, - { - "w": 1463875200, - "a": 37, - "d": 24, - "c": 2 - }, - { - "w": 1464480000, - "a": 16, - "d": 7, - "c": 1 - }, - { - "w": 1465084800, - "a": 9, - "d": 3, - "c": 1 - }, - { - "w": 1465689600, - "a": 165, - "d": 16, - "c": 1 - }, - { - "w": 1466294400, - "a": 392, - "d": 8, - "c": 3 - }, - { - "w": 1466899200, - "a": 22, - "d": 55, - "c": 2 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 19, - "d": 19, - "c": 2 - }, - { - "w": 1470528000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1471132800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1471737600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 4, - "d": 3, - "c": 2 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 1695, - "d": 477, - "c": 1 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1478390400, - "a": 127, - "d": 14, - "c": 1 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 3, - "d": 2, - "c": 2 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 5, - "d": 3, - "c": 2 - }, - { - "w": 1481414400, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 17, - "d": 0, - "c": 1 - }, - { - "w": 1485648000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 4, - "d": 18, - "c": 1 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 19, - "d": 27, - "c": 5 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 1, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "chinmaygarde", - "id": 44085, - "node_id": "MDQ6VXNlcjQ0MDg1", - "avatar_url": "https://avatars1.githubusercontent.com/u/44085?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/chinmaygarde", - "html_url": "https://github.com/chinmaygarde", - "followers_url": "https://api.github.com/users/chinmaygarde/followers", - "following_url": "https://api.github.com/users/chinmaygarde/following{/other_user}", - "gists_url": "https://api.github.com/users/chinmaygarde/gists{/gist_id}", - "starred_url": "https://api.github.com/users/chinmaygarde/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/chinmaygarde/subscriptions", - "organizations_url": "https://api.github.com/users/chinmaygarde/orgs", - "repos_url": "https://api.github.com/users/chinmaygarde/repos", - "events_url": "https://api.github.com/users/chinmaygarde/events{/privacy}", - "received_events_url": "https://api.github.com/users/chinmaygarde/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 189, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 712, - "d": 0, - "c": 1 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 1492, - "d": 111, - "c": 2 - }, - { - "w": 1488672000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1489276800, - "a": 693, - "d": 686, - "c": 3 - }, - { - "w": 1489881600, - "a": 83, - "d": 11, - "c": 3 - }, - { - "w": 1490486400, - "a": 131, - "d": 55, - "c": 1 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 196, - "d": 171, - "c": 4 - }, - { - "w": 1492905600, - "a": 2526, - "d": 259, - "c": 5 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 142, - "d": 111, - "c": 5 - }, - { - "w": 1494720000, - "a": 45, - "d": 83, - "c": 2 - }, - { - "w": 1495324800, - "a": 1711, - "d": 932, - "c": 6 - }, - { - "w": 1495929600, - "a": 530, - "d": 546, - "c": 4 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 575, - "d": 453, - "c": 5 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 178, - "d": 30, - "c": 3 - }, - { - "w": 1501977600, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1502582400, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1503187200, - "a": 4262, - "d": 2297, - "c": 6 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 561, - "d": 297, - "c": 4 - }, - { - "w": 1505001600, - "a": 138, - "d": 139, - "c": 1 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 187, - "d": 3, - "c": 1 - }, - { - "w": 1509840000, - "a": 167, - "d": 142, - "c": 8 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 1541, - "d": 159, - "c": 5 - }, - { - "w": 1511654400, - "a": 17, - "d": 10, - "c": 3 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 499, - "d": 472, - "c": 5 - }, - { - "w": 1513468800, - "a": 78, - "d": 38, - "c": 4 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 1059, - "d": 1092, - "c": 6 - }, - { - "w": 1515283200, - "a": 46, - "d": 87, - "c": 2 - }, - { - "w": 1515888000, - "a": 365, - "d": 30, - "c": 1 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1518307200, - "a": 1800, - "d": 1762, - "c": 10 - }, - { - "w": 1518912000, - "a": 68, - "d": 27, - "c": 3 - }, - { - "w": 1519516800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1520121600, - "a": 278, - "d": 175, - "c": 1 - }, - { - "w": 1520726400, - "a": 354, - "d": 83, - "c": 5 - }, - { - "w": 1521331200, - "a": 21, - "d": 12, - "c": 4 - }, - { - "w": 1521936000, - "a": 2, - "d": 1, - "c": 2 - }, - { - "w": 1522540800, - "a": 142, - "d": 11, - "c": 3 - }, - { - "w": 1523145600, - "a": 2, - "d": 9, - "c": 1 - }, - { - "w": 1523750400, - "a": 31, - "d": 21, - "c": 4 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 657, - "d": 657, - "c": 4 - }, - { - "w": 1525564800, - "a": 235, - "d": 118, - "c": 1 - }, - { - "w": 1526169600, - "a": 112, - "d": 79, - "c": 3 - }, - { - "w": 1526774400, - "a": 3, - "d": 17, - "c": 2 - }, - { - "w": 1527379200, - "a": 692, - "d": 704, - "c": 15 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 482, - "d": 460, - "c": 3 - }, - { - "w": 1529193600, - "a": 601, - "d": 73, - "c": 3 - }, - { - "w": 1529798400, - "a": 315, - "d": 72, - "c": 8 - }, - { - "w": 1530403200, - "a": 53, - "d": 18, - "c": 7 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 577, - "d": 499, - "c": 4 - }, - { - "w": 1533427200, - "a": 528, - "d": 320, - "c": 4 - }, - { - "w": 1534032000, - "a": 812, - "d": 483, - "c": 4 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 1307, - "d": 325, - "c": 2 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 994, - "d": 87, - "c": 1 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "mravn-google", - "id": 22935389, - "node_id": "MDQ6VXNlcjIyOTM1Mzg5", - "avatar_url": "https://avatars0.githubusercontent.com/u/22935389?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/mravn-google", - "html_url": "https://github.com/mravn-google", - "followers_url": "https://api.github.com/users/mravn-google/followers", - "following_url": "https://api.github.com/users/mravn-google/following{/other_user}", - "gists_url": "https://api.github.com/users/mravn-google/gists{/gist_id}", - "starred_url": "https://api.github.com/users/mravn-google/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/mravn-google/subscriptions", - "organizations_url": "https://api.github.com/users/mravn-google/orgs", - "repos_url": "https://api.github.com/users/mravn-google/repos", - "events_url": "https://api.github.com/users/mravn-google/events{/privacy}", - "received_events_url": "https://api.github.com/users/mravn-google/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 209, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 84, - "d": 0, - "c": 1 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 15, - "d": 2, - "c": 2 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 600, - "d": 108, - "c": 3 - }, - { - "w": 1504396800, - "a": 11, - "d": 3, - "c": 2 - }, - { - "w": 1505001600, - "a": 110, - "d": 42, - "c": 3 - }, - { - "w": 1505606400, - "a": 12, - "d": 1, - "c": 2 - }, - { - "w": 1506211200, - "a": 74, - "d": 33, - "c": 1 - }, - { - "w": 1506816000, - "a": 223, - "d": 627, - "c": 5 - }, - { - "w": 1507420800, - "a": 217, - "d": 93, - "c": 11 - }, - { - "w": 1508025600, - "a": 20, - "d": 4, - "c": 3 - }, - { - "w": 1508630400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 41, - "d": 15, - "c": 3 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 2, - "d": 1, - "c": 2 - }, - { - "w": 1511654400, - "a": 35, - "d": 22, - "c": 6 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 7, - "d": 6, - "c": 4 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 132, - "d": 112, - "c": 14 - }, - { - "w": 1515283200, - "a": 195, - "d": 83, - "c": 10 - }, - { - "w": 1515888000, - "a": 62, - "d": 23, - "c": 5 - }, - { - "w": 1516492800, - "a": 39, - "d": 12, - "c": 1 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 67, - "d": 49, - "c": 3 - }, - { - "w": 1518307200, - "a": 270, - "d": 291, - "c": 6 - }, - { - "w": 1518912000, - "a": 38, - "d": 38, - "c": 3 - }, - { - "w": 1519516800, - "a": 127, - "d": 42, - "c": 8 - }, - { - "w": 1520121600, - "a": 550, - "d": 409, - "c": 9 - }, - { - "w": 1520726400, - "a": 551, - "d": 421, - "c": 9 - }, - { - "w": 1521331200, - "a": 108, - "d": 82, - "c": 5 - }, - { - "w": 1521936000, - "a": 77, - "d": 76, - "c": 5 - }, - { - "w": 1522540800, - "a": 6, - "d": 5, - "c": 1 - }, - { - "w": 1523145600, - "a": 175, - "d": 90, - "c": 8 - }, - { - "w": 1523750400, - "a": 18, - "d": 12, - "c": 3 - }, - { - "w": 1524355200, - "a": 14, - "d": 12, - "c": 6 - }, - { - "w": 1524960000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 11, - "d": 3, - "c": 3 - }, - { - "w": 1526774400, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 186, - "d": 9, - "c": 4 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 191, - "d": 31, - "c": 3 - }, - { - "w": 1529798400, - "a": 5, - "d": 4, - "c": 3 - }, - { - "w": 1530403200, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1531008000, - "a": 738, - "d": 718, - "c": 7 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 124, - "d": 12, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 645, - "d": 597, - "c": 7 - }, - { - "w": 1535846400, - "a": 31, - "d": 16, - "c": 1 - }, - { - "w": 1536451200, - "a": 17, - "d": 16, - "c": 2 - }, - { - "w": 1537056000, - "a": 8, - "d": 8, - "c": 3 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 2, - "d": 3, - "c": 2 - }, - { - "w": 1539475200, - "a": 14, - "d": 23, - "c": 4 - }, - { - "w": 1540080000, - "a": 288, - "d": 261, - "c": 3 - }, - { - "w": 1540684800, - "a": 144, - "d": 124, - "c": 2 - }, - { - "w": 1541289600, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1541894400, - "a": 17, - "d": 8, - "c": 3 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 108, - "d": 64, - "c": 2 - }, - { - "w": 1546128000, - "a": 22, - "d": 4, - "c": 1 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 15, - "d": 5, - "c": 2 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 80, - "d": 8, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 9, - "c": 1 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 55, - "d": 370, - "c": 1 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "aam", - "id": 381137, - "node_id": "MDQ6VXNlcjM4MTEzNw==", - "avatar_url": "https://avatars0.githubusercontent.com/u/381137?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/aam", - "html_url": "https://github.com/aam", - "followers_url": "https://api.github.com/users/aam/followers", - "following_url": "https://api.github.com/users/aam/following{/other_user}", - "gists_url": "https://api.github.com/users/aam/gists{/gist_id}", - "starred_url": "https://api.github.com/users/aam/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/aam/subscriptions", - "organizations_url": "https://api.github.com/users/aam/orgs", - "repos_url": "https://api.github.com/users/aam/repos", - "events_url": "https://api.github.com/users/aam/events{/privacy}", - "received_events_url": "https://api.github.com/users/aam/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 209, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 760, - "d": 49, - "c": 4 - }, - { - "w": 1433635200, - "a": 703, - "d": 373, - "c": 2 - }, - { - "w": 1434240000, - "a": 1052, - "d": 683, - "c": 5 - }, - { - "w": 1434844800, - "a": 794, - "d": 147, - "c": 3 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 733, - "d": 134, - "c": 12 - }, - { - "w": 1437868800, - "a": 360, - "d": 204, - "c": 13 - }, - { - "w": 1438473600, - "a": 759, - "d": 58, - "c": 12 - }, - { - "w": 1439078400, - "a": 607, - "d": 110, - "c": 19 - }, - { - "w": 1439683200, - "a": 1176, - "d": 801, - "c": 7 - }, - { - "w": 1440288000, - "a": 5065, - "d": 4337, - "c": 22 - }, - { - "w": 1440892800, - "a": 462, - "d": 113, - "c": 18 - }, - { - "w": 1441497600, - "a": 599, - "d": 1, - "c": 1 - }, - { - "w": 1442102400, - "a": 244, - "d": 175, - "c": 1 - }, - { - "w": 1442707200, - "a": 135, - "d": 14, - "c": 4 - }, - { - "w": 1443312000, - "a": 743, - "d": 31, - "c": 2 - }, - { - "w": 1443916800, - "a": 553, - "d": 66, - "c": 12 - }, - { - "w": 1444521600, - "a": 661, - "d": 246, - "c": 21 - }, - { - "w": 1445126400, - "a": 798, - "d": 505, - "c": 8 - }, - { - "w": 1445731200, - "a": 596, - "d": 55, - "c": 12 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 4032, - "c": 1 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 574, - "d": 2, - "c": 2 - }, - { - "w": 1454198400, - "a": 501, - "d": 1, - "c": 1 - }, - { - "w": 1454803200, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1455408000, - "a": 89, - "d": 2, - "c": 2 - }, - { - "w": 1456012800, - "a": 940, - "d": 0, - "c": 1 - }, - { - "w": 1456617600, - "a": 552, - "d": 552, - "c": 1 - }, - { - "w": 1457222400, - "a": 178, - "d": 42, - "c": 2 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 326, - "d": 221, - "c": 1 - }, - { - "w": 1459036800, - "a": 1043, - "d": 3, - "c": 3 - }, - { - "w": 1459641600, - "a": 1036, - "d": 222, - "c": 4 - }, - { - "w": 1460246400, - "a": 252, - "d": 137, - "c": 2 - }, - { - "w": 1460851200, - "a": 625, - "d": 227, - "c": 3 - }, - { - "w": 1461456000, - "a": 513, - "d": 1, - "c": 1 - }, - { - "w": 1462060800, - "a": 65, - "d": 2324, - "c": 2 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 538, - "d": 59, - "c": 2 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "vlidholt", - "id": 1539812, - "node_id": "MDQ6VXNlcjE1Mzk4MTI=", - "avatar_url": "https://avatars3.githubusercontent.com/u/1539812?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/vlidholt", - "html_url": "https://github.com/vlidholt", - "followers_url": "https://api.github.com/users/vlidholt/followers", - "following_url": "https://api.github.com/users/vlidholt/following{/other_user}", - "gists_url": "https://api.github.com/users/vlidholt/gists{/gist_id}", - "starred_url": "https://api.github.com/users/vlidholt/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/vlidholt/subscriptions", - "organizations_url": "https://api.github.com/users/vlidholt/orgs", - "repos_url": "https://api.github.com/users/vlidholt/repos", - "events_url": "https://api.github.com/users/vlidholt/events{/privacy}", - "received_events_url": "https://api.github.com/users/vlidholt/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 216, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 348, - "d": 19, - "c": 1 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 44, - "d": 3, - "c": 1 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 69, - "d": 37, - "c": 2 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 225, - "d": 18, - "c": 3 - }, - { - "w": 1506816000, - "a": 720, - "d": 333, - "c": 2 - }, - { - "w": 1507420800, - "a": 552, - "d": 118, - "c": 5 - }, - { - "w": 1508025600, - "a": 439, - "d": 93, - "c": 2 - }, - { - "w": 1508630400, - "a": 1112, - "d": 534, - "c": 3 - }, - { - "w": 1509235200, - "a": 921, - "d": 83, - "c": 2 - }, - { - "w": 1509840000, - "a": 837, - "d": 156, - "c": 1 - }, - { - "w": 1510444800, - "a": 1570, - "d": 925, - "c": 8 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 166, - "d": 1197, - "c": 3 - }, - { - "w": 1512259200, - "a": 480, - "d": 275, - "c": 6 - }, - { - "w": 1512864000, - "a": 553, - "d": 30, - "c": 5 - }, - { - "w": 1513468800, - "a": 205, - "d": 196, - "c": 3 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 83, - "d": 83, - "c": 1 - }, - { - "w": 1515283200, - "a": 601, - "d": 601, - "c": 3 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 772, - "d": 44, - "c": 2 - }, - { - "w": 1517702400, - "a": 2301, - "d": 1021, - "c": 6 - }, - { - "w": 1518307200, - "a": 437, - "d": 118, - "c": 2 - }, - { - "w": 1518912000, - "a": 4, - "d": 5, - "c": 1 - }, - { - "w": 1519516800, - "a": 2075, - "d": 559, - "c": 3 - }, - { - "w": 1520121600, - "a": 1017, - "d": 500, - "c": 2 - }, - { - "w": 1520726400, - "a": 426, - "d": 155, - "c": 3 - }, - { - "w": 1521331200, - "a": 1403, - "d": 426, - "c": 7 - }, - { - "w": 1521936000, - "a": 48, - "d": 12, - "c": 1 - }, - { - "w": 1522540800, - "a": 2645, - "d": 376, - "c": 4 - }, - { - "w": 1523145600, - "a": 2056, - "d": 709, - "c": 6 - }, - { - "w": 1523750400, - "a": 918, - "d": 606, - "c": 5 - }, - { - "w": 1524355200, - "a": 107, - "d": 7, - "c": 2 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 291, - "d": 19, - "c": 2 - }, - { - "w": 1526169600, - "a": 1653, - "d": 811, - "c": 7 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 431, - "d": 431, - "c": 2 - }, - { - "w": 1527984000, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1528588800, - "a": 216, - "d": 371, - "c": 1 - }, - { - "w": 1529193600, - "a": 999, - "d": 394, - "c": 2 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 437, - "d": 235, - "c": 2 - }, - { - "w": 1531612800, - "a": 289, - "d": 157, - "c": 5 - }, - { - "w": 1532217600, - "a": 167, - "d": 107, - "c": 4 - }, - { - "w": 1532822400, - "a": 722, - "d": 704, - "c": 7 - }, - { - "w": 1533427200, - "a": 502, - "d": 341, - "c": 4 - }, - { - "w": 1534032000, - "a": 108, - "d": 11, - "c": 2 - }, - { - "w": 1534636800, - "a": 21, - "d": 19, - "c": 1 - }, - { - "w": 1535241600, - "a": 216, - "d": 26, - "c": 4 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 695, - "d": 257, - "c": 5 - }, - { - "w": 1537660800, - "a": 62, - "d": 23, - "c": 2 - }, - { - "w": 1538265600, - "a": 6799, - "d": 6222, - "c": 12 - }, - { - "w": 1538870400, - "a": 3885, - "d": 2714, - "c": 6 - }, - { - "w": 1539475200, - "a": 19, - "d": 54, - "c": 5 - }, - { - "w": 1540080000, - "a": 1384, - "d": 176, - "c": 2 - }, - { - "w": 1540684800, - "a": 404, - "d": 78, - "c": 3 - }, - { - "w": 1541289600, - "a": 1571, - "d": 696, - "c": 4 - }, - { - "w": 1541894400, - "a": 1345, - "d": 1231, - "c": 10 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 3, - "d": 55, - "c": 2 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 67, - "d": 15, - "c": 2 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 949, - "d": 106, - "c": 4 - }, - { - "w": 1547337600, - "a": 42, - "d": 47, - "c": 2 - }, - { - "w": 1547942400, - "a": 32, - "d": 2, - "c": 1 - }, - { - "w": 1548547200, - "a": 1385, - "d": 169, - "c": 1 - }, - { - "w": 1549152000, - "a": 11995, - "d": 145, - "c": 4 - }, - { - "w": 1549756800, - "a": 969, - "d": 587, - "c": 3 - }, - { - "w": 1550361600, - "a": 12, - "d": 3, - "c": 2 - }, - { - "w": 1550966400, - "a": 277, - "d": 182, - "c": 3 - }, - { - "w": 1551571200, - "a": 767, - "d": 305, - "c": 2 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "gspencergoog", - "id": 8867023, - "node_id": "MDQ6VXNlcjg4NjcwMjM=", - "avatar_url": "https://avatars2.githubusercontent.com/u/8867023?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/gspencergoog", - "html_url": "https://github.com/gspencergoog", - "followers_url": "https://api.github.com/users/gspencergoog/followers", - "following_url": "https://api.github.com/users/gspencergoog/following{/other_user}", - "gists_url": "https://api.github.com/users/gspencergoog/gists{/gist_id}", - "starred_url": "https://api.github.com/users/gspencergoog/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/gspencergoog/subscriptions", - "organizations_url": "https://api.github.com/users/gspencergoog/orgs", - "repos_url": "https://api.github.com/users/gspencergoog/repos", - "events_url": "https://api.github.com/users/gspencergoog/events{/privacy}", - "received_events_url": "https://api.github.com/users/gspencergoog/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 253, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 192, - "d": 1, - "c": 5 - }, - { - "w": 1454803200, - "a": 928, - "d": 0, - "c": 1 - }, - { - "w": 1455408000, - "a": 288, - "d": 36, - "c": 2 - }, - { - "w": 1456012800, - "a": 1135, - "d": 212, - "c": 7 - }, - { - "w": 1456617600, - "a": 564, - "d": 216, - "c": 8 - }, - { - "w": 1457222400, - "a": 301, - "d": 31, - "c": 4 - }, - { - "w": 1457827200, - "a": 36, - "d": 8, - "c": 2 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 576, - "d": 175, - "c": 4 - }, - { - "w": 1459641600, - "a": 287, - "d": 50, - "c": 3 - }, - { - "w": 1460246400, - "a": 1867, - "d": 1348, - "c": 6 - }, - { - "w": 1460851200, - "a": 111, - "d": 111, - "c": 3 - }, - { - "w": 1461456000, - "a": 167, - "d": 81, - "c": 4 - }, - { - "w": 1462060800, - "a": 7, - "d": 128, - "c": 2 - }, - { - "w": 1462665600, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 28, - "d": 13, - "c": 1 - }, - { - "w": 1464480000, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1468713600, - "a": 43, - "d": 11, - "c": 3 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 17, - "d": 7, - "c": 1 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 11, - "d": 21, - "c": 3 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 34, - "d": 27, - "c": 1 - }, - { - "w": 1473552000, - "a": 2625, - "d": 4, - "c": 2 - }, - { - "w": 1474156800, - "a": 38, - "d": 0, - "c": 1 - }, - { - "w": 1474761600, - "a": 325, - "d": 149, - "c": 1 - }, - { - "w": 1475366400, - "a": 65, - "d": 38, - "c": 4 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 84, - "d": 16, - "c": 6 - }, - { - "w": 1477180800, - "a": 65, - "d": 91, - "c": 2 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 256, - "d": 43, - "c": 3 - }, - { - "w": 1478995200, - "a": 82, - "d": 35, - "c": 2 - }, - { - "w": 1479600000, - "a": 4, - "d": 5, - "c": 1 - }, - { - "w": 1480204800, - "a": 37, - "d": 40, - "c": 2 - }, - { - "w": 1480809600, - "a": 248, - "d": 158, - "c": 3 - }, - { - "w": 1481414400, - "a": 80, - "d": 32, - "c": 2 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 410, - "d": 117, - "c": 6 - }, - { - "w": 1484438400, - "a": 0, - "d": 1, - "c": 1 - }, - { - "w": 1485043200, - "a": 39, - "d": 23, - "c": 2 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 68, - "d": 328, - "c": 2 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 762, - "d": 112, - "c": 3 - }, - { - "w": 1488672000, - "a": 103, - "d": 340, - "c": 4 - }, - { - "w": 1489276800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1489881600, - "a": 104, - "d": 5, - "c": 2 - }, - { - "w": 1490486400, - "a": 104, - "d": 61, - "c": 3 - }, - { - "w": 1491091200, - "a": 679, - "d": 47, - "c": 6 - }, - { - "w": 1491696000, - "a": 286, - "d": 73, - "c": 6 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 129, - "c": 1 - }, - { - "w": 1494115200, - "a": 55, - "d": 11, - "c": 4 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 57, - "d": 24, - "c": 2 - }, - { - "w": 1495929600, - "a": 66, - "d": 46, - "c": 3 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 108, - "d": 435, - "c": 3 - }, - { - "w": 1497744000, - "a": 9, - "d": 1, - "c": 2 - }, - { - "w": 1498348800, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 300, - "d": 3, - "c": 3 - }, - { - "w": 1500163200, - "a": 505, - "d": 221, - "c": 2 - }, - { - "w": 1500768000, - "a": 141, - "d": 3, - "c": 3 - }, - { - "w": 1501372800, - "a": 611, - "d": 4, - "c": 1 - }, - { - "w": 1501977600, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 29, - "d": 12, - "c": 2 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 1384, - "d": 438, - "c": 3 - }, - { - "w": 1505606400, - "a": 1449, - "d": 376, - "c": 4 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 780, - "d": 429, - "c": 3 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 392, - "d": 108, - "c": 2 - }, - { - "w": 1508630400, - "a": 5086, - "d": 1446, - "c": 6 - }, - { - "w": 1509235200, - "a": 645, - "d": 390, - "c": 5 - }, - { - "w": 1509840000, - "a": 357, - "d": 54, - "c": 5 - }, - { - "w": 1510444800, - "a": 24, - "d": 0, - "c": 1 - }, - { - "w": 1511049600, - "a": 97, - "d": 26, - "c": 1 - }, - { - "w": 1511654400, - "a": 24, - "d": 29, - "c": 2 - }, - { - "w": 1512259200, - "a": 3203, - "d": 1090, - "c": 7 - }, - { - "w": 1512864000, - "a": 690, - "d": 195, - "c": 4 - }, - { - "w": 1513468800, - "a": 854, - "d": 260, - "c": 4 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 120, - "d": 115, - "c": 8 - }, - { - "w": 1515283200, - "a": 11, - "d": 6, - "c": 2 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 89, - "d": 16, - "c": 1 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 31, - "d": 27, - "c": 2 - }, - { - "w": 1520121600, - "a": 27, - "d": 20, - "c": 2 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 453, - "d": 666, - "c": 2 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 49, - "d": 12, - "c": 1 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 54, - "d": 16, - "c": 3 - }, - { - "w": 1524355200, - "a": 1676, - "d": 1026, - "c": 3 - }, - { - "w": 1524960000, - "a": 77, - "d": 76, - "c": 3 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 17, - "d": 8, - "c": 1 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 3, - "d": 2, - "c": 1 - }, - { - "w": 1528588800, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1529193600, - "a": 85, - "d": 16, - "c": 2 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 62, - "d": 0, - "c": 1 - }, - { - "w": 1537660800, - "a": 61, - "d": 18, - "c": 1 - }, - { - "w": 1538265600, - "a": 726, - "d": 726, - "c": 3 - }, - { - "w": 1538870400, - "a": 30, - "d": 0, - "c": 1 - }, - { - "w": 1539475200, - "a": 125, - "d": 230, - "c": 3 - }, - { - "w": 1540080000, - "a": 15, - "d": 17, - "c": 4 - }, - { - "w": 1540684800, - "a": 6, - "d": 6, - "c": 2 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 120, - "d": 24, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "yjbanov", - "id": 211513, - "node_id": "MDQ6VXNlcjIxMTUxMw==", - "avatar_url": "https://avatars1.githubusercontent.com/u/211513?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/yjbanov", - "html_url": "https://github.com/yjbanov", - "followers_url": "https://api.github.com/users/yjbanov/followers", - "following_url": "https://api.github.com/users/yjbanov/following{/other_user}", - "gists_url": "https://api.github.com/users/yjbanov/gists{/gist_id}", - "starred_url": "https://api.github.com/users/yjbanov/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/yjbanov/subscriptions", - "organizations_url": "https://api.github.com/users/yjbanov/orgs", - "repos_url": "https://api.github.com/users/yjbanov/repos", - "events_url": "https://api.github.com/users/yjbanov/events{/privacy}", - "received_events_url": "https://api.github.com/users/yjbanov/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 319, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 202, - "d": 10, - "c": 5 - }, - { - "w": 1520726400, - "a": 378, - "d": 220, - "c": 4 - }, - { - "w": 1521331200, - "a": 2117, - "d": 1672, - "c": 6 - }, - { - "w": 1521936000, - "a": 39, - "d": 2, - "c": 2 - }, - { - "w": 1522540800, - "a": 116, - "d": 59, - "c": 4 - }, - { - "w": 1523145600, - "a": 43, - "d": 12, - "c": 1 - }, - { - "w": 1523750400, - "a": 1135, - "d": 221, - "c": 4 - }, - { - "w": 1524355200, - "a": 41, - "d": 5, - "c": 2 - }, - { - "w": 1524960000, - "a": 300, - "d": 8, - "c": 2 - }, - { - "w": 1525564800, - "a": 163, - "d": 32, - "c": 3 - }, - { - "w": 1526169600, - "a": 22, - "d": 7, - "c": 1 - }, - { - "w": 1526774400, - "a": 289, - "d": 1, - "c": 1 - }, - { - "w": 1527379200, - "a": 149, - "d": 58, - "c": 2 - }, - { - "w": 1527984000, - "a": 428, - "d": 32, - "c": 3 - }, - { - "w": 1528588800, - "a": 572, - "d": 130, - "c": 7 - }, - { - "w": 1529193600, - "a": 758, - "d": 137, - "c": 5 - }, - { - "w": 1529798400, - "a": 118, - "d": 17, - "c": 2 - }, - { - "w": 1530403200, - "a": 1238, - "d": 1238, - "c": 2 - }, - { - "w": 1531008000, - "a": 2112, - "d": 233, - "c": 9 - }, - { - "w": 1531612800, - "a": 637, - "d": 114, - "c": 4 - }, - { - "w": 1532217600, - "a": 1060, - "d": 295, - "c": 12 - }, - { - "w": 1532822400, - "a": 1111, - "d": 199, - "c": 15 - }, - { - "w": 1533427200, - "a": 464, - "d": 80, - "c": 7 - }, - { - "w": 1534032000, - "a": 1316, - "d": 133, - "c": 9 - }, - { - "w": 1534636800, - "a": 1593, - "d": 108, - "c": 4 - }, - { - "w": 1535241600, - "a": 1375, - "d": 161, - "c": 7 - }, - { - "w": 1535846400, - "a": 1140, - "d": 2062, - "c": 9 - }, - { - "w": 1536451200, - "a": 1782, - "d": 412, - "c": 7 - }, - { - "w": 1537056000, - "a": 195, - "d": 205, - "c": 4 - }, - { - "w": 1537660800, - "a": 24, - "d": 5, - "c": 1 - }, - { - "w": 1538265600, - "a": 406, - "d": 90, - "c": 5 - }, - { - "w": 1538870400, - "a": 1052, - "d": 95, - "c": 3 - }, - { - "w": 1539475200, - "a": 99, - "d": 64, - "c": 1 - }, - { - "w": 1540080000, - "a": 266, - "d": 30, - "c": 4 - }, - { - "w": 1540684800, - "a": 2113, - "d": 2819, - "c": 4 - }, - { - "w": 1541289600, - "a": 3975, - "d": 4344, - "c": 19 - }, - { - "w": 1541894400, - "a": 415, - "d": 311, - "c": 5 - }, - { - "w": 1542499200, - "a": 154, - "d": 7, - "c": 2 - }, - { - "w": 1543104000, - "a": 146, - "d": 93, - "c": 1 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 800, - "d": 766, - "c": 10 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 102, - "d": 21, - "c": 1 - }, - { - "w": 1546732800, - "a": 635, - "d": 304, - "c": 8 - }, - { - "w": 1547337600, - "a": 1014, - "d": 27, - "c": 5 - }, - { - "w": 1547942400, - "a": 1375, - "d": 221, - "c": 9 - }, - { - "w": 1548547200, - "a": 242, - "d": 128, - "c": 5 - }, - { - "w": 1549152000, - "a": 1768, - "d": 1441, - "c": 7 - }, - { - "w": 1549756800, - "a": 2805, - "d": 1584, - "c": 10 - }, - { - "w": 1550361600, - "a": 79, - "d": 16, - "c": 4 - }, - { - "w": 1550966400, - "a": 690, - "d": 404, - "c": 9 - }, - { - "w": 1551571200, - "a": 2532, - "d": 2000, - "c": 10 - }, - { - "w": 1552176000, - "a": 544, - "d": 1341, - "c": 9 - }, - { - "w": 1552780800, - "a": 565, - "d": 186, - "c": 15 - }, - { - "w": 1553385600, - "a": 2998, - "d": 1866, - "c": 23 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 478, - "d": 23, - "c": 6 - } - ], - "author": { - "login": "jonahwilliams", - "id": 8975114, - "node_id": "MDQ6VXNlcjg5NzUxMTQ=", - "avatar_url": "https://avatars0.githubusercontent.com/u/8975114?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jonahwilliams", - "html_url": "https://github.com/jonahwilliams", - "followers_url": "https://api.github.com/users/jonahwilliams/followers", - "following_url": "https://api.github.com/users/jonahwilliams/following{/other_user}", - "gists_url": "https://api.github.com/users/jonahwilliams/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jonahwilliams/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jonahwilliams/subscriptions", - "organizations_url": "https://api.github.com/users/jonahwilliams/orgs", - "repos_url": "https://api.github.com/users/jonahwilliams/repos", - "events_url": "https://api.github.com/users/jonahwilliams/events{/privacy}", - "received_events_url": "https://api.github.com/users/jonahwilliams/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 325, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 12, - "d": 2, - "c": 1 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 4, - "d": 2, - "c": 2 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 77, - "d": 23, - "c": 2 - }, - { - "w": 1454803200, - "a": 9, - "d": 10, - "c": 5 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1463270400, - "a": 8, - "d": 4, - "c": 1 - }, - { - "w": 1463875200, - "a": 187, - "d": 104, - "c": 6 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 161, - "d": 96, - "c": 4 - }, - { - "w": 1465689600, - "a": 653, - "d": 97, - "c": 1 - }, - { - "w": 1466294400, - "a": 194, - "d": 139, - "c": 9 - }, - { - "w": 1466899200, - "a": 6, - "d": 19, - "c": 2 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 16, - "d": 2, - "c": 2 - }, - { - "w": 1470528000, - "a": 24, - "d": 14, - "c": 3 - }, - { - "w": 1471132800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1471737600, - "a": 23, - "d": 3, - "c": 2 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 197, - "d": 104, - "c": 3 - }, - { - "w": 1476576000, - "a": 36, - "d": 14, - "c": 1 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1478390400, - "a": 10, - "d": 9, - "c": 1 - }, - { - "w": 1478995200, - "a": 72, - "d": 47, - "c": 2 - }, - { - "w": 1479600000, - "a": 24, - "d": 15, - "c": 1 - }, - { - "w": 1480204800, - "a": 582, - "d": 43, - "c": 4 - }, - { - "w": 1480809600, - "a": 757, - "d": 99, - "c": 5 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 683, - "d": 632, - "c": 3 - }, - { - "w": 1483833600, - "a": 594, - "d": 369, - "c": 8 - }, - { - "w": 1484438400, - "a": 44, - "d": 8, - "c": 2 - }, - { - "w": 1485043200, - "a": 280, - "d": 1251, - "c": 5 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 307, - "d": 168, - "c": 12 - }, - { - "w": 1487462400, - "a": 385, - "d": 60, - "c": 3 - }, - { - "w": 1488067200, - "a": 233, - "d": 41, - "c": 3 - }, - { - "w": 1488672000, - "a": 12501, - "d": 320, - "c": 11 - }, - { - "w": 1489276800, - "a": 152, - "d": 103, - "c": 3 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 70, - "d": 23, - "c": 1 - }, - { - "w": 1491091200, - "a": 2, - "d": 1, - "c": 1 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1492905600, - "a": 308, - "d": 12205, - "c": 8 - }, - { - "w": 1493510400, - "a": 212, - "d": 340, - "c": 8 - }, - { - "w": 1494115200, - "a": 8, - "d": 3, - "c": 3 - }, - { - "w": 1494720000, - "a": 175, - "d": 126, - "c": 5 - }, - { - "w": 1495324800, - "a": 80, - "d": 3, - "c": 2 - }, - { - "w": 1495929600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1496534400, - "a": 103, - "d": 103, - "c": 3 - }, - { - "w": 1497139200, - "a": 137, - "d": 106, - "c": 9 - }, - { - "w": 1497744000, - "a": 13, - "d": 7, - "c": 3 - }, - { - "w": 1498348800, - "a": 23, - "d": 24, - "c": 4 - }, - { - "w": 1498953600, - "a": 6, - "d": 7, - "c": 1 - }, - { - "w": 1499558400, - "a": 49, - "d": 30, - "c": 9 - }, - { - "w": 1500163200, - "a": 22, - "d": 50, - "c": 6 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 38, - "d": 1, - "c": 1 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 253, - "d": 89, - "c": 6 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 58, - "d": 49, - "c": 1 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1509840000, - "a": 455, - "d": 442, - "c": 2 - }, - { - "w": 1510444800, - "a": 72, - "d": 54, - "c": 4 - }, - { - "w": 1511049600, - "a": 104, - "d": 42, - "c": 1 - }, - { - "w": 1511654400, - "a": 44, - "d": 65, - "c": 2 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 100, - "d": 219, - "c": 1 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 8, - "d": 9, - "c": 1 - }, - { - "w": 1517097600, - "a": 72, - "d": 32, - "c": 1 - }, - { - "w": 1517702400, - "a": 11, - "d": 4, - "c": 1 - }, - { - "w": 1518307200, - "a": 230, - "d": 522, - "c": 7 - }, - { - "w": 1518912000, - "a": 36, - "d": 8, - "c": 6 - }, - { - "w": 1519516800, - "a": 30, - "d": 15, - "c": 7 - }, - { - "w": 1520121600, - "a": 39, - "d": 23, - "c": 6 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 1137, - "d": 844, - "c": 6 - }, - { - "w": 1522540800, - "a": 66, - "d": 8, - "c": 3 - }, - { - "w": 1523145600, - "a": 191, - "d": 153, - "c": 2 - }, - { - "w": 1523750400, - "a": 140, - "d": 76, - "c": 14 - }, - { - "w": 1524355200, - "a": 337, - "d": 50, - "c": 6 - }, - { - "w": 1524960000, - "a": 1548, - "d": 246, - "c": 11 - }, - { - "w": 1525564800, - "a": 158, - "d": 31, - "c": 12 - }, - { - "w": 1526169600, - "a": 160, - "d": 48, - "c": 5 - }, - { - "w": 1526774400, - "a": 14, - "d": 5, - "c": 3 - }, - { - "w": 1527379200, - "a": 154, - "d": 55, - "c": 3 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 41662, - "d": 41660, - "c": 5 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 31, - "d": 15, - "c": 1 - }, - { - "w": 1534032000, - "a": 5, - "d": 0, - "c": 1 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 51, - "d": 51, - "c": 1 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 11, - "d": 5, - "c": 2 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 121, - "d": 85, - "c": 5 - }, - { - "w": 1541894400, - "a": 49, - "d": 2, - "c": 1 - }, - { - "w": 1542499200, - "a": 5, - "d": 5, - "c": 4 - }, - { - "w": 1543104000, - "a": 3, - "d": 2, - "c": 2 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 41, - "d": 15, - "c": 2 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 21, - "d": 6, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 169, - "d": 193, - "c": 4 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 170, - "d": 774, - "c": 1 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 45, - "d": 23, - "c": 5 - } - ], - "author": { - "login": "tvolkert", - "id": 15253456, - "node_id": "MDQ6VXNlcjE1MjUzNDU2", - "avatar_url": "https://avatars0.githubusercontent.com/u/15253456?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/tvolkert", - "html_url": "https://github.com/tvolkert", - "followers_url": "https://api.github.com/users/tvolkert/followers", - "following_url": "https://api.github.com/users/tvolkert/following{/other_user}", - "gists_url": "https://api.github.com/users/tvolkert/gists{/gist_id}", - "starred_url": "https://api.github.com/users/tvolkert/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/tvolkert/subscriptions", - "organizations_url": "https://api.github.com/users/tvolkert/orgs", - "repos_url": "https://api.github.com/users/tvolkert/repos", - "events_url": "https://api.github.com/users/tvolkert/events{/privacy}", - "received_events_url": "https://api.github.com/users/tvolkert/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 337, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 132, - "d": 19, - "c": 4 - }, - { - "w": 1485648000, - "a": 257, - "d": 48, - "c": 3 - }, - { - "w": 1486252800, - "a": 125, - "d": 22, - "c": 2 - }, - { - "w": 1486857600, - "a": 213, - "d": 60, - "c": 4 - }, - { - "w": 1487462400, - "a": 381, - "d": 153, - "c": 3 - }, - { - "w": 1488067200, - "a": 5379, - "d": 4706, - "c": 3 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 2, - "d": 16, - "c": 1 - }, - { - "w": 1490486400, - "a": 73, - "d": 37, - "c": 3 - }, - { - "w": 1491091200, - "a": 590, - "d": 356, - "c": 5 - }, - { - "w": 1491696000, - "a": 1569, - "d": 1289, - "c": 6 - }, - { - "w": 1492300800, - "a": 59, - "d": 44, - "c": 4 - }, - { - "w": 1492905600, - "a": 1020, - "d": 101, - "c": 5 - }, - { - "w": 1493510400, - "a": 180, - "d": 918, - "c": 9 - }, - { - "w": 1494115200, - "a": 188, - "d": 80, - "c": 4 - }, - { - "w": 1494720000, - "a": 948, - "d": 369, - "c": 4 - }, - { - "w": 1495324800, - "a": 2143, - "d": 1869, - "c": 4 - }, - { - "w": 1495929600, - "a": 487, - "d": 107, - "c": 4 - }, - { - "w": 1496534400, - "a": 247, - "d": 56, - "c": 1 - }, - { - "w": 1497139200, - "a": 968, - "d": 159, - "c": 6 - }, - { - "w": 1497744000, - "a": 101, - "d": 4, - "c": 1 - }, - { - "w": 1498348800, - "a": 175, - "d": 28, - "c": 4 - }, - { - "w": 1498953600, - "a": 127, - "d": 19, - "c": 2 - }, - { - "w": 1499558400, - "a": 486, - "d": 192, - "c": 3 - }, - { - "w": 1500163200, - "a": 426, - "d": 66, - "c": 1 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1501977600, - "a": 124, - "d": 16, - "c": 3 - }, - { - "w": 1502582400, - "a": 234, - "d": 40, - "c": 7 - }, - { - "w": 1503187200, - "a": 35, - "d": 7, - "c": 3 - }, - { - "w": 1503792000, - "a": 5, - "d": 2, - "c": 1 - }, - { - "w": 1504396800, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1505001600, - "a": 386, - "d": 66, - "c": 1 - }, - { - "w": 1505606400, - "a": 2092, - "d": 1164, - "c": 7 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 340, - "d": 127, - "c": 6 - }, - { - "w": 1508630400, - "a": 106, - "d": 3, - "c": 1 - }, - { - "w": 1509235200, - "a": 861, - "d": 28, - "c": 3 - }, - { - "w": 1509840000, - "a": 163, - "d": 5, - "c": 4 - }, - { - "w": 1510444800, - "a": 93, - "d": 36, - "c": 2 - }, - { - "w": 1511049600, - "a": 22, - "d": 0, - "c": 2 - }, - { - "w": 1511654400, - "a": 498, - "d": 293, - "c": 6 - }, - { - "w": 1512259200, - "a": 664, - "d": 163, - "c": 4 - }, - { - "w": 1512864000, - "a": 282, - "d": 24, - "c": 7 - }, - { - "w": 1513468800, - "a": 595, - "d": 162, - "c": 3 - }, - { - "w": 1514073600, - "a": 279, - "d": 254, - "c": 2 - }, - { - "w": 1514678400, - "a": 94, - "d": 3, - "c": 2 - }, - { - "w": 1515283200, - "a": 34, - "d": 6, - "c": 2 - }, - { - "w": 1515888000, - "a": 42, - "d": 20, - "c": 1 - }, - { - "w": 1516492800, - "a": 2862, - "d": 359, - "c": 2 - }, - { - "w": 1517097600, - "a": 530, - "d": 128, - "c": 3 - }, - { - "w": 1517702400, - "a": 205, - "d": 99, - "c": 8 - }, - { - "w": 1518307200, - "a": 360, - "d": 120, - "c": 9 - }, - { - "w": 1518912000, - "a": 243, - "d": 18, - "c": 4 - }, - { - "w": 1519516800, - "a": 96, - "d": 13, - "c": 4 - }, - { - "w": 1520121600, - "a": 119, - "d": 20, - "c": 2 - }, - { - "w": 1520726400, - "a": 75, - "d": 15, - "c": 3 - }, - { - "w": 1521331200, - "a": 2443, - "d": 216, - "c": 11 - }, - { - "w": 1521936000, - "a": 137, - "d": 83, - "c": 6 - }, - { - "w": 1522540800, - "a": 153, - "d": 43, - "c": 4 - }, - { - "w": 1523145600, - "a": 18, - "d": 18, - "c": 2 - }, - { - "w": 1523750400, - "a": 152, - "d": 52, - "c": 5 - }, - { - "w": 1524355200, - "a": 91, - "d": 79, - "c": 5 - }, - { - "w": 1524960000, - "a": 202, - "d": 153, - "c": 6 - }, - { - "w": 1525564800, - "a": 112, - "d": 30, - "c": 5 - }, - { - "w": 1526169600, - "a": 73, - "d": 17, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 10, - "d": 7, - "c": 1 - }, - { - "w": 1528588800, - "a": 75, - "d": 18, - "c": 3 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 896, - "d": 862, - "c": 1 - }, - { - "w": 1531008000, - "a": 291, - "d": 33, - "c": 5 - }, - { - "w": 1531612800, - "a": 6, - "d": 3, - "c": 3 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 868, - "d": 343, - "c": 3 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 487, - "d": 65, - "c": 7 - }, - { - "w": 1534636800, - "a": 780, - "d": 234, - "c": 1 - }, - { - "w": 1535241600, - "a": 2974, - "d": 429, - "c": 5 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 414, - "d": 109, - "c": 5 - }, - { - "w": 1538265600, - "a": 291, - "d": 154, - "c": 6 - }, - { - "w": 1538870400, - "a": 15, - "d": 1, - "c": 2 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 2486, - "d": 209, - "c": 5 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1541894400, - "a": 528, - "d": 18, - "c": 2 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 95, - "d": 3, - "c": 2 - }, - { - "w": 1544918400, - "a": 3510, - "d": 1076, - "c": 5 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 7, - "d": 7, - "c": 2 - }, - { - "w": 1546732800, - "a": 25, - "d": 11, - "c": 4 - }, - { - "w": 1547337600, - "a": 8, - "d": 317, - "c": 1 - }, - { - "w": 1547942400, - "a": 121, - "d": 8, - "c": 3 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 1520, - "d": 946, - "c": 7 - }, - { - "w": 1549756800, - "a": 1304, - "d": 200, - "c": 4 - }, - { - "w": 1550361600, - "a": 481, - "d": 1340, - "c": 4 - }, - { - "w": 1550966400, - "a": 1257, - "d": 329, - "c": 2 - }, - { - "w": 1551571200, - "a": 443, - "d": 57, - "c": 3 - }, - { - "w": 1552176000, - "a": 107, - "d": 4, - "c": 1 - }, - { - "w": 1552780800, - "a": 20, - "d": 5, - "c": 2 - }, - { - "w": 1553385600, - "a": 30152, - "d": 29852, - "c": 4 - }, - { - "w": 1553990400, - "a": 61, - "d": 40, - "c": 5 - }, - { - "w": 1554595200, - "a": 787, - "d": 254, - "c": 3 - } - ], - "author": { - "login": "xster", - "id": 156888, - "node_id": "MDQ6VXNlcjE1Njg4OA==", - "avatar_url": "https://avatars2.githubusercontent.com/u/156888?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/xster", - "html_url": "https://github.com/xster", - "followers_url": "https://api.github.com/users/xster/followers", - "following_url": "https://api.github.com/users/xster/following{/other_user}", - "gists_url": "https://api.github.com/users/xster/gists{/gist_id}", - "starred_url": "https://api.github.com/users/xster/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/xster/subscriptions", - "organizations_url": "https://api.github.com/users/xster/orgs", - "repos_url": "https://api.github.com/users/xster/repos", - "events_url": "https://api.github.com/users/xster/events{/privacy}", - "received_events_url": "https://api.github.com/users/xster/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 356, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 173, - "d": 18, - "c": 2 - }, - { - "w": 1442707200, - "a": 297, - "d": 100, - "c": 2 - }, - { - "w": 1443312000, - "a": 11, - "d": 9, - "c": 2 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 277, - "d": 227, - "c": 5 - }, - { - "w": 1445126400, - "a": 65, - "d": 6, - "c": 4 - }, - { - "w": 1445731200, - "a": 14, - "d": 20, - "c": 4 - }, - { - "w": 1446336000, - "a": 77, - "d": 49, - "c": 2 - }, - { - "w": 1446940800, - "a": 161, - "d": 91, - "c": 4 - }, - { - "w": 1447545600, - "a": 456, - "d": 88, - "c": 3 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 214, - "d": 4, - "c": 4 - }, - { - "w": 1449360000, - "a": 202, - "d": 142, - "c": 4 - }, - { - "w": 1449964800, - "a": 31, - "d": 17, - "c": 5 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 58, - "d": 8, - "c": 1 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 39, - "d": 60, - "c": 2 - }, - { - "w": 1454198400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1454803200, - "a": 395, - "d": 236, - "c": 3 - }, - { - "w": 1455408000, - "a": 6, - "d": 0, - "c": 1 - }, - { - "w": 1456012800, - "a": 10, - "d": 3, - "c": 1 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 285, - "d": 3, - "c": 3 - }, - { - "w": 1457827200, - "a": 60, - "d": 0, - "c": 1 - }, - { - "w": 1458432000, - "a": 464, - "d": 85, - "c": 9 - }, - { - "w": 1459036800, - "a": 33, - "d": 5, - "c": 1 - }, - { - "w": 1459641600, - "a": 148, - "d": 40, - "c": 3 - }, - { - "w": 1460246400, - "a": 99, - "d": 13, - "c": 2 - }, - { - "w": 1460851200, - "a": 89, - "d": 69, - "c": 2 - }, - { - "w": 1461456000, - "a": 197, - "d": 13, - "c": 2 - }, - { - "w": 1462060800, - "a": 143, - "d": 63, - "c": 3 - }, - { - "w": 1462665600, - "a": 338, - "d": 936, - "c": 7 - }, - { - "w": 1463270400, - "a": 23, - "d": 24, - "c": 3 - }, - { - "w": 1463875200, - "a": 28, - "d": 22, - "c": 2 - }, - { - "w": 1464480000, - "a": 105, - "d": 19, - "c": 3 - }, - { - "w": 1465084800, - "a": 29, - "d": 89, - "c": 3 - }, - { - "w": 1465689600, - "a": 2, - "d": 584, - "c": 1 - }, - { - "w": 1466294400, - "a": 18, - "d": 67, - "c": 5 - }, - { - "w": 1466899200, - "a": 6, - "d": 2, - "c": 1 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 3, - "d": 5, - "c": 3 - }, - { - "w": 1468713600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1469318400, - "a": 75, - "d": 11, - "c": 4 - }, - { - "w": 1469923200, - "a": 283, - "d": 45, - "c": 5 - }, - { - "w": 1470528000, - "a": 90, - "d": 24, - "c": 3 - }, - { - "w": 1471132800, - "a": 34, - "d": 39, - "c": 5 - }, - { - "w": 1471737600, - "a": 4, - "d": 4, - "c": 4 - }, - { - "w": 1472342400, - "a": 44, - "d": 3, - "c": 3 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 5, - "d": 5, - "c": 2 - }, - { - "w": 1475366400, - "a": 89, - "d": 45, - "c": 5 - }, - { - "w": 1475971200, - "a": 6, - "d": 6, - "c": 2 - }, - { - "w": 1476576000, - "a": 55, - "d": 148, - "c": 5 - }, - { - "w": 1477180800, - "a": 98, - "d": 46, - "c": 4 - }, - { - "w": 1477785600, - "a": 19, - "d": 17, - "c": 5 - }, - { - "w": 1478390400, - "a": 62, - "d": 45, - "c": 1 - }, - { - "w": 1478995200, - "a": 21, - "d": 1, - "c": 1 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 193, - "d": 81, - "c": 3 - }, - { - "w": 1480809600, - "a": 148, - "d": 2, - "c": 4 - }, - { - "w": 1481414400, - "a": 195, - "d": 2, - "c": 3 - }, - { - "w": 1482019200, - "a": 7, - "d": 1, - "c": 1 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 99, - "d": 6, - "c": 5 - }, - { - "w": 1484438400, - "a": 5, - "d": 2, - "c": 1 - }, - { - "w": 1485043200, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1485648000, - "a": 25, - "d": 18, - "c": 5 - }, - { - "w": 1486252800, - "a": 82, - "d": 0, - "c": 4 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1488067200, - "a": 241, - "d": 9, - "c": 3 - }, - { - "w": 1488672000, - "a": 2, - "d": 0, - "c": 1 - }, - { - "w": 1489276800, - "a": 74, - "d": 12, - "c": 4 - }, - { - "w": 1489881600, - "a": 53, - "d": 23, - "c": 2 - }, - { - "w": 1490486400, - "a": 28, - "d": 67, - "c": 4 - }, - { - "w": 1491091200, - "a": 121, - "d": 68, - "c": 6 - }, - { - "w": 1491696000, - "a": 74, - "d": 17, - "c": 4 - }, - { - "w": 1492300800, - "a": 19, - "d": 2, - "c": 2 - }, - { - "w": 1492905600, - "a": 6, - "d": 4, - "c": 4 - }, - { - "w": 1493510400, - "a": 201, - "d": 194, - "c": 4 - }, - { - "w": 1494115200, - "a": 172, - "d": 24, - "c": 7 - }, - { - "w": 1494720000, - "a": 2607, - "d": 1639, - "c": 2 - }, - { - "w": 1495324800, - "a": 54, - "d": 4, - "c": 2 - }, - { - "w": 1495929600, - "a": 183, - "d": 9, - "c": 3 - }, - { - "w": 1496534400, - "a": 53, - "d": 13, - "c": 1 - }, - { - "w": 1497139200, - "a": 11, - "d": 1, - "c": 1 - }, - { - "w": 1497744000, - "a": 144, - "d": 42, - "c": 8 - }, - { - "w": 1498348800, - "a": 23, - "d": 1, - "c": 1 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 87, - "d": 15, - "c": 4 - }, - { - "w": 1500163200, - "a": 51, - "d": 6, - "c": 3 - }, - { - "w": 1500768000, - "a": 97, - "d": 17, - "c": 4 - }, - { - "w": 1501372800, - "a": 73, - "d": 12, - "c": 5 - }, - { - "w": 1501977600, - "a": 32, - "d": 3, - "c": 3 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 2, - "d": 49, - "c": 3 - }, - { - "w": 1503792000, - "a": 48, - "d": 4, - "c": 2 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 4, - "d": 2, - "c": 1 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 12, - "d": 8, - "c": 5 - }, - { - "w": 1508630400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1509235200, - "a": 89, - "d": 195, - "c": 4 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 2, - "d": 3, - "c": 1 - }, - { - "w": 1512864000, - "a": 6, - "d": 4, - "c": 2 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 14, - "d": 15, - "c": 4 - }, - { - "w": 1515888000, - "a": 20, - "d": 37, - "c": 2 - }, - { - "w": 1516492800, - "a": 1, - "d": 2, - "c": 2 - }, - { - "w": 1517097600, - "a": 82, - "d": 14, - "c": 1 - }, - { - "w": 1517702400, - "a": 15, - "d": 10, - "c": 3 - }, - { - "w": 1518307200, - "a": 9, - "d": 1, - "c": 2 - }, - { - "w": 1518912000, - "a": 28, - "d": 27, - "c": 2 - }, - { - "w": 1519516800, - "a": 38, - "d": 14, - "c": 2 - }, - { - "w": 1520121600, - "a": 34, - "d": 9, - "c": 7 - }, - { - "w": 1520726400, - "a": 751, - "d": 715, - "c": 6 - }, - { - "w": 1521331200, - "a": 8, - "d": 2, - "c": 2 - }, - { - "w": 1521936000, - "a": 28, - "d": 3, - "c": 1 - }, - { - "w": 1522540800, - "a": 11, - "d": 11, - "c": 1 - }, - { - "w": 1523145600, - "a": 39, - "d": 7, - "c": 1 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 5, - "d": 30, - "c": 2 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 70, - "d": 8, - "c": 2 - }, - { - "w": 1526169600, - "a": 31, - "d": 6, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 4, - "d": 4, - "c": 3 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 3, - "d": 3, - "c": 2 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 8, - "d": 9, - "c": 3 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 37, - "d": 3, - "c": 1 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 85, - "d": 78, - "c": 3 - }, - { - "w": 1538870400, - "a": 19, - "d": 1, - "c": 3 - }, - { - "w": 1539475200, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1540080000, - "a": 97, - "d": 25, - "c": 3 - }, - { - "w": 1540684800, - "a": 120, - "d": 0, - "c": 2 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 23, - "d": 16, - "c": 1 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 7, - "d": 0, - "c": 1 - }, - { - "w": 1547337600, - "a": 43, - "d": 11, - "c": 2 - }, - { - "w": 1547942400, - "a": 61, - "d": 61, - "c": 2 - }, - { - "w": 1548547200, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 3, - "c": 1 - }, - { - "w": 1549756800, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1551571200, - "a": 18, - "d": 34, - "c": 3 - }, - { - "w": 1552176000, - "a": 6, - "d": 1, - "c": 1 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "jason-simmons", - "id": 14226037, - "node_id": "MDQ6VXNlcjE0MjI2MDM3", - "avatar_url": "https://avatars3.githubusercontent.com/u/14226037?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/jason-simmons", - "html_url": "https://github.com/jason-simmons", - "followers_url": "https://api.github.com/users/jason-simmons/followers", - "following_url": "https://api.github.com/users/jason-simmons/following{/other_user}", - "gists_url": "https://api.github.com/users/jason-simmons/gists{/gist_id}", - "starred_url": "https://api.github.com/users/jason-simmons/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/jason-simmons/subscriptions", - "organizations_url": "https://api.github.com/users/jason-simmons/orgs", - "repos_url": "https://api.github.com/users/jason-simmons/repos", - "events_url": "https://api.github.com/users/jason-simmons/events{/privacy}", - "received_events_url": "https://api.github.com/users/jason-simmons/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 370, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485648000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486252800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1486857600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492905600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1493510400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494115200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1534032000, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1534636800, - "a": 8, - "d": 8, - "c": 8 - }, - { - "w": 1535241600, - "a": 10, - "d": 10, - "c": 10 - }, - { - "w": 1535846400, - "a": 8, - "d": 8, - "c": 8 - }, - { - "w": 1536451200, - "a": 9, - "d": 9, - "c": 9 - }, - { - "w": 1537056000, - "a": 8, - "d": 8, - "c": 8 - }, - { - "w": 1537660800, - "a": 6, - "d": 6, - "c": 6 - }, - { - "w": 1538265600, - "a": 9, - "d": 9, - "c": 9 - }, - { - "w": 1538870400, - "a": 16, - "d": 16, - "c": 16 - }, - { - "w": 1539475200, - "a": 8, - "d": 8, - "c": 8 - }, - { - "w": 1540080000, - "a": 7, - "d": 7, - "c": 7 - }, - { - "w": 1540684800, - "a": 9, - "d": 9, - "c": 9 - }, - { - "w": 1541289600, - "a": 15, - "d": 15, - "c": 15 - }, - { - "w": 1541894400, - "a": 41, - "d": 41, - "c": 41 - }, - { - "w": 1542499200, - "a": 8, - "d": 8, - "c": 8 - }, - { - "w": 1543104000, - "a": 7, - "d": 7, - "c": 7 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 7, - "d": 7, - "c": 7 - }, - { - "w": 1544918400, - "a": 9, - "d": 9, - "c": 9 - }, - { - "w": 1545523200, - "a": 5, - "d": 5, - "c": 5 - }, - { - "w": 1546128000, - "a": 8, - "d": 8, - "c": 8 - }, - { - "w": 1546732800, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1547337600, - "a": 9, - "d": 9, - "c": 9 - }, - { - "w": 1547942400, - "a": 11, - "d": 11, - "c": 11 - }, - { - "w": 1548547200, - "a": 4, - "d": 4, - "c": 4 - }, - { - "w": 1549152000, - "a": 15, - "d": 15, - "c": 15 - }, - { - "w": 1549756800, - "a": 11, - "d": 11, - "c": 11 - }, - { - "w": 1550361600, - "a": 6, - "d": 6, - "c": 6 - }, - { - "w": 1550966400, - "a": 15, - "d": 15, - "c": 15 - }, - { - "w": 1551571200, - "a": 15, - "d": 15, - "c": 15 - }, - { - "w": 1552176000, - "a": 14, - "d": 14, - "c": 14 - }, - { - "w": 1552780800, - "a": 18, - "d": 18, - "c": 18 - }, - { - "w": 1553385600, - "a": 17, - "d": 17, - "c": 17 - }, - { - "w": 1553990400, - "a": 25, - "d": 25, - "c": 25 - }, - { - "w": 1554595200, - "a": 7, - "d": 7, - "c": 7 - } - ], - "author": { - "login": "engine-flutter-autoroll", - "id": 42042535, - "node_id": "MDQ6VXNlcjQyMDQyNTM1", - "avatar_url": "https://avatars2.githubusercontent.com/u/42042535?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/engine-flutter-autoroll", - "html_url": "https://github.com/engine-flutter-autoroll", - "followers_url": "https://api.github.com/users/engine-flutter-autoroll/followers", - "following_url": "https://api.github.com/users/engine-flutter-autoroll/following{/other_user}", - "gists_url": "https://api.github.com/users/engine-flutter-autoroll/gists{/gist_id}", - "starred_url": "https://api.github.com/users/engine-flutter-autoroll/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/engine-flutter-autoroll/subscriptions", - "organizations_url": "https://api.github.com/users/engine-flutter-autoroll/orgs", - "repos_url": "https://api.github.com/users/engine-flutter-autoroll/repos", - "events_url": "https://api.github.com/users/engine-flutter-autoroll/events{/privacy}", - "received_events_url": "https://api.github.com/users/engine-flutter-autoroll/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 420, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474761600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475366400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1475971200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477785600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 24, - "d": 0, - "c": 1 - }, - { - "w": 1483833600, - "a": 282, - "d": 158, - "c": 5 - }, - { - "w": 1484438400, - "a": 58, - "d": 19, - "c": 3 - }, - { - "w": 1485043200, - "a": 340, - "d": 315, - "c": 9 - }, - { - "w": 1485648000, - "a": 45, - "d": 42, - "c": 7 - }, - { - "w": 1486252800, - "a": 599, - "d": 256, - "c": 13 - }, - { - "w": 1486857600, - "a": 1327, - "d": 1100, - "c": 13 - }, - { - "w": 1487462400, - "a": 117, - "d": 108, - "c": 12 - }, - { - "w": 1488067200, - "a": 589, - "d": 410, - "c": 15 - }, - { - "w": 1488672000, - "a": 116, - "d": 215, - "c": 12 - }, - { - "w": 1489276800, - "a": 220, - "d": 163, - "c": 11 - }, - { - "w": 1489881600, - "a": 335, - "d": 78, - "c": 8 - }, - { - "w": 1490486400, - "a": 19, - "d": 11, - "c": 2 - }, - { - "w": 1491091200, - "a": 36, - "d": 41, - "c": 3 - }, - { - "w": 1491696000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1492300800, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1492905600, - "a": 135, - "d": 27, - "c": 5 - }, - { - "w": 1493510400, - "a": 31, - "d": 4, - "c": 2 - }, - { - "w": 1494115200, - "a": 138, - "d": 121, - "c": 2 - }, - { - "w": 1494720000, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1495324800, - "a": 6, - "d": 4, - "c": 4 - }, - { - "w": 1495929600, - "a": 569, - "d": 187, - "c": 4 - }, - { - "w": 1496534400, - "a": 17, - "d": 4, - "c": 5 - }, - { - "w": 1497139200, - "a": 420, - "d": 96, - "c": 9 - }, - { - "w": 1497744000, - "a": 765, - "d": 168, - "c": 4 - }, - { - "w": 1498348800, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1498953600, - "a": 150, - "d": 39, - "c": 5 - }, - { - "w": 1499558400, - "a": 292, - "d": 103, - "c": 9 - }, - { - "w": 1500163200, - "a": 371, - "d": 22, - "c": 6 - }, - { - "w": 1500768000, - "a": 2, - "d": 7, - "c": 1 - }, - { - "w": 1501372800, - "a": 419, - "d": 60, - "c": 6 - }, - { - "w": 1501977600, - "a": 353, - "d": 72, - "c": 5 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 913, - "d": 133, - "c": 4 - }, - { - "w": 1503792000, - "a": 826, - "d": 56, - "c": 6 - }, - { - "w": 1504396800, - "a": 377, - "d": 27, - "c": 6 - }, - { - "w": 1505001600, - "a": 57, - "d": 22, - "c": 2 - }, - { - "w": 1505606400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1506211200, - "a": 134, - "d": 18, - "c": 4 - }, - { - "w": 1506816000, - "a": 564, - "d": 145, - "c": 5 - }, - { - "w": 1507420800, - "a": 106, - "d": 33, - "c": 2 - }, - { - "w": 1508025600, - "a": 2528, - "d": 1784, - "c": 5 - }, - { - "w": 1508630400, - "a": 1102, - "d": 297, - "c": 4 - }, - { - "w": 1509235200, - "a": 721, - "d": 39, - "c": 7 - }, - { - "w": 1509840000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1510444800, - "a": 50, - "d": 1, - "c": 1 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 176, - "d": 154, - "c": 1 - }, - { - "w": 1512259200, - "a": 341, - "d": 16, - "c": 2 - }, - { - "w": 1512864000, - "a": 1062, - "d": 224, - "c": 4 - }, - { - "w": 1513468800, - "a": 239, - "d": 32, - "c": 5 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 635, - "d": 139, - "c": 4 - }, - { - "w": 1515283200, - "a": 1195, - "d": 803, - "c": 6 - }, - { - "w": 1515888000, - "a": 280, - "d": 34, - "c": 5 - }, - { - "w": 1516492800, - "a": 932, - "d": 164, - "c": 7 - }, - { - "w": 1517097600, - "a": 589, - "d": 192, - "c": 2 - }, - { - "w": 1517702400, - "a": 562, - "d": 217, - "c": 3 - }, - { - "w": 1518307200, - "a": 186, - "d": 13, - "c": 2 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 600, - "d": 93, - "c": 6 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 99, - "d": 5, - "c": 1 - }, - { - "w": 1521936000, - "a": 45, - "d": 7, - "c": 1 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 106, - "d": 20, - "c": 1 - }, - { - "w": 1523750400, - "a": 296, - "d": 21, - "c": 4 - }, - { - "w": 1524355200, - "a": 5, - "d": 4, - "c": 2 - }, - { - "w": 1524960000, - "a": 3807, - "d": 891, - "c": 1 - }, - { - "w": 1525564800, - "a": 94, - "d": 21, - "c": 3 - }, - { - "w": 1526169600, - "a": 14, - "d": 28, - "c": 3 - }, - { - "w": 1526774400, - "a": 1749, - "d": 102, - "c": 4 - }, - { - "w": 1527379200, - "a": 112, - "d": 2, - "c": 4 - }, - { - "w": 1527984000, - "a": 1539, - "d": 105, - "c": 3 - }, - { - "w": 1528588800, - "a": 521, - "d": 23, - "c": 4 - }, - { - "w": 1529193600, - "a": 103, - "d": 10, - "c": 2 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 16, - "d": 2, - "c": 1 - }, - { - "w": 1531008000, - "a": 81, - "d": 2, - "c": 1 - }, - { - "w": 1531612800, - "a": 10, - "d": 8, - "c": 3 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 254, - "d": 76, - "c": 9 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 448, - "d": 394, - "c": 3 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 18, - "d": 261, - "c": 3 - }, - { - "w": 1535846400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1536451200, - "a": 11, - "d": 11, - "c": 7 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 20, - "d": 1, - "c": 1 - }, - { - "w": 1538265600, - "a": 8, - "d": 2, - "c": 2 - }, - { - "w": 1538870400, - "a": 208, - "d": 186, - "c": 1 - }, - { - "w": 1539475200, - "a": 179, - "d": 201, - "c": 2 - }, - { - "w": 1540080000, - "a": 235, - "d": 155, - "c": 3 - }, - { - "w": 1540684800, - "a": 8, - "d": 8, - "c": 2 - }, - { - "w": 1541289600, - "a": 6, - "d": 3, - "c": 3 - }, - { - "w": 1541894400, - "a": 4, - "d": 4, - "c": 4 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 70, - "d": 0, - "c": 1 - }, - { - "w": 1544313600, - "a": 381, - "d": 38, - "c": 9 - }, - { - "w": 1544918400, - "a": 130, - "d": 77, - "c": 1 - }, - { - "w": 1545523200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1546128000, - "a": 39, - "d": 5, - "c": 3 - }, - { - "w": 1546732800, - "a": 370, - "d": 526, - "c": 3 - }, - { - "w": 1547337600, - "a": 1292, - "d": 341, - "c": 7 - }, - { - "w": 1547942400, - "a": 16, - "d": 4, - "c": 2 - }, - { - "w": 1548547200, - "a": 454, - "d": 164, - "c": 6 - }, - { - "w": 1549152000, - "a": 84, - "d": 11, - "c": 3 - }, - { - "w": 1549756800, - "a": 219, - "d": 80, - "c": 4 - }, - { - "w": 1550361600, - "a": 226, - "d": 37, - "c": 5 - }, - { - "w": 1550966400, - "a": 443, - "d": 317, - "c": 4 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 486, - "d": 105, - "c": 4 - }, - { - "w": 1552780800, - "a": 4, - "d": 4, - "c": 2 - }, - { - "w": 1553385600, - "a": 561, - "d": 9, - "c": 1 - }, - { - "w": 1553990400, - "a": 196, - "d": 27, - "c": 7 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "goderbauer", - "id": 1227763, - "node_id": "MDQ6VXNlcjEyMjc3NjM=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1227763?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/goderbauer", - "html_url": "https://github.com/goderbauer", - "followers_url": "https://api.github.com/users/goderbauer/followers", - "following_url": "https://api.github.com/users/goderbauer/following{/other_user}", - "gists_url": "https://api.github.com/users/goderbauer/gists{/gist_id}", - "starred_url": "https://api.github.com/users/goderbauer/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/goderbauer/subscriptions", - "organizations_url": "https://api.github.com/users/goderbauer/orgs", - "repos_url": "https://api.github.com/users/goderbauer/repos", - "events_url": "https://api.github.com/users/goderbauer/events{/privacy}", - "received_events_url": "https://api.github.com/users/goderbauer/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 496, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 395, - "d": 27, - "c": 9 - }, - { - "w": 1439078400, - "a": 40, - "d": 26, - "c": 5 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 17, - "d": 7, - "c": 1 - }, - { - "w": 1441497600, - "a": 26, - "d": 29, - "c": 1 - }, - { - "w": 1442102400, - "a": 3, - "d": 5, - "c": 1 - }, - { - "w": 1442707200, - "a": 48, - "d": 23, - "c": 3 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 37, - "d": 27, - "c": 8 - }, - { - "w": 1444521600, - "a": 55, - "d": 43, - "c": 1 - }, - { - "w": 1445126400, - "a": 59, - "d": 22, - "c": 6 - }, - { - "w": 1445731200, - "a": 105, - "d": 53, - "c": 8 - }, - { - "w": 1446336000, - "a": 588, - "d": 101, - "c": 5 - }, - { - "w": 1446940800, - "a": 57, - "d": 22, - "c": 6 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 42, - "d": 41, - "c": 3 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 154, - "d": 73, - "c": 7 - }, - { - "w": 1450569600, - "a": 29, - "d": 30, - "c": 3 - }, - { - "w": 1451174400, - "a": 213, - "d": 206, - "c": 2 - }, - { - "w": 1451779200, - "a": 27, - "d": 12, - "c": 2 - }, - { - "w": 1452384000, - "a": 7, - "d": 248, - "c": 3 - }, - { - "w": 1452988800, - "a": 2182, - "d": 1558, - "c": 12 - }, - { - "w": 1453593600, - "a": 1288, - "d": 931, - "c": 14 - }, - { - "w": 1454198400, - "a": 1132, - "d": 684, - "c": 14 - }, - { - "w": 1454803200, - "a": 986, - "d": 685, - "c": 12 - }, - { - "w": 1455408000, - "a": 2266, - "d": 1742, - "c": 6 - }, - { - "w": 1456012800, - "a": 817, - "d": 436, - "c": 20 - }, - { - "w": 1456617600, - "a": 263, - "d": 184, - "c": 10 - }, - { - "w": 1457222400, - "a": 766, - "d": 570, - "c": 17 - }, - { - "w": 1457827200, - "a": 842, - "d": 656, - "c": 9 - }, - { - "w": 1458432000, - "a": 884, - "d": 623, - "c": 11 - }, - { - "w": 1459036800, - "a": 272, - "d": 105, - "c": 9 - }, - { - "w": 1459641600, - "a": 724, - "d": 526, - "c": 13 - }, - { - "w": 1460246400, - "a": 1600, - "d": 1231, - "c": 10 - }, - { - "w": 1460851200, - "a": 304, - "d": 221, - "c": 11 - }, - { - "w": 1461456000, - "a": 1649, - "d": 902, - "c": 15 - }, - { - "w": 1462060800, - "a": 803, - "d": 533, - "c": 12 - }, - { - "w": 1462665600, - "a": 1056, - "d": 629, - "c": 10 - }, - { - "w": 1463270400, - "a": 115, - "d": 31, - "c": 6 - }, - { - "w": 1463875200, - "a": 1158, - "d": 809, - "c": 12 - }, - { - "w": 1464480000, - "a": 102, - "d": 55, - "c": 6 - }, - { - "w": 1465084800, - "a": 912, - "d": 499, - "c": 9 - }, - { - "w": 1465689600, - "a": 244, - "d": 72, - "c": 3 - }, - { - "w": 1466294400, - "a": 54, - "d": 15, - "c": 4 - }, - { - "w": 1466899200, - "a": 26, - "d": 18, - "c": 2 - }, - { - "w": 1467504000, - "a": 69, - "d": 13, - "c": 1 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 488, - "d": 76, - "c": 3 - }, - { - "w": 1469318400, - "a": 58, - "d": 50, - "c": 3 - }, - { - "w": 1469923200, - "a": 62, - "d": 64, - "c": 2 - }, - { - "w": 1470528000, - "a": 299, - "d": 166, - "c": 6 - }, - { - "w": 1471132800, - "a": 77, - "d": 53, - "c": 6 - }, - { - "w": 1471737600, - "a": 7, - "d": 3, - "c": 1 - }, - { - "w": 1472342400, - "a": 4, - "d": 3, - "c": 1 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 3, - "d": 0, - "c": 1 - }, - { - "w": 1474156800, - "a": 35, - "d": 20, - "c": 2 - }, - { - "w": 1474761600, - "a": 359, - "d": 65, - "c": 7 - }, - { - "w": 1475366400, - "a": 192, - "d": 15, - "c": 4 - }, - { - "w": 1475971200, - "a": 5, - "d": 5, - "c": 1 - }, - { - "w": 1476576000, - "a": 98, - "d": 36, - "c": 3 - }, - { - "w": 1477180800, - "a": 16, - "d": 0, - "c": 1 - }, - { - "w": 1477785600, - "a": 84, - "d": 231, - "c": 3 - }, - { - "w": 1478390400, - "a": 3, - "d": 4, - "c": 2 - }, - { - "w": 1478995200, - "a": 16, - "d": 10, - "c": 1 - }, - { - "w": 1479600000, - "a": 21, - "d": 10, - "c": 3 - }, - { - "w": 1480204800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1480809600, - "a": 79, - "d": 28, - "c": 2 - }, - { - "w": 1481414400, - "a": 20, - "d": 6, - "c": 2 - }, - { - "w": 1482019200, - "a": 9, - "d": 12, - "c": 1 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 37, - "d": 19, - "c": 3 - }, - { - "w": 1484438400, - "a": 49, - "d": 0, - "c": 1 - }, - { - "w": 1485043200, - "a": 0, - "d": 69, - "c": 1 - }, - { - "w": 1485648000, - "a": 12, - "d": 2, - "c": 2 - }, - { - "w": 1486252800, - "a": 75, - "d": 156, - "c": 5 - }, - { - "w": 1486857600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1487462400, - "a": 8, - "d": 3, - "c": 1 - }, - { - "w": 1488067200, - "a": 13, - "d": 5, - "c": 2 - }, - { - "w": 1488672000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1489276800, - "a": 52, - "d": 9, - "c": 2 - }, - { - "w": 1489881600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1490486400, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1491091200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1491696000, - "a": 69, - "d": 46, - "c": 5 - }, - { - "w": 1492300800, - "a": 108, - "d": 44, - "c": 4 - }, - { - "w": 1492905600, - "a": 82, - "d": 20, - "c": 2 - }, - { - "w": 1493510400, - "a": 43, - "d": 32, - "c": 2 - }, - { - "w": 1494115200, - "a": 7, - "d": 8, - "c": 1 - }, - { - "w": 1494720000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495324800, - "a": 70, - "d": 18, - "c": 2 - }, - { - "w": 1495929600, - "a": 89, - "d": 44, - "c": 2 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 9, - "d": 15, - "c": 2 - }, - { - "w": 1498348800, - "a": 11, - "d": 18, - "c": 2 - }, - { - "w": 1498953600, - "a": 71, - "d": 17, - "c": 2 - }, - { - "w": 1499558400, - "a": 7, - "d": 10, - "c": 2 - }, - { - "w": 1500163200, - "a": 96, - "d": 34, - "c": 3 - }, - { - "w": 1500768000, - "a": 252, - "d": 244, - "c": 4 - }, - { - "w": 1501372800, - "a": 183, - "d": 44, - "c": 4 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 160, - "d": 160, - "c": 3 - }, - { - "w": 1503792000, - "a": 209, - "d": 23, - "c": 2 - }, - { - "w": 1504396800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505001600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1505606400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 23, - "d": 17, - "c": 1 - }, - { - "w": 1507420800, - "a": 16, - "d": 4, - "c": 1 - }, - { - "w": 1508025600, - "a": 9, - "d": 10, - "c": 2 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509840000, - "a": 26, - "d": 30, - "c": 3 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 21, - "c": 1 - }, - { - "w": 1511654400, - "a": 53, - "d": 14, - "c": 3 - }, - { - "w": 1512259200, - "a": 102, - "d": 38, - "c": 2 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 52, - "d": 10, - "c": 1 - }, - { - "w": 1515888000, - "a": 15, - "d": 2, - "c": 1 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 4, - "d": 7, - "c": 2 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 106, - "d": 6, - "c": 1 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 51, - "d": 75, - "c": 1 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 7, - "d": 2, - "c": 2 - }, - { - "w": 1523145600, - "a": 1395, - "d": 1386, - "c": 3 - }, - { - "w": 1523750400, - "a": 46, - "d": 24, - "c": 4 - }, - { - "w": 1524355200, - "a": 8, - "d": 3, - "c": 1 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 888, - "d": 1249, - "c": 5 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 13, - "d": 9, - "c": 3 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 10, - "d": 11, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 104, - "d": 213, - "c": 2 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 15, - "d": 79, - "c": 3 - }, - { - "w": 1533427200, - "a": 29, - "d": 11, - "c": 1 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 32, - "d": 2, - "c": 1 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 1, - "d": 32, - "c": 2 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 48, - "d": 2, - "c": 1 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 46, - "d": 12, - "c": 2 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 13, - "d": 26, - "c": 3 - }, - { - "w": 1541289600, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 144, - "d": 60, - "c": 2 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 4, - "d": 4, - "c": 1 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "devoncarew", - "id": 1269969, - "node_id": "MDQ6VXNlcjEyNjk5Njk=", - "avatar_url": "https://avatars0.githubusercontent.com/u/1269969?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/devoncarew", - "html_url": "https://github.com/devoncarew", - "followers_url": "https://api.github.com/users/devoncarew/followers", - "following_url": "https://api.github.com/users/devoncarew/following{/other_user}", - "gists_url": "https://api.github.com/users/devoncarew/gists{/gist_id}", - "starred_url": "https://api.github.com/users/devoncarew/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/devoncarew/subscriptions", - "organizations_url": "https://api.github.com/users/devoncarew/orgs", - "repos_url": "https://api.github.com/users/devoncarew/repos", - "events_url": "https://api.github.com/users/devoncarew/events{/privacy}", - "received_events_url": "https://api.github.com/users/devoncarew/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 537, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434240000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437264000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440288000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1440892800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1441497600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443312000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1443916800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1444521600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445126400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1445731200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446336000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1446940800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1447545600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448150400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1448755200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449360000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1449964800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452384000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1452988800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454803200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1455408000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456012800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1456617600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457222400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1457827200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1458432000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459036800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1459641600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460246400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1460851200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1461456000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462060800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463875200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1464480000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466294400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469318400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1469923200, - "a": 42, - "d": 10, - "c": 4 - }, - { - "w": 1470528000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471132800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1471737600, - "a": 125, - "d": 49, - "c": 3 - }, - { - "w": 1472342400, - "a": 3, - "d": 3, - "c": 2 - }, - { - "w": 1472947200, - "a": 19, - "d": 26, - "c": 3 - }, - { - "w": 1473552000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1474156800, - "a": 5, - "d": 2, - "c": 1 - }, - { - "w": 1474761600, - "a": 594, - "d": 522, - "c": 5 - }, - { - "w": 1475366400, - "a": 316, - "d": 9, - "c": 4 - }, - { - "w": 1475971200, - "a": 17, - "d": 4, - "c": 2 - }, - { - "w": 1476576000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1477180800, - "a": 59, - "d": 47, - "c": 7 - }, - { - "w": 1477785600, - "a": 182, - "d": 68, - "c": 8 - }, - { - "w": 1478390400, - "a": 88, - "d": 10, - "c": 1 - }, - { - "w": 1478995200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1479600000, - "a": 22, - "d": 9, - "c": 3 - }, - { - "w": 1480204800, - "a": 51, - "d": 0, - "c": 1 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483833600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1484438400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1485043200, - "a": 67, - "d": 7, - "c": 5 - }, - { - "w": 1485648000, - "a": 368, - "d": 114, - "c": 18 - }, - { - "w": 1486252800, - "a": 330, - "d": 129, - "c": 17 - }, - { - "w": 1486857600, - "a": 30, - "d": 13, - "c": 4 - }, - { - "w": 1487462400, - "a": 219, - "d": 32, - "c": 9 - }, - { - "w": 1488067200, - "a": 4715, - "d": 4348, - "c": 20 - }, - { - "w": 1488672000, - "a": 2971, - "d": 2941, - "c": 19 - }, - { - "w": 1489276800, - "a": 24, - "d": 8, - "c": 6 - }, - { - "w": 1489881600, - "a": 315, - "d": 56, - "c": 2 - }, - { - "w": 1490486400, - "a": 135, - "d": 90, - "c": 5 - }, - { - "w": 1491091200, - "a": 37, - "d": 17, - "c": 4 - }, - { - "w": 1491696000, - "a": 13, - "d": 4, - "c": 3 - }, - { - "w": 1492300800, - "a": 3, - "d": 1, - "c": 1 - }, - { - "w": 1492905600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1493510400, - "a": 1322, - "d": 1041, - "c": 16 - }, - { - "w": 1494115200, - "a": 1380, - "d": 93, - "c": 14 - }, - { - "w": 1494720000, - "a": 123, - "d": 28, - "c": 8 - }, - { - "w": 1495324800, - "a": 466, - "d": 403, - "c": 9 - }, - { - "w": 1495929600, - "a": 35, - "d": 8, - "c": 7 - }, - { - "w": 1496534400, - "a": 13, - "d": 7, - "c": 7 - }, - { - "w": 1497139200, - "a": 508, - "d": 493, - "c": 12 - }, - { - "w": 1497744000, - "a": 353, - "d": 218, - "c": 10 - }, - { - "w": 1498348800, - "a": 299, - "d": 42, - "c": 6 - }, - { - "w": 1498953600, - "a": 131, - "d": 41, - "c": 2 - }, - { - "w": 1499558400, - "a": 93, - "d": 6, - "c": 3 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 463, - "d": 172, - "c": 4 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 161, - "d": 31, - "c": 7 - }, - { - "w": 1503792000, - "a": 752, - "d": 309, - "c": 6 - }, - { - "w": 1504396800, - "a": 83, - "d": 44, - "c": 7 - }, - { - "w": 1505001600, - "a": 122, - "d": 34, - "c": 1 - }, - { - "w": 1505606400, - "a": 35, - "d": 7, - "c": 3 - }, - { - "w": 1506211200, - "a": 458, - "d": 52, - "c": 5 - }, - { - "w": 1506816000, - "a": 3, - "d": 5, - "c": 3 - }, - { - "w": 1507420800, - "a": 10, - "d": 10, - "c": 3 - }, - { - "w": 1508025600, - "a": 4, - "d": 2, - "c": 1 - }, - { - "w": 1508630400, - "a": 21, - "d": 7, - "c": 2 - }, - { - "w": 1509235200, - "a": 74, - "d": 74, - "c": 6 - }, - { - "w": 1509840000, - "a": 120, - "d": 75, - "c": 6 - }, - { - "w": 1510444800, - "a": 49, - "d": 0, - "c": 1 - }, - { - "w": 1511049600, - "a": 2321, - "d": 2630, - "c": 8 - }, - { - "w": 1511654400, - "a": 201, - "d": 128, - "c": 7 - }, - { - "w": 1512259200, - "a": 284, - "d": 150, - "c": 12 - }, - { - "w": 1512864000, - "a": 992, - "d": 787, - "c": 16 - }, - { - "w": 1513468800, - "a": 83, - "d": 88, - "c": 3 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 29, - "d": 17, - "c": 3 - }, - { - "w": 1515283200, - "a": 70, - "d": 1, - "c": 1 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 462, - "d": 263, - "c": 6 - }, - { - "w": 1517097600, - "a": 172, - "d": 23, - "c": 6 - }, - { - "w": 1517702400, - "a": 383, - "d": 102, - "c": 14 - }, - { - "w": 1518307200, - "a": 2, - "d": 2, - "c": 2 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 15, - "d": 22, - "c": 4 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 4, - "d": 4, - "c": 4 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 18, - "d": 18, - "c": 8 - }, - { - "w": 1522540800, - "a": 3, - "d": 3, - "c": 3 - }, - { - "w": 1523145600, - "a": 47, - "d": 44, - "c": 3 - }, - { - "w": 1523750400, - "a": 35, - "d": 4, - "c": 1 - }, - { - "w": 1524355200, - "a": 914, - "d": 742, - "c": 19 - }, - { - "w": 1524960000, - "a": 1421, - "d": 1681, - "c": 21 - }, - { - "w": 1525564800, - "a": 635, - "d": 246, - "c": 17 - }, - { - "w": 1526169600, - "a": 96, - "d": 56, - "c": 8 - }, - { - "w": 1526774400, - "a": 76, - "d": 1, - "c": 2 - }, - { - "w": 1527379200, - "a": 1, - "d": 79, - "c": 2 - }, - { - "w": 1527984000, - "a": 1419, - "d": 1999, - "c": 7 - }, - { - "w": 1528588800, - "a": 1251, - "d": 441, - "c": 2 - }, - { - "w": 1529193600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529798400, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 88, - "d": 237, - "c": 5 - }, - { - "w": 1531612800, - "a": 4, - "d": 115, - "c": 2 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 221, - "d": 114, - "c": 7 - }, - { - "w": 1535846400, - "a": 224, - "d": 760, - "c": 12 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 334, - "d": 160, - "c": 3 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 9, - "d": 17, - "c": 1 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 6, - "d": 6, - "c": 1 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 41, - "d": 8, - "c": 3 - }, - { - "w": 1547337600, - "a": 51, - "d": 26, - "c": 3 - }, - { - "w": 1547942400, - "a": 7, - "d": 13, - "c": 2 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 4, - "d": 4, - "c": 4 - }, - { - "w": 1550966400, - "a": 4, - "d": 4, - "c": 4 - }, - { - "w": 1551571200, - "a": 27, - "d": 5, - "c": 2 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "cbracken", - "id": 351029, - "node_id": "MDQ6VXNlcjM1MTAyOQ==", - "avatar_url": "https://avatars3.githubusercontent.com/u/351029?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/cbracken", - "html_url": "https://github.com/cbracken", - "followers_url": "https://api.github.com/users/cbracken/followers", - "following_url": "https://api.github.com/users/cbracken/following{/other_user}", - "gists_url": "https://api.github.com/users/cbracken/gists{/gist_id}", - "starred_url": "https://api.github.com/users/cbracken/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/cbracken/subscriptions", - "organizations_url": "https://api.github.com/users/cbracken/orgs", - "repos_url": "https://api.github.com/users/cbracken/repos", - "events_url": "https://api.github.com/users/cbracken/events{/privacy}", - "received_events_url": "https://api.github.com/users/cbracken/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 699, - "weeks": [ - { - "w": 1413676800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420934400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 213, - "d": 13, - "c": 2 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 96, - "d": 0, - "c": 1 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1432425600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433030400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1433635200, - "a": 86, - "d": 111, - "c": 3 - }, - { - "w": 1434240000, - "a": 144, - "d": 16, - "c": 5 - }, - { - "w": 1434844800, - "a": 64, - "d": 2, - "c": 2 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 328, - "d": 135, - "c": 1 - }, - { - "w": 1437264000, - "a": 164, - "d": 142, - "c": 8 - }, - { - "w": 1437868800, - "a": 281, - "d": 89, - "c": 4 - }, - { - "w": 1438473600, - "a": 110, - "d": 25, - "c": 4 - }, - { - "w": 1439078400, - "a": 707, - "d": 60, - "c": 4 - }, - { - "w": 1439683200, - "a": 631, - "d": 320, - "c": 5 - }, - { - "w": 1440288000, - "a": 152, - "d": 61, - "c": 5 - }, - { - "w": 1440892800, - "a": 873, - "d": 384, - "c": 9 - }, - { - "w": 1441497600, - "a": 146, - "d": 57, - "c": 3 - }, - { - "w": 1442102400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1442707200, - "a": 108, - "d": 33, - "c": 7 - }, - { - "w": 1443312000, - "a": 657, - "d": 139, - "c": 10 - }, - { - "w": 1443916800, - "a": 409, - "d": 79, - "c": 5 - }, - { - "w": 1444521600, - "a": 450, - "d": 27, - "c": 6 - }, - { - "w": 1445126400, - "a": 474, - "d": 75, - "c": 4 - }, - { - "w": 1445731200, - "a": 249, - "d": 7, - "c": 3 - }, - { - "w": 1446336000, - "a": 623, - "d": 288, - "c": 13 - }, - { - "w": 1446940800, - "a": 495, - "d": 241, - "c": 9 - }, - { - "w": 1447545600, - "a": 157, - "d": 121, - "c": 3 - }, - { - "w": 1448150400, - "a": 347, - "d": 278, - "c": 1 - }, - { - "w": 1448755200, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1449360000, - "a": 665, - "d": 343, - "c": 8 - }, - { - "w": 1449964800, - "a": 310, - "d": 98, - "c": 5 - }, - { - "w": 1450569600, - "a": 328, - "d": 217, - "c": 2 - }, - { - "w": 1451174400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451779200, - "a": 282, - "d": 131, - "c": 4 - }, - { - "w": 1452384000, - "a": 753, - "d": 640, - "c": 4 - }, - { - "w": 1452988800, - "a": 416, - "d": 82, - "c": 3 - }, - { - "w": 1453593600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1454198400, - "a": 1078, - "d": 280, - "c": 7 - }, - { - "w": 1454803200, - "a": 1674, - "d": 632, - "c": 7 - }, - { - "w": 1455408000, - "a": 736, - "d": 101, - "c": 6 - }, - { - "w": 1456012800, - "a": 1019, - "d": 356, - "c": 8 - }, - { - "w": 1456617600, - "a": 276, - "d": 116, - "c": 8 - }, - { - "w": 1457222400, - "a": 529, - "d": 258, - "c": 6 - }, - { - "w": 1457827200, - "a": 402, - "d": 172, - "c": 3 - }, - { - "w": 1458432000, - "a": 135, - "d": 72, - "c": 5 - }, - { - "w": 1459036800, - "a": 65, - "d": 50, - "c": 5 - }, - { - "w": 1459641600, - "a": 802, - "d": 586, - "c": 7 - }, - { - "w": 1460246400, - "a": 674, - "d": 90, - "c": 3 - }, - { - "w": 1460851200, - "a": 451, - "d": 127, - "c": 7 - }, - { - "w": 1461456000, - "a": 188, - "d": 43, - "c": 3 - }, - { - "w": 1462060800, - "a": 599, - "d": 53, - "c": 3 - }, - { - "w": 1462665600, - "a": 14974, - "d": 14869, - "c": 9 - }, - { - "w": 1463270400, - "a": 806, - "d": 363, - "c": 6 - }, - { - "w": 1463875200, - "a": 110, - "d": 65, - "c": 8 - }, - { - "w": 1464480000, - "a": 2617, - "d": 1698, - "c": 5 - }, - { - "w": 1465084800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1465689600, - "a": 660, - "d": 330, - "c": 10 - }, - { - "w": 1466294400, - "a": 1239, - "d": 465, - "c": 9 - }, - { - "w": 1466899200, - "a": 429, - "d": 193, - "c": 4 - }, - { - "w": 1467504000, - "a": 78, - "d": 51, - "c": 1 - }, - { - "w": 1468108800, - "a": 185, - "d": 104, - "c": 4 - }, - { - "w": 1468713600, - "a": 1120, - "d": 70, - "c": 5 - }, - { - "w": 1469318400, - "a": 259, - "d": 175, - "c": 9 - }, - { - "w": 1469923200, - "a": 382, - "d": 124, - "c": 7 - }, - { - "w": 1470528000, - "a": 5, - "d": 5, - "c": 2 - }, - { - "w": 1471132800, - "a": 502, - "d": 339, - "c": 10 - }, - { - "w": 1471737600, - "a": 364, - "d": 213, - "c": 5 - }, - { - "w": 1472342400, - "a": 267, - "d": 35, - "c": 6 - }, - { - "w": 1472947200, - "a": 233, - "d": 40, - "c": 2 - }, - { - "w": 1473552000, - "a": 303, - "d": 79, - "c": 3 - }, - { - "w": 1474156800, - "a": 365, - "d": 91, - "c": 4 - }, - { - "w": 1474761600, - "a": 243, - "d": 15, - "c": 1 - }, - { - "w": 1475366400, - "a": 304, - "d": 84, - "c": 4 - }, - { - "w": 1475971200, - "a": 178, - "d": 121, - "c": 1 - }, - { - "w": 1476576000, - "a": 139, - "d": 33, - "c": 4 - }, - { - "w": 1477180800, - "a": 38, - "d": 30, - "c": 2 - }, - { - "w": 1477785600, - "a": 292, - "d": 230, - "c": 3 - }, - { - "w": 1478390400, - "a": 242, - "d": 59, - "c": 1 - }, - { - "w": 1478995200, - "a": 478, - "d": 253, - "c": 6 - }, - { - "w": 1479600000, - "a": 502, - "d": 184, - "c": 5 - }, - { - "w": 1480204800, - "a": 387, - "d": 199, - "c": 8 - }, - { - "w": 1480809600, - "a": 132, - "d": 19, - "c": 2 - }, - { - "w": 1481414400, - "a": 63, - "d": 3, - "c": 2 - }, - { - "w": 1482019200, - "a": 548, - "d": 104, - "c": 2 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 46, - "d": 1, - "c": 1 - }, - { - "w": 1483833600, - "a": 1529, - "d": 1414, - "c": 3 - }, - { - "w": 1484438400, - "a": 572, - "d": 11, - "c": 2 - }, - { - "w": 1485043200, - "a": 449, - "d": 95, - "c": 5 - }, - { - "w": 1485648000, - "a": 11, - "d": 0, - "c": 1 - }, - { - "w": 1486252800, - "a": 322, - "d": 141, - "c": 3 - }, - { - "w": 1486857600, - "a": 565, - "d": 447, - "c": 3 - }, - { - "w": 1487462400, - "a": 273, - "d": 32, - "c": 2 - }, - { - "w": 1488067200, - "a": 866, - "d": 4, - "c": 2 - }, - { - "w": 1488672000, - "a": 303, - "d": 47, - "c": 4 - }, - { - "w": 1489276800, - "a": 1515, - "d": 930, - "c": 6 - }, - { - "w": 1489881600, - "a": 1235, - "d": 946, - "c": 4 - }, - { - "w": 1490486400, - "a": 303, - "d": 200, - "c": 2 - }, - { - "w": 1491091200, - "a": 166, - "d": 55, - "c": 2 - }, - { - "w": 1491696000, - "a": 1211, - "d": 429, - "c": 6 - }, - { - "w": 1492300800, - "a": 773, - "d": 47, - "c": 7 - }, - { - "w": 1492905600, - "a": 655, - "d": 1, - "c": 2 - }, - { - "w": 1493510400, - "a": 2552, - "d": 200, - "c": 5 - }, - { - "w": 1494115200, - "a": 533, - "d": 143, - "c": 4 - }, - { - "w": 1494720000, - "a": 972, - "d": 192, - "c": 3 - }, - { - "w": 1495324800, - "a": 1332, - "d": 462, - "c": 9 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 805, - "d": 187, - "c": 6 - }, - { - "w": 1497139200, - "a": 459, - "d": 238, - "c": 4 - }, - { - "w": 1497744000, - "a": 271, - "d": 57, - "c": 3 - }, - { - "w": 1498348800, - "a": 193, - "d": 65, - "c": 3 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 212, - "d": 18, - "c": 2 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 202, - "d": 14, - "c": 2 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 1061, - "d": 237, - "c": 1 - }, - { - "w": 1503792000, - "a": 805, - "d": 261, - "c": 5 - }, - { - "w": 1504396800, - "a": 807, - "d": 94, - "c": 2 - }, - { - "w": 1505001600, - "a": 1089, - "d": 107, - "c": 4 - }, - { - "w": 1505606400, - "a": 378, - "d": 14, - "c": 2 - }, - { - "w": 1506211200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1506816000, - "a": 184, - "d": 0, - "c": 1 - }, - { - "w": 1507420800, - "a": 3620, - "d": 3060, - "c": 1 - }, - { - "w": 1508025600, - "a": 202, - "d": 11, - "c": 3 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 109, - "d": 72, - "c": 2 - }, - { - "w": 1509840000, - "a": 123, - "d": 20, - "c": 1 - }, - { - "w": 1510444800, - "a": 64, - "d": 6, - "c": 2 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 954, - "d": 287, - "c": 2 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 3735, - "d": 2009, - "c": 3 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 4071, - "d": 984, - "c": 3 - }, - { - "w": 1515888000, - "a": 676, - "d": 97, - "c": 5 - }, - { - "w": 1516492800, - "a": 42, - "d": 1, - "c": 1 - }, - { - "w": 1517097600, - "a": 40, - "d": 4, - "c": 1 - }, - { - "w": 1517702400, - "a": 1197, - "d": 389, - "c": 4 - }, - { - "w": 1518307200, - "a": 275, - "d": 71, - "c": 1 - }, - { - "w": 1518912000, - "a": 650, - "d": 185, - "c": 2 - }, - { - "w": 1519516800, - "a": 833, - "d": 18, - "c": 2 - }, - { - "w": 1520121600, - "a": 554, - "d": 175, - "c": 4 - }, - { - "w": 1520726400, - "a": 1031, - "d": 247, - "c": 9 - }, - { - "w": 1521331200, - "a": 654, - "d": 149, - "c": 6 - }, - { - "w": 1521936000, - "a": 304, - "d": 223, - "c": 5 - }, - { - "w": 1522540800, - "a": 717, - "d": 164, - "c": 7 - }, - { - "w": 1523145600, - "a": 33, - "d": 25, - "c": 3 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 6149, - "d": 5162, - "c": 9 - }, - { - "w": 1524960000, - "a": 681, - "d": 462, - "c": 8 - }, - { - "w": 1525564800, - "a": 199, - "d": 114, - "c": 5 - }, - { - "w": 1526169600, - "a": 1743, - "d": 1015, - "c": 6 - }, - { - "w": 1526774400, - "a": 315, - "d": 146, - "c": 6 - }, - { - "w": 1527379200, - "a": 16, - "d": 2, - "c": 1 - }, - { - "w": 1527984000, - "a": 330, - "d": 21, - "c": 3 - }, - { - "w": 1528588800, - "a": 244, - "d": 75, - "c": 2 - }, - { - "w": 1529193600, - "a": 130, - "d": 0, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 12, - "d": 7, - "c": 1 - }, - { - "w": 1531008000, - "a": 1111, - "d": 127, - "c": 4 - }, - { - "w": 1531612800, - "a": 9003, - "d": 2379, - "c": 3 - }, - { - "w": 1532217600, - "a": 506, - "d": 51, - "c": 1 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 262, - "d": 1, - "c": 2 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 8368, - "d": 4901, - "c": 4 - }, - { - "w": 1535241600, - "a": 14, - "d": 0, - "c": 1 - }, - { - "w": 1535846400, - "a": 1627, - "d": 39, - "c": 3 - }, - { - "w": 1536451200, - "a": 2319, - "d": 1179, - "c": 2 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 877, - "d": 426, - "c": 4 - }, - { - "w": 1538265600, - "a": 2332, - "d": 1105, - "c": 4 - }, - { - "w": 1538870400, - "a": 1358, - "d": 694, - "c": 5 - }, - { - "w": 1539475200, - "a": 913, - "d": 140, - "c": 5 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 7170, - "d": 5808, - "c": 7 - }, - { - "w": 1541289600, - "a": 259, - "d": 8, - "c": 2 - }, - { - "w": 1541894400, - "a": 487, - "d": 6, - "c": 2 - }, - { - "w": 1542499200, - "a": 4831, - "d": 4242, - "c": 5 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 204, - "d": 83, - "c": 6 - }, - { - "w": 1544918400, - "a": 3311, - "d": 1985, - "c": 6 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 98, - "d": 26, - "c": 2 - }, - { - "w": 1546732800, - "a": 162, - "d": 2, - "c": 3 - }, - { - "w": 1547337600, - "a": 256, - "d": 41, - "c": 4 - }, - { - "w": 1547942400, - "a": 310, - "d": 24, - "c": 3 - }, - { - "w": 1548547200, - "a": 96, - "d": 5, - "c": 2 - }, - { - "w": 1549152000, - "a": 1656, - "d": 301, - "c": 9 - }, - { - "w": 1549756800, - "a": 837, - "d": 11, - "c": 3 - }, - { - "w": 1550361600, - "a": 856, - "d": 208, - "c": 1 - }, - { - "w": 1550966400, - "a": 180, - "d": 19, - "c": 4 - }, - { - "w": 1551571200, - "a": 91, - "d": 20, - "c": 1 - }, - { - "w": 1552176000, - "a": 1383, - "d": 1326, - "c": 4 - }, - { - "w": 1552780800, - "a": 34, - "d": 26, - "c": 1 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 398, - "d": 11, - "c": 4 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "HansMuller", - "id": 1377460, - "node_id": "MDQ6VXNlcjEzNzc0NjA=", - "avatar_url": "https://avatars2.githubusercontent.com/u/1377460?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/HansMuller", - "html_url": "https://github.com/HansMuller", - "followers_url": "https://api.github.com/users/HansMuller/followers", - "following_url": "https://api.github.com/users/HansMuller/following{/other_user}", - "gists_url": "https://api.github.com/users/HansMuller/gists{/gist_id}", - "starred_url": "https://api.github.com/users/HansMuller/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/HansMuller/subscriptions", - "organizations_url": "https://api.github.com/users/HansMuller/orgs", - "repos_url": "https://api.github.com/users/HansMuller/repos", - "events_url": "https://api.github.com/users/HansMuller/events{/privacy}", - "received_events_url": "https://api.github.com/users/HansMuller/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 1486, - "weeks": [ - { - "w": 1413676800, - "a": 8, - "d": 1, - "c": 2 - }, - { - "w": 1414281600, - "a": 73, - "d": 61, - "c": 4 - }, - { - "w": 1414886400, - "a": 292, - "d": 21, - "c": 6 - }, - { - "w": 1415491200, - "a": 612, - "d": 11, - "c": 2 - }, - { - "w": 1416096000, - "a": 65, - "d": 86, - "c": 9 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 71, - "d": 75, - "c": 3 - }, - { - "w": 1420934400, - "a": 14, - "d": 5, - "c": 1 - }, - { - "w": 1421539200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422144000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423958400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1424563200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1425168000, - "a": 120, - "d": 62, - "c": 2 - }, - { - "w": 1425772800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426377600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1426982400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1427587200, - "a": 12, - "d": 12, - "c": 1 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 10, - "d": 12, - "c": 4 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 137, - "d": 37, - "c": 6 - }, - { - "w": 1431820800, - "a": 7, - "d": 7, - "c": 1 - }, - { - "w": 1432425600, - "a": 31067, - "d": 268, - "c": 13 - }, - { - "w": 1433030400, - "a": 172, - "d": 92, - "c": 9 - }, - { - "w": 1433635200, - "a": 1322, - "d": 1188, - "c": 16 - }, - { - "w": 1434240000, - "a": 389, - "d": 219, - "c": 12 - }, - { - "w": 1434844800, - "a": 257, - "d": 63, - "c": 10 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436659200, - "a": 7, - "d": 7, - "c": 1 - }, - { - "w": 1437264000, - "a": 1262, - "d": 641, - "c": 25 - }, - { - "w": 1437868800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1438473600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439078400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1439683200, - "a": 840, - "d": 456, - "c": 21 - }, - { - "w": 1440288000, - "a": 1799, - "d": 766, - "c": 21 - }, - { - "w": 1440892800, - "a": 491, - "d": 129, - "c": 6 - }, - { - "w": 1441497600, - "a": 309, - "d": 131, - "c": 7 - }, - { - "w": 1442102400, - "a": 1510, - "d": 1107, - "c": 21 - }, - { - "w": 1442707200, - "a": 3347, - "d": 1310, - "c": 19 - }, - { - "w": 1443312000, - "a": 3205, - "d": 1088, - "c": 29 - }, - { - "w": 1443916800, - "a": 2176, - "d": 1618, - "c": 12 - }, - { - "w": 1444521600, - "a": 732, - "d": 76, - "c": 8 - }, - { - "w": 1445126400, - "a": 1769, - "d": 1052, - "c": 19 - }, - { - "w": 1445731200, - "a": 1354, - "d": 668, - "c": 22 - }, - { - "w": 1446336000, - "a": 1795, - "d": 1388, - "c": 20 - }, - { - "w": 1446940800, - "a": 919, - "d": 377, - "c": 7 - }, - { - "w": 1447545600, - "a": 2569, - "d": 1289, - "c": 18 - }, - { - "w": 1448150400, - "a": 511, - "d": 258, - "c": 11 - }, - { - "w": 1448755200, - "a": 6011, - "d": 5828, - "c": 21 - }, - { - "w": 1449360000, - "a": 867, - "d": 639, - "c": 20 - }, - { - "w": 1449964800, - "a": 17722, - "d": 13872, - "c": 16 - }, - { - "w": 1450569600, - "a": 250, - "d": 113, - "c": 3 - }, - { - "w": 1451174400, - "a": 274, - "d": 225, - "c": 5 - }, - { - "w": 1451779200, - "a": 1191, - "d": 646, - "c": 14 - }, - { - "w": 1452384000, - "a": 1823, - "d": 698, - "c": 21 - }, - { - "w": 1452988800, - "a": 352, - "d": 176, - "c": 7 - }, - { - "w": 1453593600, - "a": 182, - "d": 153, - "c": 5 - }, - { - "w": 1454198400, - "a": 213, - "d": 107, - "c": 3 - }, - { - "w": 1454803200, - "a": 3295, - "d": 1334, - "c": 25 - }, - { - "w": 1455408000, - "a": 127, - "d": 19, - "c": 4 - }, - { - "w": 1456012800, - "a": 1197, - "d": 1212, - "c": 22 - }, - { - "w": 1456617600, - "a": 954, - "d": 512, - "c": 12 - }, - { - "w": 1457222400, - "a": 3522, - "d": 3086, - "c": 22 - }, - { - "w": 1457827200, - "a": 9110, - "d": 4283, - "c": 26 - }, - { - "w": 1458432000, - "a": 2500, - "d": 577, - "c": 18 - }, - { - "w": 1459036800, - "a": 1649, - "d": 507, - "c": 13 - }, - { - "w": 1459641600, - "a": 977, - "d": 446, - "c": 11 - }, - { - "w": 1460246400, - "a": 2869, - "d": 930, - "c": 15 - }, - { - "w": 1460851200, - "a": 2654, - "d": 1949, - "c": 17 - }, - { - "w": 1461456000, - "a": 10573, - "d": 10640, - "c": 6 - }, - { - "w": 1462060800, - "a": 683, - "d": 105, - "c": 8 - }, - { - "w": 1462665600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1463270400, - "a": 5233, - "d": 3567, - "c": 16 - }, - { - "w": 1463875200, - "a": 2124, - "d": 1754, - "c": 4 - }, - { - "w": 1464480000, - "a": 2121, - "d": 1124, - "c": 8 - }, - { - "w": 1465084800, - "a": 1128, - "d": 407, - "c": 5 - }, - { - "w": 1465689600, - "a": 2609, - "d": 2074, - "c": 10 - }, - { - "w": 1466294400, - "a": 1641, - "d": 292, - "c": 6 - }, - { - "w": 1466899200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1467504000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468108800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1468713600, - "a": 135, - "d": 69, - "c": 1 - }, - { - "w": 1469318400, - "a": 1062, - "d": 473, - "c": 8 - }, - { - "w": 1469923200, - "a": 353, - "d": 125, - "c": 5 - }, - { - "w": 1470528000, - "a": 598, - "d": 150, - "c": 5 - }, - { - "w": 1471132800, - "a": 1111, - "d": 109, - "c": 6 - }, - { - "w": 1471737600, - "a": 243, - "d": 58, - "c": 4 - }, - { - "w": 1472342400, - "a": 1682, - "d": 366, - "c": 7 - }, - { - "w": 1472947200, - "a": 1032, - "d": 362, - "c": 6 - }, - { - "w": 1473552000, - "a": 726, - "d": 319, - "c": 8 - }, - { - "w": 1474156800, - "a": 492, - "d": 113, - "c": 8 - }, - { - "w": 1474761600, - "a": 1711, - "d": 537, - "c": 5 - }, - { - "w": 1475366400, - "a": 21, - "d": 7, - "c": 2 - }, - { - "w": 1475971200, - "a": 102, - "d": 22, - "c": 3 - }, - { - "w": 1476576000, - "a": 320, - "d": 30, - "c": 7 - }, - { - "w": 1477180800, - "a": 1154, - "d": 135, - "c": 11 - }, - { - "w": 1477785600, - "a": 610, - "d": 227, - "c": 23 - }, - { - "w": 1478390400, - "a": 18652, - "d": 17591, - "c": 18 - }, - { - "w": 1478995200, - "a": 779, - "d": 444, - "c": 16 - }, - { - "w": 1479600000, - "a": 3, - "d": 3, - "c": 1 - }, - { - "w": 1480204800, - "a": 90, - "d": 36, - "c": 3 - }, - { - "w": 1480809600, - "a": 14, - "d": 3, - "c": 2 - }, - { - "w": 1481414400, - "a": 514, - "d": 245, - "c": 5 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 448, - "d": 143, - "c": 10 - }, - { - "w": 1483833600, - "a": 2248, - "d": 19, - "c": 4 - }, - { - "w": 1484438400, - "a": 4307, - "d": 571, - "c": 12 - }, - { - "w": 1485043200, - "a": 6235, - "d": 1783, - "c": 32 - }, - { - "w": 1485648000, - "a": 3330, - "d": 2557, - "c": 19 - }, - { - "w": 1486252800, - "a": 2085, - "d": 1765, - "c": 15 - }, - { - "w": 1486857600, - "a": 1244, - "d": 517, - "c": 11 - }, - { - "w": 1487462400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1488067200, - "a": 7, - "d": 1, - "c": 1 - }, - { - "w": 1488672000, - "a": 1076, - "d": 1939, - "c": 3 - }, - { - "w": 1489276800, - "a": 406, - "d": 304, - "c": 3 - }, - { - "w": 1489881600, - "a": 15, - "d": 0, - "c": 2 - }, - { - "w": 1490486400, - "a": 148, - "d": 90, - "c": 6 - }, - { - "w": 1491091200, - "a": 4162, - "d": 2001, - "c": 22 - }, - { - "w": 1491696000, - "a": 3477, - "d": 2850, - "c": 6 - }, - { - "w": 1492300800, - "a": 998, - "d": 631, - "c": 6 - }, - { - "w": 1492905600, - "a": 1949, - "d": 1544, - "c": 8 - }, - { - "w": 1493510400, - "a": 1834, - "d": 903, - "c": 16 - }, - { - "w": 1494115200, - "a": 5208, - "d": 4038, - "c": 22 - }, - { - "w": 1494720000, - "a": 1777, - "d": 465, - "c": 16 - }, - { - "w": 1495324800, - "a": 1541, - "d": 210, - "c": 11 - }, - { - "w": 1495929600, - "a": 755, - "d": 172, - "c": 4 - }, - { - "w": 1496534400, - "a": 1814, - "d": 718, - "c": 10 - }, - { - "w": 1497139200, - "a": 1519, - "d": 393, - "c": 8 - }, - { - "w": 1497744000, - "a": 2576, - "d": 419, - "c": 12 - }, - { - "w": 1498348800, - "a": 2441, - "d": 198, - "c": 7 - }, - { - "w": 1498953600, - "a": 11, - "d": 9, - "c": 2 - }, - { - "w": 1499558400, - "a": 5, - "d": 3, - "c": 1 - }, - { - "w": 1500163200, - "a": 1589, - "d": 401, - "c": 8 - }, - { - "w": 1500768000, - "a": 1270, - "d": 510, - "c": 4 - }, - { - "w": 1501372800, - "a": 496, - "d": 340, - "c": 6 - }, - { - "w": 1501977600, - "a": 509, - "d": 298, - "c": 2 - }, - { - "w": 1502582400, - "a": 668, - "d": 1015, - "c": 3 - }, - { - "w": 1503187200, - "a": 337, - "d": 116, - "c": 4 - }, - { - "w": 1503792000, - "a": 5393, - "d": 1757, - "c": 6 - }, - { - "w": 1504396800, - "a": 2520, - "d": 1167, - "c": 4 - }, - { - "w": 1505001600, - "a": 1566, - "d": 1070, - "c": 12 - }, - { - "w": 1505606400, - "a": 6444, - "d": 2876, - "c": 13 - }, - { - "w": 1506211200, - "a": 3530, - "d": 726, - "c": 13 - }, - { - "w": 1506816000, - "a": 2862, - "d": 585, - "c": 7 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 2019, - "d": 432, - "c": 6 - }, - { - "w": 1508630400, - "a": 297, - "d": 21, - "c": 3 - }, - { - "w": 1509235200, - "a": 3541, - "d": 229, - "c": 7 - }, - { - "w": 1509840000, - "a": 209, - "d": 115, - "c": 1 - }, - { - "w": 1510444800, - "a": 477, - "d": 130, - "c": 4 - }, - { - "w": 1511049600, - "a": 1280, - "d": 301, - "c": 5 - }, - { - "w": 1511654400, - "a": 679, - "d": 361, - "c": 7 - }, - { - "w": 1512259200, - "a": 3769, - "d": 3131, - "c": 7 - }, - { - "w": 1512864000, - "a": 693, - "d": 81, - "c": 7 - }, - { - "w": 1513468800, - "a": 1215, - "d": 260, - "c": 6 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 1334, - "d": 199, - "c": 18 - }, - { - "w": 1515888000, - "a": 2305, - "d": 571, - "c": 14 - }, - { - "w": 1516492800, - "a": 256, - "d": 92, - "c": 6 - }, - { - "w": 1517097600, - "a": 787, - "d": 271, - "c": 9 - }, - { - "w": 1517702400, - "a": 182, - "d": 25, - "c": 2 - }, - { - "w": 1518307200, - "a": 221, - "d": 73, - "c": 3 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 66, - "d": 9, - "c": 2 - }, - { - "w": 1520121600, - "a": 9, - "d": 3, - "c": 1 - }, - { - "w": 1520726400, - "a": 148, - "d": 51, - "c": 2 - }, - { - "w": 1521331200, - "a": 2269, - "d": 928, - "c": 10 - }, - { - "w": 1521936000, - "a": 2, - "d": 2, - "c": 1 - }, - { - "w": 1522540800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523145600, - "a": 80, - "d": 21, - "c": 4 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 266, - "d": 6, - "c": 4 - }, - { - "w": 1524960000, - "a": 389, - "d": 280, - "c": 4 - }, - { - "w": 1525564800, - "a": 349, - "d": 34, - "c": 1 - }, - { - "w": 1526169600, - "a": 80, - "d": 18, - "c": 1 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 749, - "d": 214, - "c": 5 - }, - { - "w": 1527984000, - "a": 456, - "d": 367, - "c": 7 - }, - { - "w": 1528588800, - "a": 931, - "d": 649, - "c": 4 - }, - { - "w": 1529193600, - "a": 232, - "d": 225, - "c": 1 - }, - { - "w": 1529798400, - "a": 659, - "d": 312, - "c": 6 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 263, - "d": 255, - "c": 3 - }, - { - "w": 1531612800, - "a": 41131, - "d": 41133, - "c": 3 - }, - { - "w": 1532217600, - "a": 1069, - "d": 1033, - "c": 3 - }, - { - "w": 1532822400, - "a": 11320, - "d": 4475, - "c": 7 - }, - { - "w": 1533427200, - "a": 1644, - "d": 448, - "c": 6 - }, - { - "w": 1534032000, - "a": 1355, - "d": 1191, - "c": 13 - }, - { - "w": 1534636800, - "a": 346, - "d": 225, - "c": 5 - }, - { - "w": 1535241600, - "a": 205, - "d": 107, - "c": 3 - }, - { - "w": 1535846400, - "a": 6, - "d": 6, - "c": 1 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 94, - "d": 71, - "c": 2 - }, - { - "w": 1537660800, - "a": 758, - "d": 427, - "c": 1 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 209, - "d": 133, - "c": 1 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 696, - "d": 75, - "c": 6 - }, - { - "w": 1540684800, - "a": 192, - "d": 334, - "c": 4 - }, - { - "w": 1541289600, - "a": 443, - "d": 414, - "c": 3 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 110, - "d": 45, - "c": 7 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 3056, - "d": 3056, - "c": 3 - }, - { - "w": 1545523200, - "a": 620, - "d": 163, - "c": 6 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 2, - "c": 1 - }, - { - "w": 1547337600, - "a": 2760, - "d": 1514, - "c": 6 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 245, - "d": 22, - "c": 2 - }, - { - "w": 1549152000, - "a": 253, - "d": 24, - "c": 2 - }, - { - "w": 1549756800, - "a": 249, - "d": 146, - "c": 2 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 41, - "d": 7, - "c": 1 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 11, - "d": 5, - "c": 1 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "Hixie", - "id": 551196, - "node_id": "MDQ6VXNlcjU1MTE5Ng==", - "avatar_url": "https://avatars2.githubusercontent.com/u/551196?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/Hixie", - "html_url": "https://github.com/Hixie", - "followers_url": "https://api.github.com/users/Hixie/followers", - "following_url": "https://api.github.com/users/Hixie/following{/other_user}", - "gists_url": "https://api.github.com/users/Hixie/gists{/gist_id}", - "starred_url": "https://api.github.com/users/Hixie/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/Hixie/subscriptions", - "organizations_url": "https://api.github.com/users/Hixie/orgs", - "repos_url": "https://api.github.com/users/Hixie/repos", - "events_url": "https://api.github.com/users/Hixie/events{/privacy}", - "received_events_url": "https://api.github.com/users/Hixie/received_events", - "type": "User", - "site_admin": false - } - }, - { - "total": 1830, - "weeks": [ - { - "w": 1413676800, - "a": 80, - "d": 0, - "c": 1 - }, - { - "w": 1414281600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1414886400, - "a": 47, - "d": 8, - "c": 3 - }, - { - "w": 1415491200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1416096000, - "a": 26, - "d": 0, - "c": 1 - }, - { - "w": 1416700800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417305600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1417910400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1418515200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419120000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1419724800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1420329600, - "a": 8, - "d": 2, - "c": 2 - }, - { - "w": 1420934400, - "a": 109, - "d": 13, - "c": 4 - }, - { - "w": 1421539200, - "a": 10, - "d": 13, - "c": 2 - }, - { - "w": 1422144000, - "a": 5163, - "d": 5010, - "c": 6 - }, - { - "w": 1422748800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1423353600, - "a": 122, - "d": 15, - "c": 2 - }, - { - "w": 1423958400, - "a": 104, - "d": 61, - "c": 4 - }, - { - "w": 1424563200, - "a": 521, - "d": 607, - "c": 15 - }, - { - "w": 1425168000, - "a": 8398, - "d": 14677, - "c": 17 - }, - { - "w": 1425772800, - "a": 631, - "d": 1533, - "c": 14 - }, - { - "w": 1426377600, - "a": 3576, - "d": 3463, - "c": 13 - }, - { - "w": 1426982400, - "a": 63217, - "d": 37295, - "c": 15 - }, - { - "w": 1427587200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428192000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1428796800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1429401600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430006400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1430611200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431216000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1431820800, - "a": 254, - "d": 26, - "c": 10 - }, - { - "w": 1432425600, - "a": 624, - "d": 718, - "c": 6 - }, - { - "w": 1433030400, - "a": 173, - "d": 118, - "c": 10 - }, - { - "w": 1433635200, - "a": 303, - "d": 297, - "c": 16 - }, - { - "w": 1434240000, - "a": 41, - "d": 43, - "c": 6 - }, - { - "w": 1434844800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1435449600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1436054400, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1436659200, - "a": 330, - "d": 68, - "c": 2 - }, - { - "w": 1437264000, - "a": 411, - "d": 417, - "c": 32 - }, - { - "w": 1437868800, - "a": 507, - "d": 486, - "c": 28 - }, - { - "w": 1438473600, - "a": 2409, - "d": 1755, - "c": 29 - }, - { - "w": 1439078400, - "a": 890, - "d": 474, - "c": 31 - }, - { - "w": 1439683200, - "a": 4617, - "d": 3081, - "c": 43 - }, - { - "w": 1440288000, - "a": 3040, - "d": 1204, - "c": 40 - }, - { - "w": 1440892800, - "a": 17925, - "d": 16635, - "c": 30 - }, - { - "w": 1441497600, - "a": 4284, - "d": 5311, - "c": 19 - }, - { - "w": 1442102400, - "a": 3499, - "d": 2938, - "c": 35 - }, - { - "w": 1442707200, - "a": 9523, - "d": 1838, - "c": 57 - }, - { - "w": 1443312000, - "a": 9016, - "d": 18483, - "c": 31 - }, - { - "w": 1443916800, - "a": 7980, - "d": 8116, - "c": 35 - }, - { - "w": 1444521600, - "a": 7565, - "d": 7505, - "c": 33 - }, - { - "w": 1445126400, - "a": 1126, - "d": 1808, - "c": 27 - }, - { - "w": 1445731200, - "a": 2621, - "d": 3555, - "c": 28 - }, - { - "w": 1446336000, - "a": 1668, - "d": 1219, - "c": 44 - }, - { - "w": 1446940800, - "a": 744, - "d": 280, - "c": 23 - }, - { - "w": 1447545600, - "a": 1595, - "d": 903, - "c": 34 - }, - { - "w": 1448150400, - "a": 3458, - "d": 2437, - "c": 26 - }, - { - "w": 1448755200, - "a": 1246, - "d": 776, - "c": 33 - }, - { - "w": 1449360000, - "a": 1390, - "d": 586, - "c": 23 - }, - { - "w": 1449964800, - "a": 1, - "d": 0, - "c": 1 - }, - { - "w": 1450569600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1451174400, - "a": 589, - "d": 160, - "c": 5 - }, - { - "w": 1451779200, - "a": 1601, - "d": 764, - "c": 18 - }, - { - "w": 1452384000, - "a": 1843, - "d": 1517, - "c": 19 - }, - { - "w": 1452988800, - "a": 4072, - "d": 3895, - "c": 29 - }, - { - "w": 1453593600, - "a": 1206, - "d": 649, - "c": 15 - }, - { - "w": 1454198400, - "a": 1749, - "d": 1090, - "c": 16 - }, - { - "w": 1454803200, - "a": 3950, - "d": 4369, - "c": 32 - }, - { - "w": 1455408000, - "a": 1717, - "d": 1911, - "c": 25 - }, - { - "w": 1456012800, - "a": 1076, - "d": 1040, - "c": 15 - }, - { - "w": 1456617600, - "a": 1986, - "d": 1089, - "c": 24 - }, - { - "w": 1457222400, - "a": 4820, - "d": 4482, - "c": 37 - }, - { - "w": 1457827200, - "a": 448, - "d": 108, - "c": 15 - }, - { - "w": 1458432000, - "a": 404, - "d": 183, - "c": 13 - }, - { - "w": 1459036800, - "a": 1622, - "d": 762, - "c": 29 - }, - { - "w": 1459641600, - "a": 3189, - "d": 2345, - "c": 24 - }, - { - "w": 1460246400, - "a": 522, - "d": 100, - "c": 4 - }, - { - "w": 1460851200, - "a": 1131, - "d": 279, - "c": 13 - }, - { - "w": 1461456000, - "a": 5508, - "d": 4788, - "c": 28 - }, - { - "w": 1462060800, - "a": 1179, - "d": 809, - "c": 18 - }, - { - "w": 1462665600, - "a": 203, - "d": 27, - "c": 4 - }, - { - "w": 1463270400, - "a": 1562, - "d": 516, - "c": 14 - }, - { - "w": 1463875200, - "a": 1638, - "d": 608, - "c": 23 - }, - { - "w": 1464480000, - "a": 3424, - "d": 1902, - "c": 26 - }, - { - "w": 1465084800, - "a": 1648, - "d": 712, - "c": 23 - }, - { - "w": 1465689600, - "a": 888, - "d": 749, - "c": 12 - }, - { - "w": 1466294400, - "a": 1666, - "d": 408, - "c": 24 - }, - { - "w": 1466899200, - "a": 2197, - "d": 1455, - "c": 13 - }, - { - "w": 1467504000, - "a": 5269, - "d": 2969, - "c": 17 - }, - { - "w": 1468108800, - "a": 4, - "d": 3, - "c": 2 - }, - { - "w": 1468713600, - "a": 132, - "d": 41, - "c": 5 - }, - { - "w": 1469318400, - "a": 737, - "d": 346, - "c": 11 - }, - { - "w": 1469923200, - "a": 307, - "d": 188, - "c": 11 - }, - { - "w": 1470528000, - "a": 6, - "d": 6, - "c": 5 - }, - { - "w": 1471132800, - "a": 173, - "d": 3, - "c": 2 - }, - { - "w": 1471737600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1472342400, - "a": 39, - "d": 25, - "c": 1 - }, - { - "w": 1472947200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1473552000, - "a": 265, - "d": 422, - "c": 8 - }, - { - "w": 1474156800, - "a": 1538, - "d": 7145, - "c": 18 - }, - { - "w": 1474761600, - "a": 1397, - "d": 1077, - "c": 16 - }, - { - "w": 1475366400, - "a": 981, - "d": 1554, - "c": 9 - }, - { - "w": 1475971200, - "a": 1718, - "d": 1425, - "c": 26 - }, - { - "w": 1476576000, - "a": 1583, - "d": 1140, - "c": 23 - }, - { - "w": 1477180800, - "a": 143, - "d": 250, - "c": 10 - }, - { - "w": 1477785600, - "a": 201, - "d": 61, - "c": 6 - }, - { - "w": 1478390400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1478995200, - "a": 311, - "d": 56, - "c": 6 - }, - { - "w": 1479600000, - "a": 460, - "d": 243, - "c": 4 - }, - { - "w": 1480204800, - "a": 71, - "d": 62, - "c": 5 - }, - { - "w": 1480809600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1481414400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482019200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1482624000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1483228800, - "a": 1451, - "d": 3016, - "c": 14 - }, - { - "w": 1483833600, - "a": 3080, - "d": 768, - "c": 21 - }, - { - "w": 1484438400, - "a": 2482, - "d": 1620, - "c": 16 - }, - { - "w": 1485043200, - "a": 2061, - "d": 936, - "c": 13 - }, - { - "w": 1485648000, - "a": 6910, - "d": 3816, - "c": 26 - }, - { - "w": 1486252800, - "a": 4188, - "d": 5064, - "c": 28 - }, - { - "w": 1486857600, - "a": 2870, - "d": 7835, - "c": 29 - }, - { - "w": 1487462400, - "a": 2062, - "d": 1437, - "c": 16 - }, - { - "w": 1488067200, - "a": 791, - "d": 169, - "c": 9 - }, - { - "w": 1488672000, - "a": 0, - "d": 2, - "c": 1 - }, - { - "w": 1489276800, - "a": 1323, - "d": 520, - "c": 18 - }, - { - "w": 1489881600, - "a": 1408, - "d": 1155, - "c": 10 - }, - { - "w": 1490486400, - "a": 4303, - "d": 3904, - "c": 10 - }, - { - "w": 1491091200, - "a": 2275, - "d": 326, - "c": 13 - }, - { - "w": 1491696000, - "a": 37, - "d": 10, - "c": 1 - }, - { - "w": 1492300800, - "a": 406, - "d": 143, - "c": 7 - }, - { - "w": 1492905600, - "a": 3533, - "d": 1287, - "c": 7 - }, - { - "w": 1493510400, - "a": 1038, - "d": 235, - "c": 8 - }, - { - "w": 1494115200, - "a": 246, - "d": 1033, - "c": 6 - }, - { - "w": 1494720000, - "a": 171, - "d": 53, - "c": 4 - }, - { - "w": 1495324800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1495929600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1496534400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497139200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1497744000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498348800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1498953600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1499558400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500163200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1500768000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501372800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1501977600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1502582400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503187200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1503792000, - "a": 3351, - "d": 973, - "c": 14 - }, - { - "w": 1504396800, - "a": 5016, - "d": 3100, - "c": 6 - }, - { - "w": 1505001600, - "a": 53, - "d": 34, - "c": 1 - }, - { - "w": 1505606400, - "a": 995, - "d": 438, - "c": 3 - }, - { - "w": 1506211200, - "a": 43, - "d": 40, - "c": 2 - }, - { - "w": 1506816000, - "a": 2242, - "d": 1744, - "c": 5 - }, - { - "w": 1507420800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1508025600, - "a": 67, - "d": 14, - "c": 2 - }, - { - "w": 1508630400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1509235200, - "a": 62, - "d": 8, - "c": 2 - }, - { - "w": 1509840000, - "a": 9, - "d": 1, - "c": 1 - }, - { - "w": 1510444800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511049600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1511654400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512259200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1512864000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1513468800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514073600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1514678400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515283200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1515888000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1516492800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517097600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1517702400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518307200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1518912000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1519516800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520121600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1520726400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521331200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1521936000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1522540800, - "a": 5, - "d": 0, - "c": 1 - }, - { - "w": 1523145600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1523750400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524355200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1524960000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1525564800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526169600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1526774400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527379200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1527984000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1528588800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1529193600, - "a": 1, - "d": 1, - "c": 1 - }, - { - "w": 1529798400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1530403200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531008000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1531612800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532217600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1532822400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1533427200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534032000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1534636800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535241600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1535846400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1536451200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537056000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1537660800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538265600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1538870400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1539475200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540080000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1540684800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541289600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1541894400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1542499200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543104000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1543708800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544313600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1544918400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1545523200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546128000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1546732800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547337600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1547942400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1548547200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549152000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1549756800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550361600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1550966400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1551571200, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552176000, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1552780800, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553385600, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1553990400, - "a": 0, - "d": 0, - "c": 0 - }, - { - "w": 1554595200, - "a": 0, - "d": 0, - "c": 0 - } - ], - "author": { - "login": "abarth", - "id": 112007, - "node_id": "MDQ6VXNlcjExMjAwNw==", - "avatar_url": "https://avatars3.githubusercontent.com/u/112007?v=4", - "gravatar_id": "", - "url": "https://api.github.com/users/abarth", - "html_url": "https://github.com/abarth", - "followers_url": "https://api.github.com/users/abarth/followers", - "following_url": "https://api.github.com/users/abarth/following{/other_user}", - "gists_url": "https://api.github.com/users/abarth/gists{/gist_id}", - "starred_url": "https://api.github.com/users/abarth/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/abarth/subscriptions", - "organizations_url": "https://api.github.com/users/abarth/orgs", - "repos_url": "https://api.github.com/users/abarth/repos", - "events_url": "https://api.github.com/users/abarth/events{/privacy}", - "received_events_url": "https://api.github.com/users/abarth/received_events", - "type": "User", - "site_admin": false - } - } -] diff --git a/web/github_dataviz/github_data/forks.tsv b/web/github_dataviz/github_data/forks.tsv deleted file mode 100644 index f65d01de3..000000000 --- a/web/github_dataviz/github_data/forks.tsv +++ /dev/null @@ -1,175 +0,0 @@ -51 1 -54 14 -55 19 -56 11 -57 7 -58 2 -59 2 -60 4 -61 2 -62 3 -63 6 -64 2 -65 6 -66 2 -67 4 -68 5 -69 3 -70 2 -71 3 -72 3 -73 6 -75 3 -76 2 -77 6 -78 1 -79 2 -80 5 -81 4 -82 7 -83 6 -85 2 -86 1 -87 4 -88 2 -89 3 -90 1 -91 3 -92 1 -93 3 -94 4 -95 15 -96 11 -97 6 -98 1 -99 2 -100 2 -101 3 -102 2 -103 2 -104 1 -105 5 -106 6 -107 8 -108 7 -109 7 -110 4 -111 5 -112 3 -113 5 -114 2 -115 8 -116 7 -117 5 -118 5 -119 8 -120 6 -121 6 -122 5 -123 6 -124 6 -125 4 -126 5 -127 7 -128 6 -129 4 -130 4 -131 3 -132 5 -133 18 -134 9 -135 16 -136 14 -137 5 -138 6 -139 12 -140 8 -141 9 -142 9 -143 2 -144 9 -145 11 -146 7 -147 7 -148 2 -149 10 -150 13 -151 12 -152 61 -153 35 -154 15 -155 20 -156 18 -157 10 -158 8 -159 17 -160 12 -161 14 -162 21 -163 12 -164 21 -165 21 -166 10 -167 3 -171 9 -172 17 -173 14 -174 33 -175 274 -176 154 -177 111 -178 96 -179 65 -180 50 -181 65 -182 67 -183 68 -184 46 -185 87 -186 68 -187 85 -188 65 -189 73 -190 66 -191 176 -192 156 -193 109 -194 95 -195 87 -196 68 -197 98 -198 65 -199 82 -200 51 -201 68 -202 54 -203 66 -204 96 -205 62 -206 68 -207 60 -208 71 -209 74 -210 69 -211 78 -212 72 -213 66 -214 68 -215 237 -216 193 -217 117 -218 96 -219 137 -220 116 -221 133 -222 122 -223 85 -224 69 -225 115 -226 138 -227 139 -228 168 -229 145 -230 152 -231 139 -232 8 diff --git a/web/github_dataviz/github_data/pull_requests.tsv b/web/github_dataviz/github_data/pull_requests.tsv deleted file mode 100644 index 2ab33cabb..000000000 --- a/web/github_dataviz/github_data/pull_requests.tsv +++ /dev/null @@ -1,177 +0,0 @@ -54 25 -55 122 -56 146 -57 90 -58 146 -59 130 -60 103 -61 21 -62 22 -63 88 -64 108 -65 92 -66 94 -67 116 -68 174 -69 124 -70 173 -71 146 -72 179 -73 142 -74 138 -75 165 -76 160 -77 114 -78 122 -79 133 -80 124 -81 110 -82 141 -83 128 -84 119 -85 117 -86 90 -87 124 -88 71 -89 37 -90 38 -91 71 -92 92 -93 106 -94 98 -95 117 -96 90 -97 80 -98 55 -99 104 -100 131 -101 101 -102 92 -103 98 -104 137 -105 113 -106 134 -107 103 -108 105 -109 75 -110 100 -111 70 -112 47 -113 10 -115 73 -116 137 -117 78 -118 178 -119 191 -120 206 -121 205 -122 138 -123 160 -124 149 -125 167 -126 130 -127 126 -128 175 -129 87 -130 148 -131 129 -132 181 -133 194 -134 124 -135 114 -136 101 -137 107 -138 157 -139 127 -140 100 -141 39 -142 106 -143 105 -144 52 -145 77 -146 60 -147 43 -148 103 -149 127 -150 88 -151 98 -152 84 -153 104 -154 93 -155 74 -156 119 -157 72 -158 101 -159 110 -160 72 -161 95 -162 129 -163 139 -164 148 -165 105 -166 9 -167 4 -171 44 -172 160 -173 146 -174 92 -175 117 -176 156 -177 151 -178 140 -179 110 -180 48 -181 99 -182 128 -183 140 -184 149 -185 127 -186 100 -187 76 -188 131 -189 103 -190 125 -191 108 -192 120 -193 82 -194 125 -195 123 -196 166 -197 226 -198 178 -199 216 -200 148 -201 201 -202 219 -203 166 -204 157 -205 217 -206 246 -207 190 -208 221 -209 209 -210 172 -211 221 -212 183 -213 91 -214 104 -215 52 -216 165 -217 157 -218 99 -219 213 -220 246 -221 260 -222 169 -223 174 -224 199 -225 233 -226 190 -227 233 -228 181 -229 257 -230 240 -231 284 -232 214 -233 271 -234 48 diff --git a/web/github_dataviz/github_data/stars.tsv b/web/github_dataviz/github_data/stars.tsv deleted file mode 100644 index e9237339f..000000000 --- a/web/github_dataviz/github_data/stars.tsv +++ /dev/null @@ -1,206 +0,0 @@ -22 8 -23 4 -24 3 -25 2 -26 1 -27 356 -28 1108 -29 118 -30 36 -31 28 -32 19 -33 24 -34 11 -35 6 -36 20 -37 14 -38 17 -39 1 -40 3 -43 1 -44 2 -47 2 -48 1 -50 1 -51 1 -52 1 -53 5 -54 85 -55 68 -56 54 -57 116 -58 43 -59 36 -60 24 -61 25 -62 26 -63 31 -64 28 -65 23 -66 19 -67 15 -68 12 -69 22 -70 15 -71 21 -72 18 -73 19 -74 11 -75 15 -76 8 -77 7 -78 10 -79 3 -80 10 -81 9 -82 30 -83 17 -84 13 -85 12 -86 4 -87 25 -88 58 -89 7 -90 13 -91 8 -92 10 -93 11 -94 38 -95 112 -96 44 -97 22 -98 36 -99 25 -100 10 -101 32 -102 11 -103 12 -104 20 -105 107 -106 38 -107 33 -108 41 -109 21 -110 27 -111 17 -112 22 -113 10 -114 9 -115 54 -116 32 -117 35 -118 26 -119 19 -120 30 -121 83 -122 30 -123 33 -124 31 -125 28 -126 13 -127 77 -128 41 -129 27 -130 36 -131 26 -132 26 -133 248 -134 166 -135 138 -136 91 -137 63 -138 61 -139 169 -140 144 -141 69 -142 45 -143 45 -144 43 -145 59 -146 50 -147 86 -148 114 -149 96 -150 93 -151 74 -152 944 -153 352 -154 130 -155 159 -156 111 -157 105 -158 64 -159 113 -160 121 -161 150 -162 167 -163 120 -164 208 -165 151 -166 92 -167 96 -168 116 -169 108 -170 139 -171 156 -172 162 -173 108 -174 353 -175 4210 -176 2601 -177 1227 -178 798 -179 594 -180 464 -181 633 -182 514 -183 400 -184 388 -185 717 -186 644 -187 646 -188 526 -189 756 -190 457 -191 2248 -192 1649 -193 906 -194 794 -195 702 -196 591 -197 725 -198 584 -199 502 -200 477 -201 506 -202 488 -203 398 -204 738 -205 549 -206 339 -207 455 -208 398 -209 452 -210 424 -211 485 -212 415 -213 411 -214 493 -215 2359 -216 1458 -217 860 -218 764 -219 716 -220 741 -221 999 -222 904 -223 669 -224 430 -225 729 -226 793 -227 976 -228 1032 -229 973 -230 998 -231 1032 -232 87 diff --git a/web/github_dataviz/lib/catmull.dart b/web/github_dataviz/lib/catmull.dart deleted file mode 100644 index 6dc2ee9be..000000000 --- a/web/github_dataviz/lib/catmull.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:github_dataviz/mathutils.dart'; - -class ControlPointAndValue { - late int point; - double? value; - - ControlPointAndValue() { - value = 0; - point = 2; - } -} - -class CatmullInterpolator implements Interpolator { - List controlPoints; - - CatmullInterpolator(this.controlPoints); - - @override - double get(double v) { - for (int i = 2; i < controlPoints.length - 1; i++) { - if (controlPoints[i].x >= v) { - double t = (v - controlPoints[i - 1].x) / - (controlPoints[i].x - controlPoints[i - 1].x); - double p0 = controlPoints[i - 2].y; - double p1 = controlPoints[i - 1].y; - double p2 = controlPoints[i].y; - double p3 = controlPoints[i + 1].y; - return 0.5 * - ((2 * p1) + - (p2 - p0) * t + - (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t + - (3 * p1 - p0 - 3 * p2 + p3) * t * t * t); - } - } - // Will be unreachable if the control points were set up right - return 0; - } - - ControlPointAndValue progressiveGet(ControlPointAndValue cpv) { - double? v = cpv.value; - for (int i = cpv.point; i < controlPoints.length - 1; i++) { - if (controlPoints[i].x >= v!) { - double t = (v - controlPoints[i - 1].x) / - (controlPoints[i].x - controlPoints[i - 1].x); - double p0 = controlPoints[i - 2].y; - double p1 = controlPoints[i - 1].y; - double p2 = controlPoints[i].y; - double p3 = controlPoints[i + 1].y; - cpv.value = 0.5 * - ((2 * p1) + - (p2 - p0) * t + - (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t + - (3 * p1 - p0 - 3 * p2 + p3) * t * t * t); - cpv.point = i; - return cpv; - } - } - // Will be unreachable if the control points were set up right - return cpv; - } - - static void test() { - final controlPoints = []; - controlPoints.add(Point2D(-1, 1)); - controlPoints.add(Point2D(0, 1)); - controlPoints.add(Point2D(1, -1)); - controlPoints.add(Point2D(3, 4)); - controlPoints.add(Point2D(10, -2)); - controlPoints.add(Point2D(11, -2)); - CatmullInterpolator catmull = CatmullInterpolator(controlPoints); - print(catmull.get(0)); - print(catmull.get(1)); - print(catmull.get(2)); - print(catmull.get(5)); - print(catmull.get(7)); - print(catmull.get(8)); - print(catmull.get(10)); - } -} diff --git a/web/github_dataviz/lib/constants.dart b/web/github_dataviz/lib/constants.dart deleted file mode 100644 index dceba4e27..000000000 --- a/web/github_dataviz/lib/constants.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'package:flutter/material.dart'; - -class Constants { - static const Color backgroundColor = Color(0xFF000020); - static const Color timelineLineColor = Color(0x60FFFFFF); - static const Color milestoneColor = Color(0x40FFFFFF); - static const Color milestoneTimelineColor = Colors.white; -} diff --git a/web/github_dataviz/lib/data/contribution_data.dart b/web/github_dataviz/lib/data/contribution_data.dart deleted file mode 100644 index 9ef6abf5e..000000000 --- a/web/github_dataviz/lib/data/contribution_data.dart +++ /dev/null @@ -1,14 +0,0 @@ -class ContributionData { - int weekTime; - int add; - int delete; - int change; - - ContributionData(this.weekTime, this.add, this.delete, this.change); - - static ContributionData fromJson(Map jsonMap) { - ContributionData data = ContributionData( - jsonMap['w'], jsonMap['a'], jsonMap['d'], jsonMap['c']); - return data; - } -} diff --git a/web/github_dataviz/lib/data/data_series.dart b/web/github_dataviz/lib/data/data_series.dart deleted file mode 100644 index effdb6b91..000000000 --- a/web/github_dataviz/lib/data/data_series.dart +++ /dev/null @@ -1,6 +0,0 @@ -class DataSeries { - String label; - List series; - - DataSeries(this.label, this.series); -} diff --git a/web/github_dataviz/lib/data/stat_for_week.dart b/web/github_dataviz/lib/data/stat_for_week.dart deleted file mode 100644 index 89350d57e..000000000 --- a/web/github_dataviz/lib/data/stat_for_week.dart +++ /dev/null @@ -1,6 +0,0 @@ -class StatForWeek { - int weekIndex; - int stat; - - StatForWeek(this.weekIndex, this.stat); -} diff --git a/web/github_dataviz/lib/data/user.dart b/web/github_dataviz/lib/data/user.dart deleted file mode 100644 index 7533e51e1..000000000 --- a/web/github_dataviz/lib/data/user.dart +++ /dev/null @@ -1,12 +0,0 @@ -class User { - int id; - String username; - String avatarUrl; - - User(this.id, this.username, this.avatarUrl); - - static User fromJson(Map jsonMap) { - User user = User(jsonMap['id'], jsonMap['login'], jsonMap['avatar_url']); - return user; - } -} diff --git a/web/github_dataviz/lib/data/user_contribution.dart b/web/github_dataviz/lib/data/user_contribution.dart deleted file mode 100644 index 49611ccce..000000000 --- a/web/github_dataviz/lib/data/user_contribution.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:github_dataviz/data/contribution_data.dart'; -import 'package:github_dataviz/data/user.dart'; - -class UserContribution { - User user; - List contributions; - - UserContribution(this.user, this.contributions); - - static UserContribution fromJson(Map jsonMap) { - List contributionList = (jsonMap['weeks'] as List) - .map((e) => ContributionData.fromJson(e)) - .toList(); - var userContribution = - UserContribution(User.fromJson(jsonMap['author']), contributionList); - return userContribution; - } -} diff --git a/web/github_dataviz/lib/data/week_label.dart b/web/github_dataviz/lib/data/week_label.dart deleted file mode 100644 index 37d1baced..000000000 --- a/web/github_dataviz/lib/data/week_label.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:intl/intl.dart'; - -class WeekLabel { - int? weekNum; - String label; - - WeekLabel(this.weekNum, this.label); - - WeekLabel.forDate(DateTime date, this.label) { - int year = getYear(date); - int weekOfYearNum = getWeekNumber(date); - weekNum = 9 + ((year - 2015) * 52) + weekOfYearNum; - } - - int getYear(DateTime date) { - return int.parse(DateFormat('y').format(date)); - } - - int getWeekNumber(DateTime date) { - int dayOfYear = int.parse(DateFormat('D').format(date)); - return ((dayOfYear - date.weekday + 10) / 7).floor(); - } -} diff --git a/web/github_dataviz/lib/layered_chart.dart b/web/github_dataviz/lib/layered_chart.dart deleted file mode 100644 index ea89b4892..000000000 --- a/web/github_dataviz/lib/layered_chart.dart +++ /dev/null @@ -1,336 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -import 'package:github_dataviz/catmull.dart'; -import 'package:github_dataviz/constants.dart'; -import 'package:github_dataviz/data/data_series.dart'; -import 'package:github_dataviz/data/week_label.dart'; -import 'package:github_dataviz/mathutils.dart'; - -class LayeredChart extends StatefulWidget { - final List dataToPlot; - final List milestones; - final double animationValue; - - const LayeredChart(this.dataToPlot, this.milestones, this.animationValue, - {Key? key}) - : super(key: key); - - @override - State createState() { - return _LayeredChartState(); - } -} - -class _LayeredChartState extends State { - late List paths; - late List capPaths; - late List maxValues; - late double theta; - late double graphHeight; - late List labelPainter; - late List milestonePainter; - Size? lastSize; - - void buildPaths( - Size size, - List dataToPlot, - List milestones, - int numPoints, - double graphGap, - double margin, - double capTheta, - double capSize) { - double screenRatio = size.width / size.height; - double degrees = MathUtils.clampedMap(screenRatio, 0.5, 2.5, 50, 5); - theta = pi * degrees / 180; - graphHeight = MathUtils.clampedMap(screenRatio, 0.5, 2.5, 50, 150); - - int m = dataToPlot.length; - paths = []; - capPaths = []; - maxValues = []; - for (int i = 0; i < m; i++) { - int n = dataToPlot[i].series.length; - maxValues.add(0); - for (int j = 0; j < n; j++) { - double v = dataToPlot[i].series[j].toDouble(); - if (v > maxValues[i]) { - maxValues[i] = v; - } - } - } - double totalGap = m * graphGap; - double xIndent = totalGap / tan(capTheta); - double startX = margin + xIndent; - double endX = size.width - margin; - double startY = size.height; - double endY = startY - (endX - startX) * tan(theta); - double xWidth = (endX - startX) / numPoints; - double capRangeX = capSize * cos(capTheta); - double tanCapTheta = tan(capTheta); - final curvePoints = []; - for (int i = 0; i < m; i++) { - List series = dataToPlot[i].series; - int n = series.length; - final controlPoints = []; - controlPoints.add(Point2D(-1, 0)); - double last = 0; - for (int j = 0; j < n; j++) { - double v = series[j].toDouble(); - controlPoints.add(Point2D(j.toDouble(), v)); - last = v; - } - controlPoints.add(Point2D(n.toDouble(), last)); - CatmullInterpolator curve = CatmullInterpolator(controlPoints); - ControlPointAndValue cpv = ControlPointAndValue(); - for (int j = 0; j < numPoints; j++) { - cpv.value = MathUtils.map( - j.toDouble(), 0, (numPoints - 1).toDouble(), 0, (n - 1).toDouble()); - curve.progressiveGet(cpv); - curvePoints.add(MathUtils.map( - max(0, cpv.value!), 0, maxValues[i].toDouble(), 0, graphHeight)); - } - paths.add(Path()); - capPaths.add(Path()); - paths[i].moveTo(startX, startY); - capPaths[i].moveTo(startX, startY); - for (int j = 0; j < numPoints; j++) { - double v = curvePoints[j]; - int k = j + 1; - double xDist = xWidth; - double capV = v; - while (k < numPoints && xDist <= capRangeX) { - double cy = curvePoints[k] + xDist * tanCapTheta; - capV = max(capV, cy); - k++; - xDist += xWidth; - } - double x = MathUtils.map( - j.toDouble(), 0, (numPoints - 1).toDouble(), startX, endX); - double baseY = MathUtils.map( - j.toDouble(), 0, (numPoints - 1).toDouble(), startY, endY); - double y = baseY - v; - double cY = baseY - capV; - paths[i].lineTo(x, y); - if (j == 0) { - int k = capRangeX ~/ xWidth; - double mx = MathUtils.map( - -k.toDouble(), 0, (numPoints - 1).toDouble(), startX, endX); - double my = MathUtils.map( - -k.toDouble(), 0, (numPoints - 1).toDouble(), startY, endY) - - capV; - capPaths[i].lineTo(mx, my); - } - capPaths[i].lineTo(x, cY); - } - paths[i].lineTo(endX, endY); - paths[i].lineTo(endX, endY + 1); - paths[i].lineTo(startX, startY + 1); - paths[i].close(); - capPaths[i].lineTo(endX, endY); - capPaths[i].lineTo(endX, endY + 1); - capPaths[i].lineTo(startX, startY + 1); - capPaths[i].close(); - } - labelPainter = []; - for (int i = 0; i < dataToPlot.length; i++) { - TextSpan span = TextSpan( - style: const TextStyle( - color: Color.fromARGB(255, 255, 255, 255), fontSize: 12), - text: dataToPlot[i].label.toUpperCase()); - TextPainter tp = TextPainter( - text: span, - textAlign: TextAlign.left, - textDirection: TextDirection.ltr); - tp.layout(); - labelPainter.add(tp); - } - milestonePainter = []; - for (int i = 0; i < milestones.length; i++) { - TextSpan span = TextSpan( - style: const TextStyle( - color: Color.fromARGB(255, 255, 255, 255), fontSize: 10), - text: milestones[i].label.toUpperCase()); - TextPainter tp = TextPainter( - text: span, - textAlign: TextAlign.left, - textDirection: TextDirection.ltr); - tp.layout(); - milestonePainter.add(tp); - } - lastSize = Size(size.width, size.height); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Constants.backgroundColor, - child: CustomPaint( - foregroundPainter: _ChartPainter(this, widget.dataToPlot, - widget.milestones, 80, 50, 50, 12, 500, widget.animationValue), - child: Container())); - } -} - -class _ChartPainter extends CustomPainter { - static List colors = [ - Colors.red[900], - const Color(0xffc4721a), - Colors.lime[900], - Colors.green[900], - Colors.blue[900], - Colors.purple[900], - ]; - static List capColors = [ - Colors.red[500], - Colors.amber[500], - Colors.lime[500], - Colors.green[500], - Colors.blue[500], - Colors.purple[500], - ]; - - List dataToPlot; - List milestones; - - double margin; - double graphGap; - late double capTheta; - double capSize; - int numPoints; - double amount = 1.0; - - late Paint pathPaint; - late Paint capPaint; - late Paint textPaint; - late Paint milestonePaint; - late Paint linePaint; - late Paint fillPaint; - - _LayeredChartState state; - - _ChartPainter( - this.state, - this.dataToPlot, - this.milestones, - this.margin, - this.graphGap, - double capDegrees, - this.capSize, - this.numPoints, - this.amount) { - capTheta = pi * capDegrees / 180; - pathPaint = Paint(); - pathPaint.style = PaintingStyle.fill; - capPaint = Paint(); - capPaint.style = PaintingStyle.fill; - textPaint = Paint(); - textPaint.color = const Color(0xFFFFFFFF); - milestonePaint = Paint(); - milestonePaint.color = Constants.milestoneColor; - milestonePaint.style = PaintingStyle.stroke; - milestonePaint.strokeWidth = 2; - linePaint = Paint(); - linePaint.style = PaintingStyle.stroke; - linePaint.strokeWidth = 0.5; - fillPaint = Paint(); - fillPaint.style = PaintingStyle.fill; - fillPaint.color = const Color(0xFF000000); - } - - @override - void paint(Canvas canvas, Size size) { - if (dataToPlot.isEmpty) { - return; - } - - if (state.lastSize == null || - size.width != state.lastSize!.width || - size.height != state.lastSize!.height) { - print('Building paths, lastsize = ${state.lastSize}'); - state.buildPaths(size, dataToPlot, milestones, numPoints, graphGap, - margin, capTheta, capSize); - } - int m = dataToPlot.length; - int numWeeks = dataToPlot[0].series.length; - // How far along to draw - double totalGap = m * graphGap; - double xIndent = totalGap / tan(capTheta); - double dx = xIndent / (m - 1); - double startX = margin + xIndent; - double endX = size.width - margin; - double startY = size.height; - double endY = startY - (endX - startX) * tan(state.theta); - // MILESTONES - { - for (int i = 0; i < milestones.length; i++) { - WeekLabel milestone = milestones[i]; - double p = (milestone.weekNum!.toDouble() / numWeeks) + (1 - amount); - if (p < 1) { - double x1 = MathUtils.map(p, 0, 1, startX, endX); - double y1 = MathUtils.map(p, 0, 1, startY, endY); - double x2 = x1 - xIndent; - double y2 = y1 - graphGap * (m - 1); - x1 += dx * 0.5; - y1 += graphGap * 0.5; - double textY = y1 + 5; - double textX = x1 + 5 * tan(capTheta); - canvas.drawLine(Offset(x1, y1), Offset(x2, y2), milestonePaint); - canvas.save(); - TextPainter tp = state.milestonePainter[i]; - canvas.translate(textX, textY); - canvas.skew(tan(capTheta * 1.0), -tan(state.theta)); - canvas.translate(-tp.width / 2, 0); - tp.paint(canvas, const Offset(0, 0)); - canvas.restore(); - } - } - } - for (int i = m - 1; i >= 0; i--) { - canvas.save(); - canvas.translate(-dx * i, -graphGap * i); - - { - // TEXT LABELS - canvas.save(); - double textPosition = 0.2; - double textX = MathUtils.map(textPosition, 0, 1, startX, endX); - double textY = MathUtils.map(textPosition, 0, 1, startY, endY) + 5; - canvas.translate(textX, textY); - TextPainter tp = state.labelPainter[i]; - canvas.skew(0, -tan(state.theta)); - canvas.drawRect( - Rect.fromLTWH(-1, -1, tp.width + 2, tp.height + 2), fillPaint); - tp.paint(canvas, const Offset(0, 0)); - canvas.restore(); - } - - linePaint.color = capColors[i]!; - canvas.drawLine(Offset(startX, startY), Offset(endX, endY), linePaint); - - Path clipPath = Path(); - clipPath.moveTo(startX - capSize, startY + 11); - clipPath.lineTo(endX, endY + 1); - clipPath.lineTo(endX, endY - state.graphHeight - capSize); - clipPath.lineTo(startX - capSize, startY - state.graphHeight - capSize); - clipPath.close(); - canvas.clipPath(clipPath); - - pathPaint.color = colors[i]!; - capPaint.color = capColors[i]!; - double offsetX = MathUtils.map(1 - amount, 0, 1, startX, endX); - double offsetY = MathUtils.map(1 - amount, 0, 1, startY, endY); - canvas.translate(offsetX - startX, offsetY - startY); - canvas.drawPath(state.capPaths[i], capPaint); - canvas.drawPath(state.paths[i], pathPaint); - - canvas.restore(); - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) { - return true; - } -} diff --git a/web/github_dataviz/lib/main.dart b/web/github_dataviz/lib/main.dart deleted file mode 100644 index c19df527f..000000000 --- a/web/github_dataviz/lib/main.dart +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:collection'; -import 'dart:convert'; - -import 'package:http/http.dart' as http; - -import 'package:flutter/material.dart'; -import 'package:github_dataviz/constants.dart'; -import 'package:github_dataviz/data/contribution_data.dart'; -import 'package:github_dataviz/data/data_series.dart'; -import 'package:github_dataviz/data/stat_for_week.dart'; -import 'package:github_dataviz/data/user_contribution.dart'; -import 'package:github_dataviz/data/week_label.dart'; -import 'package:github_dataviz/layered_chart.dart'; -import 'package:github_dataviz/mathutils.dart'; -import 'package:github_dataviz/timeline.dart'; - -class MainLayout extends StatefulWidget { - const MainLayout({Key? key}) : super(key: key); - - @override - State createState() => _MainLayoutState(); -} - -class _MainLayoutState extends State with TickerProviderStateMixin { - AnimationController? _animation; - List? contributions; - List? starsByWeek; - List? forksByWeek; - List? pushesByWeek; - List? issueCommentsByWeek; - List? pullRequestActivityByWeek; - late List weekLabels; - - static const double earlyInterpolatorFraction = 0.8; - static final EarlyInterpolator interpolator = - EarlyInterpolator(earlyInterpolatorFraction); - double animationValue = 1.0; - double interpolatedAnimationValue = 1.0; - bool timelineOverride = false; - - @override - void initState() { - super.initState(); - - createAnimation(0); - - weekLabels = []; - weekLabels.add(WeekLabel.forDate(DateTime(2019, 2, 26), 'v1.2')); - weekLabels.add(WeekLabel.forDate(DateTime(2018, 12, 4), 'v1.0')); -// weekLabels.add(WeekLabel.forDate(new DateTime(2018, 9, 19), "Preview 2")); - weekLabels.add(WeekLabel.forDate(DateTime(2018, 6, 21), 'Preview 1')); -// weekLabels.add(WeekLabel.forDate(new DateTime(2018, 5, 7), "Beta 3")); - weekLabels.add(WeekLabel.forDate(DateTime(2018, 2, 27), 'Beta 1')); - weekLabels.add(WeekLabel.forDate(DateTime(2017, 5, 1), 'Alpha')); - weekLabels.add(WeekLabel(48, 'Repo Made Public')); - - loadGitHubData(); - } - - void createAnimation(double startValue) { - _animation?.dispose(); - _animation = AnimationController( - value: startValue, - duration: const Duration(milliseconds: 14400), - vsync: this, - )..repeat(); - _animation!.addListener(() { - setState(() { - if (!timelineOverride) { - animationValue = _animation!.value; - interpolatedAnimationValue = interpolator.get(animationValue); - } - }); - }); - } - - @override - Widget build(BuildContext context) { - // Combined contributions data - List dataToPlot = []; - if (contributions != null) { - List series = []; - for (UserContribution userContrib in contributions!) { - for (int i = 0; i < userContrib.contributions.length; i++) { - ContributionData data = userContrib.contributions[i]; - if (series.length > i) { - series[i] = series[i] + data.add; - } else { - series.add(data.add); - } - } - } - dataToPlot.add(DataSeries('Added Lines', series)); - } - - if (starsByWeek != null) { - dataToPlot - .add(DataSeries('Stars', starsByWeek!.map((e) => e.stat).toList())); - } - - if (forksByWeek != null) { - dataToPlot - .add(DataSeries('Forks', forksByWeek!.map((e) => e.stat).toList())); - } - - if (pushesByWeek != null) { - dataToPlot - .add(DataSeries('Pushes', pushesByWeek!.map((e) => e.stat).toList())); - } - - if (issueCommentsByWeek != null) { - dataToPlot.add(DataSeries( - 'Issue Comments', issueCommentsByWeek!.map((e) => e.stat).toList())); - } - - if (pullRequestActivityByWeek != null) { - dataToPlot.add(DataSeries('Pull Request Activity', - pullRequestActivityByWeek!.map((e) => e.stat).toList())); - } - - LayeredChart layeredChart = - LayeredChart(dataToPlot, weekLabels, interpolatedAnimationValue); - - const double timelinePadding = 60.0; - - var timeline = Timeline( - numWeeks: dataToPlot.isNotEmpty ? dataToPlot.last.series.length : 0, - animationValue: interpolatedAnimationValue, - weekLabels: weekLabels, - mouseDownCallback: (double xFraction) { - setState(() { - timelineOverride = true; - _animation?.stop(); - interpolatedAnimationValue = xFraction; - }); - }, - mouseMoveCallback: (double xFraction) { - setState(() { - interpolatedAnimationValue = xFraction; - }); - }, - mouseUpCallback: () { - setState(() { - timelineOverride = false; - createAnimation( - interpolatedAnimationValue * earlyInterpolatorFraction); - }); - }, - ); - - Column mainColumn = Column( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - Expanded(child: layeredChart), - Padding( - padding: const EdgeInsets.only( - left: timelinePadding, - right: timelinePadding, - bottom: timelinePadding), - child: timeline, - ), - ], - ); - - return Container( - color: Constants.backgroundColor, - child: - Directionality(textDirection: TextDirection.ltr, child: mainColumn), - ); - } - - @override - void dispose() { - _animation?.dispose(); - super.dispose(); - } - - Future loadGitHubData() async { - String contributorsJsonStr = - (await http.get(Uri.parse('assets/github_data/contributors.json'))) - .body; - List jsonObjs = jsonDecode(contributorsJsonStr) as List; - List contributionList = - jsonObjs.map((e) => UserContribution.fromJson(e)).toList(); - print( - 'Loaded ${contributionList.length} code contributions to /flutter/flutter repo.'); - - int numWeeksTotal = contributionList[0].contributions.length; - - String starsByWeekStr = - (await http.get(Uri.parse('assets/github_data/stars.tsv'))).body; - List starsByWeekLoaded = - summarizeWeeksFromTSV(starsByWeekStr, numWeeksTotal); - - String forksByWeekStr = - (await http.get(Uri.parse('assets/github_data/forks.tsv'))).body; - List forksByWeekLoaded = - summarizeWeeksFromTSV(forksByWeekStr, numWeeksTotal); - - String commitsByWeekStr = - (await http.get(Uri.parse('assets/github_data/commits.tsv'))).body; - List commitsByWeekLoaded = - summarizeWeeksFromTSV(commitsByWeekStr, numWeeksTotal); - - String commentsByWeekStr = - (await http.get(Uri.parse('assets/github_data/comments.tsv'))).body; - List commentsByWeekLoaded = - summarizeWeeksFromTSV(commentsByWeekStr, numWeeksTotal); - - String pullRequestActivityByWeekStr = - (await http.get(Uri.parse('assets/github_data/pull_requests.tsv'))) - .body; - List pullRequestActivityByWeekLoaded = - summarizeWeeksFromTSV(pullRequestActivityByWeekStr, numWeeksTotal); - - setState(() { - contributions = contributionList; - starsByWeek = starsByWeekLoaded; - forksByWeek = forksByWeekLoaded; - pushesByWeek = commitsByWeekLoaded; - issueCommentsByWeek = commentsByWeekLoaded; - pullRequestActivityByWeek = pullRequestActivityByWeekLoaded; - }); - } - - List summarizeWeeksFromTSV( - String statByWeekStr, int numWeeksTotal) { - List loadedStats = []; - HashMap statMap = HashMap(); - statByWeekStr.split('\n').forEach((s) { - List split = s.split('\t'); - if (split.length == 2) { - int weekNum = int.parse(split[0]); - statMap[weekNum] = StatForWeek(weekNum, int.parse(split[1])); - } - }); - print('Loaded ${statMap.length} weeks.'); - - // Convert into a list by week, but fill in empty weeks with 0 - for (int i = 0; i < numWeeksTotal; i++) { - StatForWeek? starsForWeek = statMap[i]; - if (starsForWeek == null) { - loadedStats.add(StatForWeek(i, 0)); - } else { - loadedStats.add(starsForWeek); - } - } - return loadedStats; - } -} - -void main() { - runApp(const Center(child: MainLayout())); -} diff --git a/web/github_dataviz/lib/mathutils.dart b/web/github_dataviz/lib/mathutils.dart deleted file mode 100644 index 854662af1..000000000 --- a/web/github_dataviz/lib/mathutils.dart +++ /dev/null @@ -1,48 +0,0 @@ -abstract class Interpolator { - double get(double x); -} - -class EarlyInterpolator implements Interpolator { - double amount; - - EarlyInterpolator(this.amount); - - @override - double get(double x) { - if (x >= amount) { - return 1; - } else { - return MathUtils.map(x, 0, amount, 0, 1); - } - } -} - -class Point2D { - double x, y; - - Point2D(this.x, this.y); -} - -class MathUtils { - static double map(double x, double a, double b, double u, double v) { - double p = (x - a) / (b - a); - return u + p * (v - u); - } - - static double clampedMap(double x, double a, double b, double u, double v) { - if (x <= a) { - return u; - } else if (x >= b) { - return v; - } else { - double p = (x - a) / (b - a); - return u + p * (v - u); - } - } - - static double clamp(double x, double a, double b) { - if (x < a) return a; - if (x > b) return b; - return x; - } -} diff --git a/web/github_dataviz/lib/timeline.dart b/web/github_dataviz/lib/timeline.dart deleted file mode 100644 index 6562559a5..000000000 --- a/web/github_dataviz/lib/timeline.dart +++ /dev/null @@ -1,227 +0,0 @@ -import 'dart:collection'; - -import 'package:flutter/material.dart'; -import 'package:github_dataviz/constants.dart'; -import 'package:github_dataviz/data/week_label.dart'; -import 'package:github_dataviz/mathutils.dart'; - -typedef MouseDownCallback = void Function(double xFraction); -typedef MouseMoveCallback = void Function(double xFraction); -typedef MouseUpCallback = void Function(); - -class Timeline extends StatefulWidget { - final int numWeeks; - final double animationValue; - final List weekLabels; - - final MouseDownCallback? mouseDownCallback; - final MouseMoveCallback? mouseMoveCallback; - final MouseUpCallback? mouseUpCallback; - - const Timeline( - {required this.numWeeks, - required this.animationValue, - required this.weekLabels, - this.mouseDownCallback, - this.mouseMoveCallback, - this.mouseUpCallback, - Key? key}) - : super(key: key); - - @override - State createState() { - return _TimelineState(); - } -} - -class _TimelineState extends State { - HashMap labelPainters = HashMap(); - - @override - void initState() { - super.initState(); - for (int year = 2015; year < 2020; year++) { - String yearLabel = '$year'; - labelPainters[yearLabel] = - _makeTextPainter(Constants.timelineLineColor, yearLabel); - } - - for (var weekLabel in widget.weekLabels) { - labelPainters[weekLabel.label] = - _makeTextPainter(Constants.milestoneTimelineColor, weekLabel.label); - labelPainters['${weekLabel.label}_red'] = - _makeTextPainter(Colors.redAccent, weekLabel.label); - } - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - behavior: HitTestBehavior.translucent, - onHorizontalDragDown: (DragDownDetails details) { - final mouseDownCallback = widget.mouseDownCallback; - if (mouseDownCallback != null) { - mouseDownCallback( - _getClampedXFractionLocalCoords(context, details.globalPosition)); - } - }, - onHorizontalDragEnd: (DragEndDetails details) { - final mouseUpCallback = widget.mouseUpCallback; - if (mouseUpCallback != null) { - mouseUpCallback(); - } - }, - onHorizontalDragUpdate: (DragUpdateDetails details) { - final mouseMoveCallback = widget.mouseMoveCallback; - if (mouseMoveCallback != null) { - mouseMoveCallback( - _getClampedXFractionLocalCoords(context, details.globalPosition)); - } - }, - child: CustomPaint( - foregroundPainter: _TimelinePainter( - this, widget.numWeeks, widget.animationValue, widget.weekLabels), - child: Container( - height: 200, - )), - ); - } - - TextPainter _makeTextPainter(Color color, String label) { - TextSpan span = - TextSpan(style: TextStyle(color: color, fontSize: 12), text: label); - TextPainter tp = TextPainter( - text: span, - textAlign: TextAlign.left, - textDirection: TextDirection.ltr); - tp.layout(); - return tp; - } - - double _getClampedXFractionLocalCoords( - BuildContext context, Offset globalOffset) { - final RenderBox box = context.findRenderObject() as RenderBox; - final Offset localOffset = box.globalToLocal(globalOffset); - return MathUtils.clamp(localOffset.dx / context.size!.width, 0, 1); - } -} - -class _TimelinePainter extends CustomPainter { - _TimelineState state; - - late Paint mainLinePaint; - late Paint milestoneLinePaint; - - Color lineColor = Colors.white; - - int numWeeks; - double animationValue; - int weekYearOffset = - 9; // Week 0 in our data is 9 weeks before the year boundary (i.e. week 43) - - List weekLabels; - - int yearNumber = 2015; - - _TimelinePainter( - this.state, this.numWeeks, this.animationValue, this.weekLabels) { - mainLinePaint = Paint(); - mainLinePaint.style = PaintingStyle.stroke; - mainLinePaint.color = Constants.timelineLineColor; - milestoneLinePaint = Paint(); - milestoneLinePaint.style = PaintingStyle.stroke; - milestoneLinePaint.color = Constants.milestoneTimelineColor; - } - - @override - void paint(Canvas canvas, Size size) { - double labelHeight = 20; - double labelHeightDoubled = labelHeight * 2; - - double mainLineY = size.height / 2; - canvas.drawLine( - Offset(0, mainLineY), Offset(size.width, mainLineY), mainLinePaint); - - double currTimeX = size.width * animationValue; - canvas.drawLine( - Offset(currTimeX, labelHeightDoubled), - Offset(currTimeX, size.height - labelHeightDoubled), - milestoneLinePaint); - - { - for (int week = 0; week < numWeeks; week++) { - double lineHeight = size.height / 32; - bool isYear = false; - if ((week - 9) % 52 == 0) { - // Year - isYear = true; - lineHeight = size.height / 2; - } else if ((week - 1) % 4 == 0) { - // Month - lineHeight = size.height / 8; - } - - double currX = (week / numWeeks.toDouble()) * size.width; - if (lineHeight > 0) { - double margin = (size.height - lineHeight) / 2; - double currTimeXDiff = (currTimeX - currX) / size.width; - if (currTimeXDiff > 0) { - var mappedValue = - MathUtils.clampedMap(currTimeXDiff, 0, 0.025, 0, 1); - var lerpedColor = Color.lerp(Constants.milestoneTimelineColor, - Constants.timelineLineColor, mappedValue)!; - mainLinePaint.color = lerpedColor; - } else { - mainLinePaint.color = Constants.timelineLineColor; - } - canvas.drawLine(Offset(currX, margin), - Offset(currX, size.height - margin), mainLinePaint); - } - - if (isYear) { - var yearLabel = '$yearNumber'; - state.labelPainters[yearLabel]! - .paint(canvas, Offset(currX, size.height - labelHeight)); - yearNumber++; - } - } - } - - { - for (int i = 0; i < weekLabels.length; i++) { - WeekLabel weekLabel = weekLabels[i]; - double currX = (weekLabel.weekNum! / numWeeks.toDouble()) * size.width; - var timelineXDiff = (currTimeX - currX) / size.width; - double maxTimelineDiff = 0.08; - TextPainter textPainter = state.labelPainters[weekLabel.label]!; - if (timelineXDiff > 0 && - timelineXDiff < maxTimelineDiff && - animationValue < 1) { - var mappedValue = - MathUtils.clampedMap(timelineXDiff, 0, maxTimelineDiff, 0, 1); - var lerpedColor = Color.lerp( - Colors.redAccent, Constants.milestoneTimelineColor, mappedValue)!; - milestoneLinePaint.strokeWidth = - MathUtils.clampedMap(timelineXDiff, 0, maxTimelineDiff, 6, 1); - milestoneLinePaint.color = lerpedColor; - } else { - milestoneLinePaint.strokeWidth = 1; - milestoneLinePaint.color = Constants.milestoneTimelineColor; - } - - double lineHeight = size.height / 2; - double margin = (size.height - lineHeight) / 2; - canvas.drawLine(Offset(currX, margin), - Offset(currX, size.height - margin), milestoneLinePaint); - - textPainter.paint( - canvas, Offset(currX, size.height - labelHeightDoubled)); - } - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) { - return true; - } -} diff --git a/web/github_dataviz/pubspec.yaml b/web/github_dataviz/pubspec.yaml deleted file mode 100644 index 0a5b48a99..000000000 --- a/web/github_dataviz/pubspec.yaml +++ /dev/null @@ -1,18 +0,0 @@ -name: github_dataviz - -environment: - sdk: ">=2.17.0-0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - intl: ^0.17.0 - http: ^0.13.4 - -dev_dependencies: - flutter_lints: ^2.0.1 - -flutter: - assets: - - preview.png - - github_data/ diff --git a/web/github_dataviz/web/index.html b/web/github_dataviz/web/index.html deleted file mode 100644 index 1785ebb8b..000000000 --- a/web/github_dataviz/web/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/web/particle_background/LICENSE b/web/particle_background/LICENSE deleted file mode 100644 index f1e7e2f51..000000000 --- a/web/particle_background/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Felix Blaschke - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/web/particle_background/README.md b/web/particle_background/README.md deleted file mode 100644 index 00e174861..000000000 --- a/web/particle_background/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Flutter app demonstrating -[simple_animations](https://pub.dev/packages/simple_animations) in action. - -Contributed by Felix Blaschke. - -One of a series of samples -[published here](https://github.com/felixblaschke/simple_animations/tree/2.4.2/example). diff --git a/web/particle_background/analysis_options.yaml b/web/particle_background/analysis_options.yaml deleted file mode 100644 index de149220e..000000000 --- a/web/particle_background/analysis_options.yaml +++ /dev/null @@ -1,11 +0,0 @@ -include: ../../analysis_options.yaml - -analyzer: - strong-mode: - implicit-casts: true - implicit-dynamic: true - -linter: - rules: - constant_identifier_names: false - diff --git a/web/particle_background/assets/preview.png b/web/particle_background/assets/preview.png deleted file mode 100644 index 7a63a7991..000000000 Binary files a/web/particle_background/assets/preview.png and /dev/null differ diff --git a/web/particle_background/lib/main.dart b/web/particle_background/lib/main.dart deleted file mode 100644 index 315c1f715..000000000 --- a/web/particle_background/lib/main.dart +++ /dev/null @@ -1,181 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -import 'package:particle_background/simple_animations_package.dart'; - -void main() => runApp(const ParticleApp()); - -class ParticleApp extends StatelessWidget { - const ParticleApp({super.key}); - - @override - Widget build(BuildContext context) { - return const MaterialApp( - home: Scaffold( - body: ParticleBackgroundPage(), - ), - ); - } -} - -class ParticleBackgroundPage extends StatelessWidget { - const ParticleBackgroundPage({super.key}); - - @override - Widget build(BuildContext context) { - return Stack( - children: const [ - Positioned.fill(child: AnimatedBackground()), - Positioned.fill(child: Particles(30)), - Positioned.fill(child: CenteredText()), - ], - ); - } -} - -class Particles extends StatefulWidget { - final int numberOfParticles; - - const Particles(this.numberOfParticles, {super.key}); - - @override - State createState() => _ParticlesState(); -} - -class _ParticlesState extends State { - final Random random = Random(); - - final List particles = []; - - @override - void initState() { - List.generate(widget.numberOfParticles, (index) { - particles.add(ParticleModel(random)); - }); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Rendering( - startTime: const Duration(seconds: 30), - onTick: _simulateParticles, - builder: (context, time) { - return CustomPaint( - painter: ParticlePainter(particles, time), - ); - }, - ); - } - - _simulateParticles(Duration time) { - for (var particle in particles) { - particle.maintainRestart(time); - } - } -} - -class ParticleModel { - late Animatable tween; - late double size; - late AnimationProgress animationProgress; - Random random; - - ParticleModel(this.random) { - restart(); - } - - restart({Duration time = Duration.zero}) { - final startPosition = Offset(-0.2 + 1.4 * random.nextDouble(), 1.2); - final endPosition = Offset(-0.2 + 1.4 * random.nextDouble(), -0.2); - final duration = Duration(milliseconds: 3000 + random.nextInt(6000)); - - tween = MultiTrackTween([ - Track("x").add( - duration, Tween(begin: startPosition.dx, end: endPosition.dx), - curve: Curves.easeInOutSine), - Track("y").add( - duration, Tween(begin: startPosition.dy, end: endPosition.dy), - curve: Curves.easeIn), - ]); - animationProgress = AnimationProgress(duration: duration, startTime: time); - size = 0.2 + random.nextDouble() * 0.4; - } - - maintainRestart(Duration time) { - if (animationProgress.progress(time) == 1.0) { - restart(time: time); - } - } -} - -class ParticlePainter extends CustomPainter { - List particles; - Duration time; - - ParticlePainter(this.particles, this.time); - - @override - void paint(Canvas canvas, Size size) { - final paint = Paint()..color = Colors.white.withAlpha(50); - - for (var particle in particles) { - var progress = particle.animationProgress.progress(time); - final animation = particle.tween.transform(progress); - final position = - Offset(animation["x"] * size.width, animation["y"] * size.height); - canvas.drawCircle(position, size.width * 0.2 * particle.size, paint); - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => true; -} - -class AnimatedBackground extends StatelessWidget { - const AnimatedBackground({super.key}); - - @override - Widget build(BuildContext context) { - final tween = MultiTrackTween([ - Track("color1").add( - const Duration(seconds: 3), - ColorTween( - begin: const Color(0xff8a113a), end: Colors.lightBlue.shade900)), - Track("color2").add(const Duration(seconds: 3), - ColorTween(begin: const Color(0xff440216), end: Colors.blue.shade600)) - ]); - - return ControlledAnimation( - playback: Playback.MIRROR, - tween: tween, - duration: tween.duration, - builder: (context, dynamic animation) { - return Container( - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topLeft, - end: Alignment.bottomRight, - colors: [animation["color1"], animation["color2"]])), - ); - }, - ); - } -} - -class CenteredText extends StatelessWidget { - const CenteredText({ - super.key, - }); - - @override - Widget build(BuildContext context) { - return const Center( - child: Text( - "Welcome to Flutter for web", - style: TextStyle(color: Colors.white, fontWeight: FontWeight.w200), - textScaleFactor: 4, - ), - ); - } -} diff --git a/web/particle_background/lib/simple_animations_package.dart b/web/particle_background/lib/simple_animations_package.dart deleted file mode 100644 index af5ae7374..000000000 --- a/web/particle_background/lib/simple_animations_package.dart +++ /dev/null @@ -1,455 +0,0 @@ -// Package simple_animations: -// https://pub.dev/packages/simple_animations - -import 'dart:math'; - -import 'package:flutter/scheduler.dart'; -import 'package:flutter/widgets.dart'; - -/// Widget to easily create a continuous animation. -/// -/// You need to specify a [builder] function that gets the build context passed -/// along with the [timeElapsed] (as a [Duration]) since the rendering started. -/// You can use this time to specify custom animations on it. -/// -/// The [builder] rebuilds all sub-widgets every frame. -/// -/// You define an [onTick] function that is called before builder to update -/// you rendered scene. It's also utilized during fast-forwarding the animation. -/// -/// Specify a [startTime] to fast-forward your animation in the beginning. -/// The widget will interpolate the animation by calling the [onTick] function -/// multiple times. (Default value is `20`. You can tune it by setting the -/// [startTimeSimulationTicks] property.) -class Rendering extends StatefulWidget { - final Widget Function(BuildContext context, Duration timeElapsed) builder; - final Function(Duration timeElapsed)? onTick; - final Duration startTime; - final int startTimeSimulationTicks; - - const Rendering( - {required this.builder, - this.onTick, - this.startTime = Duration.zero, - this.startTimeSimulationTicks = 20, - super.key}); - - @override - State createState() => _RenderingState(); -} - -class _RenderingState extends State - with SingleTickerProviderStateMixin { - late Ticker _ticker; - Duration _timeElapsed = const Duration(milliseconds: 0); - - @override - void initState() { - if (widget.startTime > Duration.zero) { - _simulateStartTimeTicks(); - } - - _ticker = createTicker((elapsed) { - _onRender(elapsed + widget.startTime); - }); - _ticker.start(); - super.initState(); - } - - void _onRender(Duration effectiveElapsed) { - if (widget.onTick != null) { - widget.onTick!(effectiveElapsed); - } - setState(() { - _timeElapsed = effectiveElapsed; - }); - } - - void _simulateStartTimeTicks() { - if (widget.onTick != null) { - for (var i in Iterable.generate(widget.startTimeSimulationTicks + 1)) { - final simulatedTime = Duration( - milliseconds: (widget.startTime.inMilliseconds * - i / - widget.startTimeSimulationTicks) - .round()); - widget.onTick!(simulatedTime); - } - } - } - - @override - void dispose() { - _ticker.stop(canceled: true); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return widget.builder(context, _timeElapsed); - } -} - -/// Animatable that tweens multiple parallel properties (called [Track]s). -/// --- -/// The constructor of [MultiTrackTween] expects a list of [Track] objects. -/// You can fetch the specified total duration via [duration] getter. -/// --- -/// Example: -/// -/// ```dart -/// final tween = MultiTrackTween([ -/// Track("color") -/// .add(Duration(seconds: 1), ColorTween(begin: Colors.red, end: Colors.blue)) -/// .add(Duration(seconds: 1), ColorTween(begin: Colors.blue, end: Colors.yellow)), -/// Track("width") -/// .add(Duration(milliseconds: 500), ConstantTween(200.0)) -/// .add(Duration(milliseconds: 1500), Tween(begin: 200.0, end: 400.0), -/// curve: Curves.easeIn) -/// ]); -/// -/// return ControlledAnimation( -/// duration: tween.duration, -/// tween: tween, -/// builder: (context, values) { -/// ... -/// } -/// ); -/// ``` -class MultiTrackTween extends Animatable> { - final _tracksToTween = {}; - var _maxDuration = 0; - - MultiTrackTween(List tracks) - : assert(tracks.isNotEmpty, "Add a List to configure the tween."), - assert(tracks.where((track) => track.items.isEmpty).isEmpty, - "Each Track needs at least one added Tween by using the add()-method.") { - _computeMaxDuration(tracks); - _computeTrackTweens(tracks); - } - - void _computeMaxDuration(List tracks) { - for (var track in tracks) { - final trackDuration = track.items - .map((item) => item.duration.inMilliseconds) - .reduce((sum, item) => sum + item); - _maxDuration = max(_maxDuration, trackDuration); - } - } - - void _computeTrackTweens(List tracks) { - for (var track in tracks) { - final trackDuration = track.items - .map((item) => item.duration.inMilliseconds) - .reduce((sum, item) => sum + item); - - final sequenceItems = track.items - .map((item) => TweenSequenceItem( - tween: item.tween, - weight: item.duration.inMilliseconds / _maxDuration)) - .toList(); - - if (trackDuration < _maxDuration) { - sequenceItems.add(TweenSequenceItem( - tween: ConstantTween(null), - weight: (_maxDuration - trackDuration) / _maxDuration)); - } - - final sequence = TweenSequence(sequenceItems); - - _tracksToTween[track.name] = - _TweenData(tween: sequence, maxTime: trackDuration / _maxDuration); - } - } - - /// Returns the highest duration specified by [Track]s. - /// --- - /// Use it to pass it into an [ControlledAnimation]. - /// - /// You can also scale it by multiplying a double value. - /// - /// Example: - /// ```dart - /// final tween = MultiTrackTween(listOfTracks); - /// - /// return ControlledAnimation( - /// duration: tween.duration * 1.25, // stretch animation by 25% - /// tween: tween, - /// builder: (context, values) { - /// ... - /// } - /// ); - /// ``` - Duration get duration { - return Duration(milliseconds: _maxDuration); - } - - @override - Map transform(double t) { - final Map result = {}; - _tracksToTween.forEach((name, tweenData) { - final double tTween = max(0, min(t, tweenData.maxTime! - 0.0001)); - result[name] = tweenData.tween!.transform(tTween); - }); - return result; - } -} - -/// Single property to tween. Used by [MultiTrackTween]. -class Track { - final String name; - final List items = []; - - Track(this.name); - - /// Adds a "piece of animation" to a [Track]. - /// - /// You need to pass a [duration] and a [tween]. It will return the track, so - /// you can specify a track in a builder's style. - /// - /// Optionally you can set a named parameter [curve] that applies an easing - /// curve to the tween. - Track add(Duration duration, Animatable tween, {Curve? curve}) { - items.add(TrackItem(duration, tween, curve: curve)); - return this; - } -} - -class TrackItem { - final Duration duration; - late Animatable tween; - - TrackItem(this.duration, Animatable tween, {Curve? curve}) { - if (curve != null) { - this.tween = tween.chain(CurveTween(curve: curve)); - } else { - this.tween = tween; - } - } -} - -class _TweenData { - final Animatable? tween; - final double? maxTime; - - _TweenData({this.tween, this.maxTime}); -} - -/// Playback tell the controller of the animation what to do. -enum Playback { - /// Animation stands still. - PAUSE, - - /// Animation plays forwards and stops at the end. - PLAY_FORWARD, - - /// Animation plays backwards and stops at the beginning. - PLAY_REVERSE, - - /// Animation will reset to the beginning and start playing forward. - START_OVER_FORWARD, - - /// Animation will reset to the end and start play backward. - START_OVER_REVERSE, - - /// Animation will play forwards and start over at the beginning when it - /// reaches the end. - LOOP, - - /// Animation will play forward until the end and will reverse playing until - /// it reaches the beginning. Then it starts over playing forward. And so on. - MIRROR -} - -/// Widget to create custom, managed, tween-based animations in a very simple way. -/// -/// --- -/// -/// An internal [AnimationController] will do everything you tell him by -/// dynamically assigning the one [Playback] to [playback] property. -/// By default the animation will start playing forward and stops at the end. -/// -/// A minimum set of properties are [duration] (time span of the animation), -/// [tween] (values to interpolate among the animation) and a [builder] function -/// (defines the animated scene). -/// -/// Instead of using [builder] as building function you can use for performance -/// critical scenarios [builderWithChild] along with a prebuild [child]. -/// -/// --- -/// -/// The following properties are optional: -/// -/// - You can apply a [delay] that forces the animation to pause a -/// specified time before the animation will perform the defined [playback] -/// instruction. -/// -/// - You can specify a [curve] that modifies the [tween] by applying a -/// non-linear animation function. You can find curves in [Curves], for -/// example [Curves.easeOut] or [Curves.easeIn]. -/// -/// - You can track the animation by setting an [AnimationStatusListener] to -/// the property [animationControllerStatusListener]. The internal [AnimationController] then -/// will route out any events that occur. [ControlledAnimation] doesn't filter -/// or modifies these events. These events are currently only reliable for the -/// [playback]-types [Playback.PLAY_FORWARD] and [Playback.PLAY_REVERSE]. -/// -/// - You can set the start position of animation by specifying [startPosition] -/// with a value between *0.0* and *1.0*. The [startPosition] is only -/// evaluated once during the initialization of the widget. -/// -class ControlledAnimation extends StatefulWidget { - final Playback playback; - final Animatable tween; - final Curve curve; - final Duration duration; - final Duration? delay; - final Widget Function(BuildContext buildContext, T animatedValue)? builder; - final Widget Function(BuildContext, Widget? child, T animatedValue)? - builderWithChild; - final Widget? child; - final AnimationStatusListener? animationControllerStatusListener; - final double startPosition; - - const ControlledAnimation( - {this.playback = Playback.PLAY_FORWARD, - required this.tween, - this.curve = Curves.linear, - required this.duration, - this.delay, - this.builder, - this.builderWithChild, - this.child, - this.animationControllerStatusListener, - this.startPosition = 0.0, - super.key}) - : assert( - (builderWithChild != null && child != null && builder == null) || - (builder != null && builderWithChild == null && child == null), - "Either use just builder and keep buildWithChild and child null. " - "Or keep builder null and set a builderWithChild and a child."), - assert( - startPosition >= 0 && startPosition <= 1, - "The property startPosition " - "must have a value between 0.0 and 1.0."); - - @override - State createState() => _ControlledAnimationState(); -} - -class _ControlledAnimationState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _animation; - bool _isDisposed = false; - bool _waitForDelay = true; - bool _isCurrentlyMirroring = false; - - @override - void initState() { - _controller = AnimationController(vsync: this, duration: widget.duration) - ..addListener(() { - setState(() {}); - }) - ..value = widget.startPosition; - - _animation = widget.tween - .chain(CurveTween(curve: widget.curve)) - .animate(_controller) as Animation; - - if (widget.animationControllerStatusListener != null) { - _controller.addStatusListener(widget.animationControllerStatusListener!); - } - - initialize(); - super.initState(); - } - - Future initialize() async { - if (widget.delay != null) { - await Future.delayed(widget.delay!); - } - _waitForDelay = false; - await executeInstruction(); - } - - @override - void didUpdateWidget(ControlledAnimation oldWidget) { - _controller.duration = widget.duration; - executeInstruction(); - super.didUpdateWidget(oldWidget); - } - - Future executeInstruction() async { - if (_isDisposed || _waitForDelay) { - return; - } - - if (widget.playback == Playback.PAUSE) { - _controller.stop(); - } - if (widget.playback == Playback.PLAY_FORWARD) { - await _controller.forward(); - } - if (widget.playback == Playback.PLAY_REVERSE) { - await _controller.reverse(); - } - if (widget.playback == Playback.START_OVER_FORWARD) { - await _controller.forward(from: 0.0); - } - if (widget.playback == Playback.START_OVER_REVERSE) { - await _controller.reverse(from: 1.0); - } - if (widget.playback == Playback.LOOP) { - await _controller.repeat(); - } - if (widget.playback == Playback.MIRROR && !_isCurrentlyMirroring) { - _isCurrentlyMirroring = true; - await _controller.repeat(reverse: true); - } - - if (widget.playback != Playback.MIRROR) { - _isCurrentlyMirroring = false; - } - } - - @override - Widget build(BuildContext context) { - if (widget.builder != null) { - return widget.builder!(context, _animation.value); - } else if (widget.builderWithChild != null && widget.child != null) { - return widget.builderWithChild!(context, widget.child, _animation.value); - } - _controller.stop(canceled: true); - throw FlutterError( - "I don't know how to build the animation. Make sure to either specify " - "a builder or a builderWithChild (along with a child)."); - } - - @override - void dispose() { - _isDisposed = true; - _controller.dispose(); - super.dispose(); - } -} - -/// Utility class to compute an animation progress between two points in time. -/// -/// On creation you specify a [startTime] and a [duration]. -/// -/// You can query the progress value - a value between `0.0` and `11.0` - by -/// calling [progress] and passing the current time. -class AnimationProgress { - final Duration duration; - final Duration startTime; - - /// Creates an [AnimationProgress]. - AnimationProgress({required this.duration, required this.startTime}); - - /// Queries the current progress value based on the specified [startTime] and - /// [duration] as a value between `0.0` and `1.0`. It will automatically - /// clamp values this interval to fit in. - double progress(Duration time) => max(0.0, - min((time - startTime).inMilliseconds / duration.inMilliseconds, 1.0)); -} diff --git a/web/particle_background/pubspec.yaml b/web/particle_background/pubspec.yaml deleted file mode 100644 index b99d326ed..000000000 --- a/web/particle_background/pubspec.yaml +++ /dev/null @@ -1,14 +0,0 @@ -name: particle_background -description: Example for the simple_animations package -homepage: https://github.com/felixblaschke/simple_animations - -environment: - sdk: ">=2.17.0-0 <3.0.0" - -dependencies: - flutter: - sdk: flutter - flutter_lints: ^2.0.1 -flutter: - assets: - - preview.png diff --git a/web/particle_background/web/index.html b/web/particle_background/web/index.html deleted file mode 100644 index 1785ebb8b..000000000 --- a/web/particle_background/web/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/web/readme.md b/web/readme.md index b0c6f207e..f6d678af1 100644 --- a/web/readme.md +++ b/web/readme.md @@ -32,7 +32,7 @@ $ flutter pub global activate peanut Verify `pub get` has been run on each demo: ```console -$ dart _tool/verify_packages.dart +$ dart run _tool/verify_packages.dart ``` Build all demos, along with the sample index: diff --git a/web/samples_index/.gitignore b/web/samples_index/.gitignore index bc8e6f07c..99161f407 100644 --- a/web/samples_index/.gitignore +++ b/web/samples_index/.gitignore @@ -3,7 +3,6 @@ public/ # Files and directories created by pub .dart_tool/ -.packages # Remove the following pattern if you wish to check in your lock file pubspec.lock diff --git a/web/samples_index/README.md b/web/samples_index/README.md index ff23f21fb..06d60ab74 100644 --- a/web/samples_index/README.md +++ b/web/samples_index/README.md @@ -7,9 +7,8 @@ This tool is used to generate the visual samples index for Flutter samples. We use [grinder](https://pub.dev/packages/grinder) to run the build tasks: ```bash -$ pub get -$ pub global activate grinder -$ grind generate +$ dart pub get +$ dart run grinder generate ``` This will generate the index into `./web` @@ -20,6 +19,7 @@ If you want to serve the index locally, you can use [webdev](https://pub.dev/packages/webdev): ```bash +$ dart pub global activate grinder $ webdev serve ``` @@ -28,16 +28,16 @@ $ webdev serve You can build the complete index into a publishable directory using Grinder: ```bash -$ grind build-release +$ dart run grinder build-release ``` This outputs the completely built index to `./public`. ## Generating cookbook content -The cookbook articles are generated using a WebDriver script that scrapes the -flutter.dev website. To run: +The cookbook articles are generated using a WebDriver script +that scrapes the docs.flutter.dev website. To run: 1. Install [ChromeDriver](https://chromedriver.chromium.org/downloads) 2. run `chromedriver --port=4444 --url-base=wd/hub --verbose` -3. run `grind scrape-cookbook` +3. run `dart run grinder scrape-cookbook` diff --git a/web/samples_index/analysis_options.yaml b/web/samples_index/analysis_options.yaml index d28c30e05..973c98aad 100644 --- a/web/samples_index/analysis_options.yaml +++ b/web/samples_index/analysis_options.yaml @@ -3,9 +3,10 @@ include: package:flutter_lints/flutter.yaml analyzer: exclude: - lib/src/data.g.dart - strong-mode: - implicit-casts: false - implicit-dynamic: false + language: + strict-casts: true + strict-inference: true + strict-raw-types: true linter: rules: @@ -16,6 +17,11 @@ linter: directives_ordering: true package_api_docs: true package_prefixed_library_names: true + prefer_final_in_for_each: true + prefer_single_quotes: true test_types_in_equals: true throw_in_finally: true + unawaited_futures: true unnecessary_statements: true + use_enums: true + use_super_parameters: true diff --git a/web/samples_index/lib/cookbook.dart b/web/samples_index/lib/cookbook.dart index 2db0bbd67..ff842d2b4 100644 --- a/web/samples_index/lib/cookbook.dart +++ b/web/samples_index/lib/cookbook.dart @@ -9,16 +9,16 @@ import 'package:path/path.dart' as path; import 'package:samples_index/src/data.dart'; /// Utilities for generating cookbook article data -import 'package:webdriver/io.dart'; +import 'package:webdriver/async_io.dart'; class CookbookScraper { late WebDriver _driver; - Future init() async { + Future init() async { _driver = await createDriver(desired: {}); } - Future dispose() async { + Future dispose() async { await _driver.quit(); } @@ -59,7 +59,7 @@ class CookbookScraper { ); } - Future takeScreenshot(String url) async { + Future takeScreenshot(String url) async { var screenshot = await _driver.captureScreenshotAsList(); var file = File('web/${screenshotPath(url)}'); await file.create(recursive: true); diff --git a/web/samples_index/lib/src/carousel.dart b/web/samples_index/lib/src/carousel.dart index b617e983f..9d1841c80 100644 --- a/web/samples_index/lib/src/carousel.dart +++ b/web/samples_index/lib/src/carousel.dart @@ -11,7 +11,7 @@ class Carousel { final List slides = querySelectorAll('.slider-single'); late int currentSlideIndex; - late int lastSlideIndex; + late final int lastSlideIndex; late Element prevSlide, currentSlide, nextSlide; @@ -127,24 +127,24 @@ class Carousel { } void _checkRepeat() { - var prevArrow = querySelector('.slider-left'); - var nextArrow = querySelector('.slider-right'); + var prevArrow = querySelector('.slider-left') as AnchorElement; + var nextArrow = querySelector('.slider-right') as AnchorElement; if (currentSlideIndex == slides.length - 1) { slides[0].classes.add('hidden'); slides[slides.length - 1].classes.remove('hidden'); - prevArrow!.classes.remove('hidden'); - nextArrow!.classes.add('hidden'); + prevArrow.classes.remove('hidden'); + nextArrow.classes.add('hidden'); } else if (currentSlideIndex == 0) { slides[slides.length - 1].classes.add('hidden'); slides[0].classes.remove('hidden'); - prevArrow!.classes.add('hidden'); - nextArrow!.classes.remove('hidden'); + prevArrow.classes.add('hidden'); + nextArrow.classes.remove('hidden'); } else { slides[slides.length - 1].classes.remove('hidden'); slides[0].classes.remove('hidden'); - prevArrow!.classes.remove('hidden'); - nextArrow!.classes.remove('hidden'); + prevArrow.classes.remove('hidden'); + nextArrow.classes.remove('hidden'); } } diff --git a/web/samples_index/lib/src/data.dart b/web/samples_index/lib/src/data.dart index 3332b5e05..a33d66ca7 100644 --- a/web/samples_index/lib/src/data.dart +++ b/web/samples_index/lib/src/data.dart @@ -22,7 +22,7 @@ class Index { Index(this.samples); - factory Index.fromJson(Map json) => _$IndexFromJson(json); + factory Index.fromJson(Map json) => _$IndexFromJson(json); Map toJson() => _$IndexToJson(this); } @@ -100,7 +100,7 @@ class Sample { this.channel, }); - factory Sample.fromJson(Map json) => _$SampleFromJson(json); + factory Sample.fromJson(Map json) => _$SampleFromJson(json); Map toJson() => _$SampleToJson(this); @@ -116,25 +116,25 @@ class Sample { buf.write(name.toLowerCase()); buf.write(' '); - for (var tag in tags) { + for (final tag in tags) { buf.write('tag:${tag.toLowerCase()} '); // Allow tags to be searched without the tag: prefix buf.write('${tag.toLowerCase()} '); } - for (var platform in platforms) { + for (final platform in platforms) { buf.write('platform:$platform '); // Allow platforms to be searched without the tag: prefix buf.write('$platform '); } - for (var widget in widgets) { + for (final widget in widgets) { buf.write('widget:$widget '); } - for (var package in packages) { + for (final package in packages) { buf.write('package:$package '); } @@ -167,7 +167,8 @@ class Screenshot { Screenshot(this.url, this.alt); - factory Screenshot.fromJson(Map json) => _$ScreenshotFromJson(json); + factory Screenshot.fromJson(Map json) => + _$ScreenshotFromJson(json); Map toJson() => _$ScreenshotToJson(this); } @@ -180,7 +181,7 @@ class Link { Link(this.text, this.href); - factory Link.fromJson(Map json) => _$LinkFromJson(json); + factory Link.fromJson(Map json) => _$LinkFromJson(json); Map toJson() => _$LinkToJson(this); } diff --git a/web/samples_index/lib/src/samples.yaml b/web/samples_index/lib/src/samples.yaml index 7697f087b..96ce47ff4 100644 --- a/web/samples_index/lib/src/samples.yaml +++ b/web/samples_index/lib/src/samples.yaml @@ -11,7 +11,7 @@ samples: - url: images/gallery4.png alt: Crane app screenshot - url: images/gallery5.png - alt: Shrine app screnshot + alt: Shrine app screenshot source: https://github.com/flutter/gallery web: https://gallery.flutter.dev description: > @@ -109,6 +109,24 @@ samples: links: [] type: sample + - name: Code Sharing + author: Flutter + screenshots: + - url: images/code_sharing.jpg + alt: Counter app communicating with server + source: https://github.com/flutter/samples/tree/main/code_sharing + description: > + Demonstrates simple way to share business logic between a Flutter app and + a server running Dart. + difficulty: intermediate + packages: + - freezed + - shelf + tags: ['intermediate', 'sample', 'code-sharing', 'dart', 'server'] + platforms: ['android', 'ios', 'linux', 'macos', 'web', 'windows'] + links: [] + type: sample + - name: Animations author: Flutter screenshots: @@ -398,7 +416,7 @@ samples: - url: images/web_dashboard1.png alt: Web Dashboard screenshot - url: images/web_dashboard2.png - alt: Web Dashbaord screenshot + alt: Web Dashboard screenshot - url: images/web_dashboard3.png alt: Web Dashboard screenshot source: https://github.com/flutter/samples/tree/main/experimental/web_dashboard @@ -599,57 +617,6 @@ samples: type: demo web: web/game_template - - name: Charts - author: Flutter - screenshots: - - url: images/charts1.png - alt: Charts screenshot - source: https://github.com/google/charts - description: > - A general-purpose charting library. - difficulty: intermediate - widgets: [] - packages: [] - platforms: ['ios', 'android', 'web'] - links: [] - tags: ['demo', 'charts'] - web: web/charts - type: demo - - - name: GitHub Dataviz - author: Larva Labs - screenshots: - - url: images/github_dataviz1.png - alt: GitHub Dataviz screenshot - source: https://github.com/flutter/samples/tree/main/web/github_dataviz - description: > - A visualization for Flutter repository data - difficulty: intermediate - widgets: [] - packages: [] - platforms: ['web'] - links: [] - tags: ['demo', 'data', 'visualization'] - web: web/github_dataviz - type: demo - - - name: Particle Background - author: Felix Blaschke - screenshots: - - url: images/particle_background1.png - alt: Particle Background screenshot - source: https://github.com/flutter/samples/tree/main/web/particle_background - description: > - Flutter app demonstrating package:simple_animations in action. - difficulty: intermediate - widgets: [] - packages: [] - platforms: ['web'] - links: [] - tags: ['demo', 'animation'] - web: web/particle_background - type: demo - - name: Dice author: Jaime Blasco screenshots: diff --git a/web/samples_index/lib/src/search.dart b/web/samples_index/lib/src/search.dart index eb9b06c55..7f57e7794 100644 --- a/web/samples_index/lib/src/search.dart +++ b/web/samples_index/lib/src/search.dart @@ -6,14 +6,17 @@ bool matchesQuery(String query, String sampleAttributes) { if (query.isEmpty) { return true; } - var queryWords = query.split(' ')..removeWhere((s) => s.isEmpty); - var attributes = sampleAttributes.split(' ')..removeWhere((s) => s.isEmpty); + + var queryWords = query.toLowerCase().split(' ') + ..removeWhere((s) => s.isEmpty); + var attributes = sampleAttributes.toLowerCase().split(' ') + ..removeWhere((s) => s.isEmpty); // Test for type filter // This will check whether a type parameter is present in the // search query, and return false if the self type mismatches // the query type - for (var word in queryWords) { + for (final word in queryWords) { if ((word.contains('type:') && !attributes.contains(word)) || (word.contains('platform:') && !attributes.contains('type:demo'))) { return false; @@ -27,7 +30,7 @@ bool matchesQuery(String query, String sampleAttributes) { // Test for exact matches for keywords var matches = 0; - for (var word in queryWords) { + for (final word in queryWords) { if (attributes.contains(word)) { matches++; } @@ -40,8 +43,8 @@ bool matchesQuery(String query, String sampleAttributes) { // e.g. searching "kitten tag:cats" is a match for a sample with the // attributes "kittens tag:cats" matches = 0; - for (var attribute in attributes) { - for (var queryWord in queryWords) { + for (final attribute in attributes) { + for (final queryWord in queryWords) { if (attribute.startsWith(queryWord)) { matches++; } diff --git a/web/samples_index/lib/src/templates.dart b/web/samples_index/lib/src/templates.dart index aeabdf027..5d8c98ece 100644 --- a/web/samples_index/lib/src/templates.dart +++ b/web/samples_index/lib/src/templates.dart @@ -29,7 +29,7 @@ $_footer '''; -String _indexHeader = ''' +const String _indexHeader = ''' Flutter samples @@ -39,11 +39,11 @@ String _indexHeader = ''' - ${_googleAnalytics()} + $_googleAnalytics '''; -String _descriptionHeader = ''' +const String _descriptionHeader = ''' Flutter samples @@ -54,11 +54,11 @@ String _descriptionHeader = ''' - ${_googleAnalytics()} + $_googleAnalytics '''; -String _navbar = ''' +const String _navbar = '''